@syncfusion/ej2-treegrid 19.3.46 → 19.3.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/ej2-treegrid.umd.min.js +2 -2
  3. package/dist/ej2-treegrid.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-treegrid.es2015.js +55 -11
  5. package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
  6. package/dist/es6/ej2-treegrid.es5.js +55 -12
  7. package/dist/es6/ej2-treegrid.es5.js.map +1 -1
  8. package/dist/global/ej2-treegrid.min.js +2 -2
  9. package/dist/global/ej2-treegrid.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +9 -9
  12. package/src/treegrid/actions/batch-edit.js +14 -4
  13. package/src/treegrid/actions/edit.js +6 -0
  14. package/src/treegrid/actions/rowdragdrop.js +1 -1
  15. package/src/treegrid/actions/virtual-scroll.js +6 -1
  16. package/src/treegrid/base/data.js +3 -1
  17. package/src/treegrid/base/treegrid.js +22 -4
  18. package/src/treegrid/renderer/virtual-tree-content-render.js +3 -1
  19. package/styles/bootstrap-dark.css +1 -1
  20. package/styles/bootstrap.css +1 -1
  21. package/styles/bootstrap4.css +1 -1
  22. package/styles/bootstrap5-dark.css +2 -1
  23. package/styles/bootstrap5.css +2 -1
  24. package/styles/fabric-dark.css +1 -1
  25. package/styles/fabric.css +1 -1
  26. package/styles/highcontrast-light.css +1 -1
  27. package/styles/highcontrast.css +1 -1
  28. package/styles/material-dark.css +1 -1
  29. package/styles/material.css +1 -1
  30. package/styles/tailwind-dark.css +1 -1
  31. package/styles/tailwind.css +1 -1
  32. package/styles/treegrid/_layout.scss +1 -1
  33. package/styles/treegrid/bootstrap-dark.css +1 -1
  34. package/styles/treegrid/bootstrap.css +1 -1
  35. package/styles/treegrid/bootstrap4.css +1 -1
  36. package/styles/treegrid/bootstrap5-dark.css +2 -1
  37. package/styles/treegrid/bootstrap5.css +2 -1
  38. package/styles/treegrid/fabric-dark.css +1 -1
  39. package/styles/treegrid/fabric.css +1 -1
  40. package/styles/treegrid/highcontrast-light.css +1 -1
  41. package/styles/treegrid/highcontrast.css +1 -1
  42. package/styles/treegrid/material-dark.css +1 -1
  43. package/styles/treegrid/material.css +1 -1
  44. package/styles/treegrid/tailwind-dark.css +1 -1
  45. package/styles/treegrid/tailwind.css +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-treegrid.umd.min.js","sources":["../src/treegrid/utils.js","../src/treegrid/actions/crud-actions.js","../src/treegrid/models/column.js","../src/treegrid/models/filter-settings.js","../src/treegrid/models/textwrap-settings.js","../src/treegrid/actions/logger.js","../src/treegrid/base/constant.js","../src/treegrid/actions/clipboard.js","../src/treegrid/actions/selection.js","../src/treegrid/actions/print.js","../src/treegrid/models/search-settings.js","../src/treegrid/models/selection-settings.js","../src/treegrid/renderer/render.js","../src/treegrid/base/data.js","../src/treegrid/enum.js","../src/treegrid/models/page-settings.js","../src/treegrid/models/summary.js","../src/treegrid/models/edit-settings.js","../src/treegrid/models/sort-settings.js","../src/treegrid/models/infinite-scroll-settings.js","../src/treegrid/base/treegrid.js","../src/treegrid/actions/reorder.js","../src/treegrid/actions/resize.js","../src/treegrid/actions/rowdragdrop.js","../src/treegrid/models/rowdrop-settings.js","../src/treegrid/renderer/virtual-row-model-generator.js","../src/treegrid/actions/filter.js","../src/treegrid/actions/excel-export.js","../src/treegrid/actions/pdf-export.js","../src/treegrid/actions/page.js","../src/treegrid/actions/toolbar.js","../src/treegrid/actions/summary.js","../src/treegrid/actions/sort.js","../src/treegrid/actions/column-menu.js","../src/treegrid/actions/context-menu.js","../src/treegrid/actions/batch-edit.js","../src/treegrid/actions/edit.js","../src/treegrid/actions/command-column.js","../src/treegrid/actions/detail-row.js","../src/treegrid/renderer/virtual-tree-content-render.js","../src/treegrid/actions/virtual-scroll.js","../src/treegrid/actions/freeze-column.js","../src/treegrid/actions/column-chooser.js","../src/treegrid/actions/infinite-scroll.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords;\n for (var i = 0, len = Object.keys(childRecords).length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n parentData['childRecords'].splice(p, 1);\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\n var editModule = 'editModule';\n control.grid.editModule[editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[control.parentIdMapping] = childRecords[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[key] === record[key]) {\n index_1 = i;\n return;\n } });\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[key] !== child[key]) {\n record.childRecords.push(child);\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[control.childMapping].indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[i][primaryKeys] === record[primaryKeys]) {\n data[i] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = 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 *\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 *\n * @default true\n */\n this.showColumnMenu = 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 *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\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 *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\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 *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid 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 __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\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 __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 textwrap behavior of the TreeGrid.\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.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 this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var columns = (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = this.parent.columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 filtering behavior of the TreeGrid.\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(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 selection behavior of the TreeGrid.\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, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('aria-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n for (var i = 0; i < Object.keys(data).length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n for (var i = 0, len = Object.keys(data).length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var col = this.parent.grid.getColumnByField(this.parent.grid.sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\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[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 TreeGrid.\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 __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid'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.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.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 /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\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 };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\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, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\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 __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\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('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", 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 __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, Collection } from '@syncfusion/ej2-base';\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 TreeGrid.\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree 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 {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\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 {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} 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 {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n this.sortModule.removeSortColumn(field);\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\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 *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount()) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.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 /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n this.grid.appendTo(gridContainer);\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise.resolve(actionArgs);\n });\n return callBackPromise;\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n _this.trigger(events.actionComplete, args);\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n index = index === 0 ? -1 : index;\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n }\n return gridColumnCollection;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n this.grid.columns = this.getGridColumns(this.columns);\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\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 this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var _i = 0, _a = ignoreOnPersist[keyEntity[i]]; _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 TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\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 *\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 * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\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 *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides a column by column name.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[columnModel], 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 a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var stackedHeader = false;\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n stackedHeader = true;\n }\n if (!stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.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 * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ? this.flatData :\n new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandRow(null, rec);\n }\n else {\n var rec = this.getRecordDetails(level);\n var row = getObject('rows', rec);\n var record = getObject('records', rec);\n for (var i = 0; i < record.length; i++) {\n if (record[i].parentItem !== undefined) {\n var pindex = this.flatData[record[i].parentItem.index].index;\n if (this.flatData[pindex].expanded === false) {\n record.push(this.flatData[pindex]);\n this.flatData[pindex].expanded = true;\n }\n }\n this.expandRow(row[i], record[i]);\n }\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseRow(null, record);\n }\n else {\n var rec = this.getRecordDetails(level);\n var rows = getObject('rows', rec);\n var records = getObject('records', rec);\n for (var i = 0; i < records.length; i++) {\n this.collapseRow(rows[i], records[i]);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if (!isNullOrUndefined(childRecords[i].childRecords) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\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 TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\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 * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = this.parent.treeColumnIndex + 1;\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n for (var i = 0; i < totalRecord.length; i++) {\n this.parent.renderModule.cellRender({\n data: totalRecord[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n var _loop_1 = function (i) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = currentData.filter(function (data) {\n return data.uniqueID === currentData[i].parentUniqueID;\n })[0];\n currentData[i].parentItem.index = updatedParent.index;\n }\n };\n for (var i = 0; i < currentData.length; i++) {\n _loop_1(i);\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping) && draggedRecord_1[tObj.parentIdMapping] != null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n for (var i = 0; i < Object.keys(tempDataSource).length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n if (errorelem) {\n errorelem.remove();\n }\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping != null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record) {\n var parentItem = record.parentItem;\n if (this.dropPosition === 'bottomSegment') {\n var selectedRecord = this.parent.getSelectedRecords()[0];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getSelectedRecords()[0].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var rowIndex = tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_2 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_2(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 row drop settings of the TreeGrid.\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var tObj = this.parent;\n if (args.row.rowIndex === 0 || tObj.getSelectedRecords().length > 1) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent', tObj.element.id + '_gridcontrol_outdent'], false);\n }\n else {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex])) {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex]) &&\n (tObj.getCurrentViewRecords()[args.row.rowIndex].level >\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level)) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n else {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level ===\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level === 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level !== 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n }\n if (args.row.rowIndex === 0 && !isNullOrUndefined(args.data.parentItem)) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length) {\n var record = tObj.getCurrentViewRecords()[tObj.getSelectedRowIndexes()[0] - 1];\n var dropIndex = void 0;\n if (record.level > tObj.getSelectedRecords()[0].level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = tObj.getSelectedRowIndexes()[0] - 1;\n }\n tObj.reorderRows([tObj.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n var index = tObj.getSelectedRowIndexes()[0];\n var dropIndex = void 0;\n var parentItem = tObj.getSelectedRecords()[0].parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n tObj.reorderRows([index], dropIndex, 'below');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\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 * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\n item[field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[key] = this.getSummaryValues(summary.columns[i], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[key] = this.getSummaryValues(summary.columns[i], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[summaryColumn.columnName][summaryKey];\n var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\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 * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.addRecord();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][parentItem][uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[rowObjectIndex].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[this.addRowIndex][level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function () {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n var childs = findChildrenRecords(data);\n var uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem])) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('aria-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('aria-rowindex');\n tr.setAttribute('aria-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex)) {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data = args.data;\n for (var i = 0; i < data.length; i++) {\n this.deleteUniqueID(data[i].uniqueID);\n var childs = findChildrenRecords(data[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = this.parent.grid.getCurrentViewRecords();\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction());\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || this.isDataSourceChanged) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n _super.prototype[selectVirtualRow].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\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, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.ariaRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n this.parent.grid.clearSelection();\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var visualData = dm.executeLocal(new Query().where(expanded));\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex + 1]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","currentViewRecords","getCurrentViewRecords","extend","newRowPosition","unshift","primaryKeys","currentdata","addAction","Array","k","_loop_1","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","filter","e","p","removeChildRecords","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","enableImmutableMode","renderModule","cellRender","cell","cells","column","getColumns","requestType","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","rowDataBound","queryCellInfo","beforeDataBound","actionBegin","actionComplete","rowSelected","checkboxChange","rowDeselected","toolbarClick","beforeExcelExport","beforePdfExport","collapsed","remoteExpand","localPagedExpandCollapse","pagingActions","printGridInit","contextMenuOpen","contextMenuClick","crudAction","beginEdit","beginAdd","recordDoubleClick","cellSave","cellSaved","cellEdit","batchDelete","batchCancel","batchAdd","beforeBatchDelete","beforeBatchAdd","beforeBatchSave","batchSave","keyPressed","doubleTap","virtualActionArgs","dataListener","indexModifier","beforeStartEdit","beforeBatchCancel","detailDataBound","rowDragStartHelper","rowsAdd","rowsRemove","rowdraging","rowDropped","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","copyContent","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","events.checkboxChange","getCheckboxcolumnIndex","mappingUid","columnIndex","col","uid","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","events.printGridInit","printTreeGrid","printGrid","gridElement","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","RowModifier","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","templateFn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","portals","isReact","result","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","events.remoteExpand","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","getElementsByClassName","getRowObjectFromUID","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","getRowsObject","haveChild","events.actionComplete","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","events.expanded","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","getColumnByField","compFun","sortComparer","bind","direction","sortBy","sortArgs","temp","paging","printMode","actArgs","events.pagingActions","isCollapsedStatePersist","actualResults","dataResult","events.crudAction","events.batchSave","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","undefined","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","setProperties","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","cellIndex","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","renderComplete","destroyTemplateFn","clearTemplate","afterGridRender","clipboardModule","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","templateInstance","triggerEvents","bindGridEvents","rowSelecting","events.rowSelected","events.rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","callBackPromise","events.toolbarClick","toolbarargs","cellSelecting","cellselectingArgs","events.beginEdit","begineditArgs","isExpandRefresh","events.dataStateChange","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","events.cellSave","cellsaveArgs","events.cellSaved","promise","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","events.actionBegin","updateTreeGridModel","events.beginAdd","ag","showChildSummary","refresh","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","rowDragStart","rowDrag","isEdit","events.rowdraging","rowDrop","events.rowDropped","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","closeEdit","treeGridElement","hasTreeGridChild","removeListener","dataBind","getPersistData","keyEntity","ignoreOnPersist","currentObject","ignoreInArrays","addOnPersist","ignoreOnColumn","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","toolbarModule","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","goToPage","pageNo","pagerModule","updateExternalMessage","getCellFromIndex","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","stackedHeader","getContent","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","selectionModule","getVisibleRecords","visibleRecords","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","collapseArgs","setHeightForFrozenContent","freeze","refreshScrollOffset","collapsingArgs","events.collapsed","firstElementChild","scrollHeight","scrollTop","getRowHeight","scrollBy","expandAtLevel","getRecordDetails","pindex","collapseAtLevel","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","localExpand","sHeight","clientHeight","events.localPagedExpandCollapse","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","primaryKeyField","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","rowDragAndDropModule","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","events.rowsAdd","rowsAdded","events.rowsRemove","rowsRemoved","tObj","dropPosition","dropIndex","dropRows","orderToIndex","dropData","totalRecord","parentrow","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","document","getElementById","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","getToolbar","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","errorelem","border","box","getBoundingClientRect","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","left","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","selectedRecord","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","_loop_2","this_1","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","events.dataListener","getDatas","visualData","getDataInfo","getData","generateRows","info","virtualInfo","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","event.beforeExcelExport","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","indent","excelRow","excelrowobj","rowObj","filtercolumnlength","Boolean","rowlength","excelRows","rowlevel","expandedStatus","sublevelState","state","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","event.beforePdfExport","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","pageingDetails","propname","skip","size","pageSize","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","val","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","primarykey","childs","parentRowIndex","getRowElementByUID","totalCount","selectedRecords","mRows","deleterecords","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","totalRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","events.keyPressed","lastCellTab","contentready","editActionEvents","events.doubleTap","gridDblClick","customCellSave","savePreviousRowPosition","events.beforeStartEdit","events.beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","request","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","treecell","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","selector","beginAddEdit","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","events.virtualActionArgs","virtualOtherAction","events.indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","initialRowTop","gridTop","containerRect","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","event","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","serviceLocator","rowRenderer","RowRenderer","childRowObjects","childRowElements","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow"],"mappings":"shBAQA,SAAgBA,EAAaC,GACzB,GAAIA,EAAOC,sBAAsBC,cAAa,CAC1C,IAAIC,EAAUH,EAAOC,WAAWE,QAChC,OAAQA,aAAmBC,gBACtBD,aAAmBE,iBAAmBF,aAAmBG,oBACzDH,aAAmBI,gBAAiBJ,aAAmBK,aAEhE,OAAO,EAMX,SAAgBC,EAAgBT,GAC5B,SAAIA,EAAOC,YAAc,WAAYD,EAAOC,YAShD,SAAgBS,EAAiBV,GAC7B,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAOY,QAAQC,OAAQF,IACvC,GAAIX,EAAOY,QAAQD,GAAGG,aAClB,OAAO,EAGf,OAAO,EAMX,SAAgBC,EAAuBf,GACnC,SAAMgB,oBAAkBhB,EAAOiB,KAAKC,eAAeC,MAA2C,KAAnCnB,EAAOiB,KAAKC,eAAeC,KACzC,UAAxCnB,EAAOkB,eAAeE,eAAqE,SAAxCpB,EAAOkB,eAAeE,kBACzEpB,EAAOqB,iBAAkBrB,EAAOiB,KAAKK,eAAeV,QAAQC,QAChB,UAAxCb,EAAOsB,eAAeF,eAAqE,SAAxCpB,EAAOsB,eAAeF,gBAUtF,SAAgBG,EAAkBC,GAG9B,IAAK,IAFDC,KAEKd,EAAI,EAAGe,EADIC,OAAOC,KAAKJ,GAASX,OACJF,EAAIe,EAAKf,IAAK,CAChCkB,YAAU,kBAAmBL,EAAQb,KAEhDc,EAAMK,KAAKN,EAAQb,IAG3B,OAAOc,EASX,SAAgBM,EAAgB/B,EAAQgC,EAAQC,GAC5C,IAEIC,EAFAC,EAAenB,oBAAkBgB,EAAOI,YAAc,KACtDC,EAAcrC,EAAQgC,EAAOI,WAAWE,UAE5C,OAAoB,MAAhBH,KACInC,EAAOuC,eAAkBvB,oBAAkBmB,EAAanC,EAAOwC,sBAC3DL,EAAanC,EAAOwC,qBAIO,IAA1BL,EAAaM,YAGbN,EAAaC,cAClBF,EAAcG,EAAcrC,EAAQmC,EAAaC,WAAWE,YACzCtC,EAAOuC,gBAAkBvB,oBAAkBkB,EAAYlC,EAAOwC,uBACzEN,EAAYlC,EAAOwC,qBACvBN,EAAYO,UAAW,GAChB,KAEPP,IAAwC,IAAzBA,EAAYO,aAGtBP,GACEH,EAAgB/B,EAAQkC,EAAaD,OAjBhDE,EAAaM,UAAW,GACjB,IAiCnB,SAAgBC,EAAoBlB,GAChC,IAAIC,KACJ,GAAIT,oBAAkBQ,KAAcA,EAAQmB,kBAAoB3B,oBAAkBQ,EAAQoB,gBAClFpB,EAAQoB,aAAa/B,OACzB,SAEJ,IAAKG,oBAAkBQ,EAAQoB,cAE3B,IAAK,IADDA,EAAepB,EAAQoB,aAClBjC,EAAI,EAAGe,EAAMC,OAAOC,KAAKgB,GAAc/B,OAAQF,EAAIe,EAAKf,IAC7Dc,EAAMK,KAAKc,EAAajC,KACpBiC,EAAajC,GAAGgC,kBAAqB3B,oBAAkB4B,EAAajC,GAAGiC,eACvEA,EAAajC,GAAGiC,aAAa/B,UAC7BY,EAAQA,EAAMoB,OAAOH,EAAoBE,EAAajC,MAIlE,OAAOc,EAMX,SAAgBqB,EAAU9C,GACtB,GAAID,EAAaC,GAAS,CACtB,IAAI+C,EAAK/C,EAAOC,WAChB,OAAQe,oBAAkB+B,EAAGC,OAEjC,OAAO,EAMX,SAAgBC,EAAYC,GAIxB,IAAK,IAFDC,EACAvB,EAFAwB,KAGKzC,EAAI,EAAGuC,GAASvC,EAAIuC,EAAMrC,OAAQF,IAAK,CAC5CiB,EAAOD,OAAOC,KAAKsB,EAAMvC,IACzBwC,KACA,IAAK,IAAIE,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IAC7BF,EAAIvB,EAAKyB,IAAMH,EAAMvC,GAAGiB,EAAKyB,IAEjCD,EAAOtB,KAAKqB,GAEhB,OAAOC,EAMX,SAAgBE,EAAaC,GAQzB,cAPOA,EAAMZ,uBACNY,EAAMX,oBACNW,EAAMC,aACND,EAAMnB,kBACNmB,EAAME,aACNF,EAAMG,gBACNH,EAAMjB,SACNiB,EAQX,SAAgBlB,EAAcrC,EAAQuD,EAAOI,GACzC,GAAIA,EAAe,CAEf,OAAO3D,EAAe,yBAAEuD,GAIxB,OAAOvD,EAAS,mBAAEuD,GAO1B,SAAgBK,EAASC,GACrB,IAAIC,EAAQC,OAAOC,iBAAiBH,GACpC,MAA2B,SAAlBC,EAAMG,SAA6C,WAArBH,EAAMI,WCtLjD,SAAgBC,EAAWC,EAASC,EAASC,EAAiBC,EAAaC,EAAeC,EAAYC,GAClG,IAGI/D,EACA0C,EAEAsB,EANApB,EAAQa,EAAQb,MAChBqB,EAASR,EAAQQ,OAMjBzD,EAAMkD,EAAQpD,KAAK4D,0BAA0B,GAC7CC,EAAWT,EAAQpE,sBAAsBC,cACzCmE,EAAQpE,WAAWA,WAAW8E,KAAOV,EAAQpE,WAC7C+E,KACAC,EAAe1B,EACf2B,GAAS,EAIb,GAHkC,UAA9Bb,EAAQc,aAAaC,OACrBT,EAAeN,EAAQpD,KAAKoE,WAAWC,mBAE5B,QAAXV,GAAgC,cAAXA,GAAyD,UAA9BP,EAAQc,aAAaC,MAClET,EAAyB,aAAE9D,OAAU,CACxC,IAAI0E,EA0HZ,SAA0BnB,EAASU,EAAUT,EAASC,EAAiBC,EAAaC,EAAeE,GAC/F,IAAInB,EACA2B,GAAS,EACTM,EAAqBnB,EAAQpD,KAAKwE,wBAGtC,OAFAlC,EAAQmC,YAAWtB,EAAQb,OAC3BA,EAAQD,EAAaC,GACbc,EAAQc,aAAaQ,gBACzB,IAAK,MACDb,EAASc,QAAQrC,GACjB2B,GAAS,EACT,MACJ,IAAK,SACDJ,EAAShD,KAAKyB,GACd2B,GAAS,EACT,MACJ,IAAK,QAOG3B,EANCvC,oBAAkB0D,GAMXpB,EADRC,EAAQmC,YAAWF,EAAmBjB,EAAc,KAH5CjB,EADRC,EAAQmC,YAAWhB,IAOvB,MACJ,IAAK,QACL,IAAK,QACD,GAAK1D,oBAAkB0D,GAIlB,CACD,IAAImB,EAAcxB,EAAQpD,KAAK4D,0BAA0B,GACrDiB,EAAcN,EAAmBjB,GAOrChB,EAAQD,EALJC,GADCvC,oBAAkB8E,IAAgBA,EAAYD,KAAiBzB,EAAQb,MAAMsC,KAAmC,IAAnBrB,EACtFkB,YAAWI,GAGXJ,YAAWtB,EAAQb,QAI/Bc,EAAQgB,WAA2B,mBAAE3B,SAAWH,OAbhDA,EAAQD,EADRC,EAAQmC,YAAWhB,KAgBA,IAAnBF,IACAM,EAASc,QAAQrC,GACjB2B,GAAS,GAGrB,OAAS3B,MAAOA,EAAO2B,OAAQA,GA3Kda,CAAU3B,EAASU,EAAUT,EAASC,EAAiBC,EAAaC,EAAeE,GAChGnB,EAAQgC,EAAOhC,MACf2B,EAASK,EAAOL,OAQpB,GANI3B,aAAiByC,MACjBhB,EAAe/B,EAAYM,GAG3ByB,EAAalD,KAAK4D,YAAWnC,KAE5B2B,IAAsB,QAAXN,GAC6B,QAAxCP,EAAQc,aAAaQ,gBAAoE,WAAxCtB,EAAQc,aAAaQ,gBACvE,IAAK,IAAIM,EAAI,EAAGA,EAAIjB,EAAanE,OAAQoF,IAAK,CACJ,iBAA1BjB,EAAaiB,GAAG9E,KACxB6D,EAAaiB,GAAKjB,EAAaiB,GAAG9E,IAEtC,IAAIS,EAAOoD,EAAaiB,GAAGvC,SAAW/B,OAAOC,KAAKoD,EAAaiB,GAAGvC,UAC9D/B,OAAOC,KAAKoD,EAAaiB,IAC7BtF,EAAImE,EAASjE,OAkFb,IAjFA,IAAIqF,EAAU,WACV,GAAIpB,EAASnE,GAAGQ,KAAS6D,EAAaiB,GAAG9E,GAAM,CAC3C,GAAe,WAAXyD,EAwBC,CACD,GAAe,SAAXA,GACA,IAAKvB,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IACzB,GAAI1B,OAAOwE,UAAUC,eAAeC,KAAKvB,EAASnE,GAAIiB,EAAKyB,MAAuC,SAA9BgB,EAAQc,aAAaC,OAChFpE,oBAAkB2D,IAAyD,IAAxCA,EAA2B,eAAE9D,QAClEe,EAAKyB,KAAOoB,GAAa,CAC5B,IAAI6B,EAAajE,EAAcgC,EAASW,EAAaiB,GAAG3D,UACxDwC,EAASnE,GAAGiB,EAAKyB,IAAM2B,EAAaiB,GAAGrE,EAAKyB,IACxCiD,GAAcA,EAAW5C,WACzB4C,EAAW5C,SAAS9B,EAAKyB,IAAMiD,EAAW1E,EAAKyB,IAAMyB,EAASnE,GAAGiB,EAAKyB,WAKjF,GAAe,QAAXuB,GAA+B,cAAXA,EAAwB,CACjD,IAAIpB,OAAQ,EACgC,UAAxCa,EAAQc,aAAaQ,eACjBrB,GACAW,EAAavB,SAASW,EAAQkC,iBAAmBzB,EAASnE,GAAG0D,EAAQmC,WACrE1B,EAAS2B,OAAO9F,EAAI,EAAG,EAAGsE,EAAavB,YAGlC/B,OAAOwE,UAAUC,eAAeC,KAAKvB,EAASnE,GAAI0D,EAAQqC,gBAC3D5B,EAASnE,GAAG0D,EAAQqC,kBAExB5B,EAASnE,GAAG0D,EAAQqC,cAAc5E,KAAKmD,EAAavB,UACpDiD,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,EAAiBW,IAG3B,UAAxCZ,EAAQc,aAAaQ,gBAC1Bb,EAAS2B,OAAO9F,EAAI,EAAG,EAAGsE,EAAavB,UAClC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAK2D,EAASnE,EAAI,GAAIiE,EAAQP,EAASC,EAAiBW,IAGtEV,EAIuC,UAAxCF,EAAQc,aAAaQ,iBAC1Bb,EAAS2B,OAAO9F,EAAG,EAAGsE,EAAavB,UAC9B1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,EAAiBW,KANxEzB,EAAQ,EACRsB,EAAS2B,OAAOjD,EAAO,EAAGyB,EAAavB,WAS/C,MAAO,QArEP,IAAIkD,EAAgB9B,EAASnE,GAE7B,GADAmE,EAAS2B,OAAO9F,EAAG,GACf2D,EAAiB,CACjB,IAAKtD,oBAAkB4F,EAAcvC,EAAQkC,kBAKzC,IAAK,IAJDM,EAAaxC,EAAQyC,SAASC,OAAO,SAAUC,GAC/C,OAAOA,EAAE3C,EAAQmC,aAAeI,EAAcvC,EAAQkC,mBACvD,GACC3D,EAAeiE,EAAaA,EAAWxC,EAAQqC,iBAC1CO,EAAIrE,EAAa/B,OAAS,EAAGoG,GAAK,EAAGA,IAC1C,GAAIrE,EAAaqE,GAAG5C,EAAQmC,aAAeI,EAAcvC,EAAQmC,WAAY,CACzEK,EAAyB,aAAEJ,OAAOQ,EAAG,GACrCrE,EAAa6D,OAAOQ,EAAG,GAClBrE,EAAa/B,SACdgG,EAAWlE,iBAAkB,EAC7BgE,EAAgBxF,EAAK0F,EAAYjC,EAAQP,EAASC,IAEtD,MAIZ,MAAO,cAoDTtD,oBAAkB8D,EAASnE,GAAG0D,EAAQqC,gBACxCQ,EAAmBpC,EAASnE,GAAG0D,EAAQqC,cAAe1B,EAAaiB,GAAIrB,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,IAC5HkC,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,IAIxD3D,KAAOA,GAAK,GAAG,CAElB,GAAgB,UADFuF,IAEV,QAiFpB,SAAgBgB,EAAmBtE,EAAcoC,EAAcJ,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,GAGhH,IAFA,IAAI0C,GAAa,EACb9D,EAAIT,EAAa/B,OACdwC,KAAOA,GAAK,GACf,GAAIT,EAAaS,GAAGlC,KAAS6D,EAAa7D,IACrCmD,GAAmB1B,EAAaS,GAAGgB,EAAQkC,mBAAqBvB,EAAaX,EAAQmC,WAAa,CACnG,GAAe,SAAX5B,EAAmB,CAGnB,IAAK,IAFDhD,EAAOD,OAAOC,KAAKoD,GACnBsB,EAAajE,EAAcgC,EAASW,EAAa1C,UAC5C3B,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAC7B,GAAIgB,OAAOwE,UAAUC,eAAeC,KAAKzD,EAAaS,GAAIzB,EAAKjB,MAAsC,SAA9B0D,EAAQc,aAAaC,MAAmBxD,EAAKjB,KAAO8D,KACvH6B,EAAW1E,EAAKjB,IAAM2F,EAAW5C,SAAS9B,EAAKjB,IAAMiC,EAAaS,GAAGzB,EAAKjB,IAAMqE,EAAapD,EAAKjB,IAC3D,WAAnC0D,EAAQpD,KAAKkE,aAAaC,MAAmD,SAA9Bf,EAAQc,aAAaC,MAAiB,CAErFf,EAAQpD,KAAKoE,WAAqB,WAAE+B,aAAepC,EAAaxB,MAChEa,EAAQpD,KAAKoE,WAAqB,WAAEgC,sBAAsBrC,GAItE,MAEgB,QAAXJ,GAA+B,cAAXA,EACmB,UAAxCP,EAAQc,aAAaQ,eACjBrB,GACAW,EAAaZ,EAAQkC,iBAAmB3D,EAAaS,GAAGgB,EAAQmC,WAChE5D,EAAa6D,OAAOpD,EAAI,EAAG,EAAG4B,GAC9B0B,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,KAGnEtD,OAAOwE,UAAUC,eAAeC,KAAKzD,EAAaS,GAAIgB,EAAQqC,gBAC/D9D,EAAaS,GAAGgB,EAAQqC,kBAE5B9D,EAAaS,GAAGgB,EAAQqC,cAAc5E,KAAKmD,EAAavB,UACxDiD,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,IAG/B,UAAxCZ,EAAQc,aAAaQ,gBAC1B/C,EAAa6D,OAAOpD,EAAG,EAAG4B,EAAavB,UAClC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,IAG/B,UAAxCZ,EAAQc,aAAaQ,iBAC1B/C,EAAa6D,OAAOpD,EAAI,EAAG,EAAG4B,EAAavB,UACtC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,KAKhFrC,EAAa6D,OAAOpD,EAAG,GAClBT,EAAa/B,SACdsG,GAAa,SAIfnG,oBAAkB4B,EAAaS,GAAGgB,EAAQqC,gBAC5CQ,EAAmBtE,EAAaS,GAAGgB,EAAQqC,cAAe1B,EAAcJ,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,IAC7HkC,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,GAInE,OAAO6C,EAWX,SAAgBR,EAAgBxF,EAAKa,EAAQ4C,EAAQP,EAASC,EAAiBgD,GAC3E,GAA6C,UAAxCjD,EAAQc,aAAaQ,gBAAsE,UAAxCtB,EAAQc,aAAaQ,gBACzD,QAAXf,GAA+B,cAAXA,GAA6B5D,oBAAkBsG,EAAMlF,YAI7E,CACD,IACImF,EADAC,EAAiBnD,EAAQpD,KAAKwE,wBAkBlC,GAhBA+B,EAAeC,IAAI,SAAUT,EAAGrG,GAASqG,EAAE7F,KAASa,EAAOb,KACvDoG,EAAU5G,KAGTK,oBAAkBuG,KACnBvF,EAASwF,EAAeD,IAExBlD,EAAQqD,sBAAwB1G,oBAAkBgB,KAAYhB,oBAAkBsG,KAChFtF,EAAS2F,WAAS,sBAAwBL,EAAMM,eAAgBvD,IAE/DC,GAAoBtD,oBAAkBgB,EAAOY,gBAAiBZ,EAAOY,aAAa/B,OAInFmB,EAAOW,iBAAkB,EAHzBX,EAAOW,iBAAkB,EAKd,QAAXiC,GAA+B,cAAXA,EAAwB,CAC5C5C,EAAOS,UAAW,EAClBT,EAAOW,iBAAkB,EACrB0B,EAAQwD,aAAajH,QAAQC,QAAUG,oBAAkBsG,KACzDA,EAAQE,EAAeT,OAAO,SAAUC,GACpC,OAAIA,EAAEY,iBAAmB5F,EAAOM,SACrB0E,EAGA,QAInB,IAAIpE,EAAe0E,EAAQA,aAAiBtB,MAAQsB,EAAM,GAAKA,EAAQE,EAAeD,EAAU,GACpD,UAAxClD,EAAQc,aAAaQ,iBAChBhE,OAAOwE,UAAUC,eAAeC,KAAKrE,EAAQ,gBAIzChB,oBAAkBsG,IAAUtF,EAAOb,KAASmG,EAAMnG,IACnDa,EAAOY,aAAad,KAAKwF,GAJ7BtF,EAAOY,iBAOwC,IAA/CZ,EAAOY,aAAakF,QAAQlF,IAAwBZ,EAAOb,KAASmG,EAAMnG,IAC1Ea,EAAOY,aAAagD,QAAQhD,GAE5B0B,IACK3C,OAAOwE,UAAUC,eAAeC,KAAKrE,EAAQqC,EAAQqC,gBACtD1E,EAAOqC,EAAQqC,mBAEyC,IAAxD1E,EAAOqC,EAAQqC,cAAcoB,QAAQlF,IAAwBZ,EAAOb,KAASmG,EAAMnG,IACnFa,EAAOqC,EAAQqC,cAAcd,QAAQhD,KAQrD,IAAK,IAHDiD,EAAcxB,EAAQpD,KAAK4D,0BAA0B,GACrDkD,EAAO1D,EAAQpD,KAAKhB,sBAAsBC,cAC1CmE,EAAQpD,KAAKhB,WAAWA,WAAW8E,KAAOV,EAAQpD,KAAKhB,WAClDU,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAC7B,GAAIoH,EAAKpH,GAAGkF,KAAiB7D,EAAO6D,GAAc,CAC9CkC,EAAKpH,GAAKqB,EACV,MAGRqC,EAAQpD,KAAK+G,WAAW7G,EAAKa,GAC7B,IAAIiG,EAAM5D,EAAQ6D,cAAcX,GACE,UAA9BlD,EAAQc,aAAaC,OACrB6C,EAAM5D,EAAQ8D,UAAU9D,EAAQpD,KAAKmH,wBAAwBpG,EAAOb,MAExE,IAAIkH,OAAa,EAIjB,IAHIhE,EAAQiE,YAAcjE,EAAQkE,sBAC9BF,EAAahE,EAAQmE,qBAAqBjB,KAEzClD,EAAQqD,uBAAyB1G,oBAAkBiH,KAASjH,oBAAkBqH,GAAa,CAC5F,IAAII,EAAUpE,EAAQqE,gBAClBrE,EAAQsE,qBAAuBtE,EAAQuE,sBACvCH,GAAoB,GAExBpE,EAAQwE,aAAaC,YACjBf,KAAM/F,EAAQ+G,KAAMd,EAAIe,MAAMP,GAAWR,EAAIe,MAAMP,GAC7CJ,EAAWW,MAAMP,EAAUpE,EAAQkE,oBACzCU,OAAQ5E,EAAQpD,KAAKiI,aAAa7E,EAAQqE,iBAC1CS,YAAavE,SAtFsE,CAC1EvC,EAAcgC,EAASiD,EAAMlF,WAAWE,UAC9CM,aAAad,KAAKwF,ICrSrC,IAAI8B,EAAwB,WAqExB,OApEA,SAAgBC,GAOZC,KAAKC,cAAe,EAMpBD,KAAKE,QAMLF,KAAKG,mBAAoB,EAOzBH,KAAKI,iBAAkB,EAOvBJ,KAAKK,gBAAiB,EAOtBL,KAAKjI,gBAAiB,EAOtBiI,KAAKM,cAAe,EAOpBN,KAAKO,eAAgB,EAWrBP,KAAKvC,UACL+C,QAAMR,KAAMD,OCvEhBU,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,EAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5DK,EAA2B,SAAUC,GAErC,SAASD,IACL,OAAkB,OAAXC,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAsC/D,OAxCAS,EAAUoB,EAAWC,GAIrBZ,GACIc,cACDH,EAAUhF,UAAW,aAAS,GACjCqE,GACIc,cACDH,EAAUhF,UAAW,gBAAY,GACpCqE,GACIc,cACDH,EAAUhF,UAAW,aAAS,GACjCqE,GACIc,cACDH,EAAUhF,UAAW,iBAAa,GACrCqE,GACIc,cACDH,EAAUhF,UAAW,oBAAgB,GACxCqE,GACIc,cACDH,EAAUhF,UAAW,iBAAa,GACrCqE,GACIc,gBACDH,EAAUhF,UAAW,yBAAqB,GAC7CqE,GACIc,gBACDH,EAAUhF,UAAW,sBAAkB,GAC1CqE,GACIc,cACDH,EAAUhF,UAAW,YAAQ,GAChCqE,GACIc,cACDH,EAAUhF,UAAW,mBAAe,GACvCqE,GACIc,cACDH,EAAUhF,UAAW,WAAO,GAC/BqE,GACIc,cACDH,EAAUhF,UAAW,oBAAgB,GACjCgF,GACTI,iBAKEC,EAAgC,SAAUJ,GAE1C,SAASI,IACL,OAAkB,OAAXJ,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KA0B/D,OA5BAS,EAAUyB,EAAgBJ,GAI1BZ,GACIiB,gBAAeN,IAChBK,EAAerF,UAAW,eAAW,GACxCqE,GACIc,WAAS,cACVE,EAAerF,UAAW,YAAQ,GACrCqE,GACIc,cACDE,EAAerF,UAAW,YAAQ,GACrCqE,GACIc,YAAS,IACVE,EAAerF,UAAW,2BAAuB,GACpDqE,GACIc,WAAS,OACVE,EAAerF,UAAW,0BAAsB,GACnDqE,GACIc,cACDE,EAAerF,UAAW,iBAAa,GAC1CqE,GACIc,YAAS,IACVE,EAAerF,UAAW,oBAAgB,GAC7CqE,GACIc,WAAS,WACVE,EAAerF,UAAW,qBAAiB,GACvCqF,GACTD,iBCpGExB,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,EAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5DY,EAAkC,SAAUN,GAE5C,SAASM,IACL,OAAkB,OAAXN,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAK/D,OAPAS,EAAU2B,EAAkBN,GAI5BZ,GACIc,WAAS,SACVI,EAAiBvF,UAAW,gBAAY,GACpCuF,GACTH,iBChCExB,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAoBxCsB,EAAU,oDACVC,EAAe,2CAMfC,GAAiB,EACjBC,EAAwB,SAAUV,GAElC,SAASU,EAAO9L,GAIZ,OAFA+L,OAAKC,OAAOC,UACJb,EAAO/E,KAAKiD,KAAMtJ,IAAWsJ,KAgFzC,OApFAS,EAAU+B,EAAQV,GAalBU,EAAO3F,UAAU+F,cAAgB,WAC7B,MAAO,UAEXJ,EAAO3F,UAAUgG,IAAM,SAAUC,EAAOC,GAC9BD,aAAiBpG,QACnBoG,GAASA,IAGb,IAAK,IADDE,EAAOF,EACFzL,EAAI,EAAGA,EAAI2L,EAAKzL,OAAQF,IAAK,CAClC,IAAI4L,EAAOC,cAAYF,EAAK3L,IACxB8L,EAAMF,EAAKG,MAAML,EAAM/C,KAAKtJ,QAChC,GAAIyM,EAAIE,QAAS,CACb,IAAIC,EAAUL,EAAKM,gBAAgBR,EAAM/C,KAAKtJ,OAAQyM,EAAIpD,SAC1DuD,EAAUA,EAAQE,QAAQ,UAAW,eAAeA,QAAQ,mBAAoB,IAAIA,QAAQ,aAAc,IACtGjB,GAA8B,2BAAZS,EAAK3L,KACvBiM,EAAUA,EAAQE,QAAQ,UAAW,mBACrCjB,GAAiB,GAErB,IAAIrI,EAAQoJ,EAAQ9E,QAAQ,SACxBiF,EAAUH,EAAQI,UAAUxJ,GAChB,mBAAZ8I,EAAK3L,GACLiM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,2BAAZW,EAAK3L,IAA+C,0BAAZ2L,EAAK3L,GAClDiM,EAAUA,EAAQE,QAAQC,EAASnB,EAAe,sCAEjC,qBAAZU,EAAK3L,GACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,SAE5B,mBAAZW,EAAK3L,GACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,6BAAZW,EAAK3L,GACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,mBAAZW,EAAK3L,KACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,gCAEjC,+BAAZW,EAAK3L,GACAK,oBAAkBsI,KAAK2D,cAAiBjM,oBAAkBsI,KAAK2D,YAAYC,kBAE5EC,QAAQZ,EAAKa,SAASR,GAK1BO,QAAQZ,EAAKa,SAASR,MAKtCd,EAAO3F,UAAUkH,QAAU,SAAUjB,EAAOC,EAAMiB,GAC9ChE,KAAK2D,YAAcK,EACblB,aAAiBpG,QACnBoG,GAASA,IAEb,IAAIE,EAAOF,EACPkB,EAAS3E,sBAAwB2E,EAAS1M,QAAQmG,OAAO,SAAUkC,GAAU,OAAOA,EAAOsE,eAAiB1M,SAC5GgL,GAAiB,EACjBvC,KAAK6C,IAAI,yBAA0BE,IAEvC,IAAK,IAAI1L,EAAI,EAAGA,EAAI2L,EAAKzL,OAAQF,IAAK,CAClC,IAAI4L,EAAOiB,EAAgBlB,EAAK3L,IAC5B8L,EAAMF,EAAKG,MAAML,EAAMiB,GAC3B,GAAIb,EAAIE,QAAS,CACb,IAAIC,EAAUL,EAAKM,gBAAgBR,EAAMiB,EAAUb,EAAIpD,SAEvD8D,QAAQZ,EAAKa,SAASR,MAI3Bd,GACTG,UAESuB,GAEPC,wBACInB,KAAM,yBACNc,QAAS,QACTV,MAAO,SAAUL,EAAMrM,GACnB,IAAI0N,GAAQf,SAAS,GAOrB,OANK3L,oBAAkBhB,EAAOwG,YAAcxF,oBAAkBhB,EAAO0G,eAC9D1F,oBAAkBhB,EAAOuG,mBAC1BvF,oBAAkBhB,EAAOwG,YAAcxF,oBAAkBhB,EAAOuG,kBACjEvF,oBAAkBhB,EAAOwG,aAAexF,oBAAkBhB,EAAOuG,oBAClEmH,GAAQf,SAAS,IAEde,GAEXb,gBAAiB,WACb,MAAOc,iRAIF/B,EAAe,+BACfA,EAAe,4BACfA,EAAe,oCCrIrBgC,EAAe,eAIfC,EAAgB,gBAEhBC,EAAkB,kBAElBC,EAAc,cAEdb,EAAkB,kBAElBc,EAAiB,iBAIjBC,EAAc,cAEdC,EAAiB,iBAEjBC,EAAgB,gBAEhBC,EAAe,eAEfC,EAAoB,oBAEpBC,EAAkB,kBAIlB7L,EAAW,WAIX8L,EAAY,YAIZC,EAAe,eAEfC,EAA2B,2BAE3BC,EAAgB,gBAEhBC,EAAgB,iBAEhBC,EAAkB,kBAElBC,GAAmB,mBAQnBC,GAAa,aAEbC,GAAY,YAEZC,GAAW,WAEXC,GAAoB,oBAEpBC,GAAW,WAEXC,GAAY,YAEZC,GAAW,WAEXC,GAAc,cAEdC,GAAc,cAEdC,GAAW,WAEXC,GAAoB,oBAEpBC,GAAiB,iBAEjBC,GAAkB,kBAElBC,GAAY,YAEZC,GAAa,cAIbC,GAAY,aAIZC,GAAoB,sBAIpBC,GAAe,gBAEfC,GAAgB,iBAEhBC,GAAkB,YAElBC,GAAoB,sBAIpBC,GAAkB,kBAIlBC,GAAqB,qBAMrBC,GAAU,WAEVC,GAAa,cAEbC,GAAa,cAEbC,GAAa,cC/HpBzG,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAqBxCoG,GAA+B,SAAUrF,GAEzC,SAASqF,EAAczQ,GACnB,IAAI0Q,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,EAAOiB,OAASqI,KAI9C,OAHAoH,EAAMC,gBAAkB,GACxBD,EAAME,4BACNF,EAAMG,eAAiB7Q,EAChB0Q,EAwJX,OA9JA3G,GAAU0G,EAAerF,GAQzBqF,EAActK,UAAU2K,YAAc,SAAUC,GAC5C,IAAIC,EAAc,cAIdxJ,EAAiB8B,KAAKuH,eAAepL,wBACzC,GAAyC,KAArC1B,OAAOkN,eAAeC,WAAmB,CACzC5H,KAAK6H,kBAAkB5N,MAAQ+F,KAAK0H,GAAe,GACnD,IAAII,EAAO9H,KAAKuH,eAAe5P,KAAKkH,UACpC,GAAmD,SAA/CmB,KAAKuH,eAAeQ,kBAAkBjM,KAAiB,CAIvD,IAAK,IAHDkM,EAAkBhI,KAAKuH,eAAeU,wBAAwBC,KAAK,SAAUC,EAAGvH,GAChF,OAAOuH,EAAIvH,IAENvJ,EAAI,EAAGA,EAAI2Q,EAAgBzQ,OAAQF,IAIxC,GAHIA,EAAI,IACJ2I,KAAKqH,iBAAmB,OAEvBS,EAAKE,EAAgB3Q,IAAI+Q,UAAUC,SAAS,gBAAiB,CAC9D,IAAI3I,KAAW4I,MAAMvL,KAAK+K,EAAKE,EAAgB3Q,IAAIkR,iBAAiB,eAChEC,EAAWxI,KAAKuH,eAAekB,qBAAqBpR,GAAW,UACV,IAArD2I,KAAKsH,yBAAyB9I,QAAQgK,KACQ,WAA1CxI,KAAKuH,eAAemB,mBAA4E,SAA1C1I,KAAKuH,eAAemB,mBAC1E1I,KAAK2I,kBAAkBzK,EAAgB8J,EAAgB3Q,GAAIyQ,EAAML,EAAYpQ,GAEjF2I,KAAgB,YAAEN,GAAO,EAAO,KAAM+H,GACtCzH,KAAKqH,iBAAmBrH,KAAK0H,GAC7B1H,KAAKsH,yBAAyB9O,KAAKgQ,GACnCxI,KAAK0H,GAAe,GAC0B,UAA1C1H,KAAKuH,eAAemB,mBAA2E,SAA1C1I,KAAKuH,eAAemB,mBACzE1I,KAAK4I,iBAAiB1K,EAAgB8J,EAAgB3Q,GAAIyQ,EAAML,IAKhF,GAAIA,EAAY,CAEP,IADDoB,KACJ,IAASxR,EAAI,EAAGA,EAAI2I,KAAKuH,eAAeuB,oBAAoBvR,OAAQF,IAChEwR,EAAgBxR,GAAK2I,KAAKuH,eAAeuB,oBAAoBzR,GAAG0R,WAEpE/I,KAAgB,YAAE6I,GAAiB,EAAO,KAAMpB,GAChDzH,KAAKqH,gBAAkBrH,KAAK0H,GAAe,KAAO1H,KAAKqH,gBAE3D,IAAItE,GACAtE,KAAMuB,KAAKqH,gBACX2B,QAAQ,GAGZ,GADAhJ,KAAKuH,eAAe0B,QDrBZ,aCqBuClG,GAC3CA,EAAKiG,OACL,OAEJhJ,KAAK6H,kBAAkB5N,MAAQ+F,KAAK0H,GAAe3E,EAAKtE,KACnDyK,UAAQC,UAAUC,MAAM,qBAIzBpJ,KAAK6H,kBAAkBwB,kBAAkB,EAAGrJ,KAAK6H,kBAAkB5N,MAAM1C,QAHzEyI,KAAK6H,kBAAkByB,SAK3BtJ,KAAa,UAAI,EACjBA,KAAKsH,4BACLtH,KAAKqH,gBAAkB,QAGvBvF,EAAOjF,UAAU2K,YAAYzK,KAAKiD,KAAMyH,KAIpDN,EAActK,UAAU8L,kBAAoB,SAAUzK,EAAgBhD,EAAe4M,EAAML,EAAYvN,GACnG,IACIwN,EAAc,cACd5O,EAAa,aACbE,EAAW,WAEf,IAAKtB,oBAAkBwG,EAAehD,GAAepC,IAEjD,IAAK,IADDyQ,EAAYrL,EAAehD,GAAepC,GAAiB,MACtDzB,EAAI,EAAGA,EAAIkS,EAAY,EAAGlS,IAC/B,IAAK,IAAI0C,EAAI,EAAGA,EAAImE,EAAe3G,OAAQwC,IACvC,IAAKrC,oBAAkBwG,EAAehD,GAAepC,KACjDoF,EAAenE,GAAGf,KAAckF,EAAehD,GAAepC,GAAYE,GAAW,CACrFkC,EAAgBnB,EAChB,IAAI2F,KAAW4I,MAAMvL,KAAK+K,EAAK5M,GAAeqN,iBAAiB,eAC3DC,EAAWtK,EAAenE,GAAGf,GACjC,IAAyD,IAArDgH,KAAKsH,yBAAyB9I,QAAQgK,GAAkB,CACxDxI,KAAgB,YAAEN,GAAO,EAAO,KAAM+H,GAElCzH,KAAKqH,gBADLnN,EAAQ,EACe8F,KAAKqH,gBAAkBrH,KAAK0H,GAAe,KAG3C1H,KAAK0H,GAAe,KAAO1H,KAAKqH,gBAE3DrH,KAAKsH,yBAAyB9O,KAAKgQ,GACnCxI,KAAK0H,GAAe,GACpB,SAOxBP,EAActK,UAAU2M,KAAO,SAAU/B,GACrC3F,EAAOjF,UAAU2M,KAAKzM,KAAKiD,KAAMyH,IAErCN,EAActK,UAAU4M,MAAQ,SAAUhL,EAAMiL,EAAUC,GACtD7H,EAAOjF,UAAU4M,MAAM1M,KAAKiD,KAAMvB,EAAMiL,EAAUC,IAQtDxC,EAActK,UAAU+F,cAAgB,WACpC,MAAO,aAQXuE,EAActK,UAAU+M,QAAU,WAC9B9H,EAAOjF,UAAU+M,QAAQ7M,KAAKiD,OAElCmH,EAActK,UAAU+L,iBAAmB,SAAU1K,EAAgBhD,EAAe4M,EAAML,GACtF,IAIIzO,EAAW,WACf,GAAIkF,EAAehD,GAA8B,gBAE7C,IAAK,IADD2O,EAAY3L,EAAehD,GAA2B,aACjD7D,EAAI,EAAGA,EAAIwS,EAAUtS,OAAQF,IAClC,IAAK,IAAI0C,EAAI,EAAGA,EAAImE,EAAe3G,OAAQwC,IACvC,IAAKrC,oBAAkBmS,EAAUxS,GAAG2B,KAAckF,EAAenE,GAAGf,KAAc6Q,EAAUxS,GAAG2B,GAAW,CACtG,IAAMtB,oBAAkBoQ,EAAK/N,MAAS+N,EAAK/N,GAAGqO,UAAUC,SAAS,gBAAiB,CAC9E,IAAI3I,KAAW4I,MAAMvL,KAAK+K,EAAK/N,GAAGwO,iBAAiB,eAC/CC,EAAWtK,EAAenE,GAAGf,IACwB,IAArDgH,KAAKsH,yBAAyB9I,QAAQgK,KACtCxI,KAAgB,YAAEN,GAAO,EAAO,KAAM+H,GACtCzH,KAAKqH,iBAAoB,KAAOrH,KAAgB,YAChDA,KAAgB,YAAI,GACpBA,KAAKsH,yBAAyB9O,KAAKgQ,GACnCxI,KAAK4I,iBAAiB1K,EAAgBnE,EAAG+N,EAAML,IAGvD,QAMbN,GACT2C,aC3KEC,GAA2B,WAM3B,SAASA,EAAUrT,GACfsJ,KAAKtJ,OAASA,EACdsJ,KAAKgK,iBACLhK,KAAKgI,mBACLhI,KAAKiK,gBACLjK,KAAKkK,mBAocT,OA5bAH,EAAUlN,UAAU+F,cAAgB,WAChC,MAAO,aAEXmH,EAAUlN,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAKoK,eAAgBpK,MACpDA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKqK,eAAgBrK,MACtDA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKsK,kBAAmBtK,MAC5DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,mBAAoBnK,KAAKoK,eAAgBpK,MAC7DA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKuK,kBAAmBvK,OAEhE+J,EAAUlN,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAKoK,gBACrCpK,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKqK,gBACvCrK,KAAKtJ,OAAOiB,KAAK+S,IAAI,mBAAoB1K,KAAKoK,gBAC9CpK,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKuK,mBAC1CvK,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKsK,qBAQ9CP,EAAUlN,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAETT,EAAUlN,UAAU0N,kBAAoB,SAAUxH,GAC9C,IAEI4H,EAFAvJ,EAAS7I,YAAU,SAAUwK,GAC7B6H,EAAYC,eAAazJ,EAAQ,sBAErC,GAAIwJ,GAAaA,EAAUrC,iBAAiB,sBAAsBhR,OAAS,EAAG,CAC1EoT,EAAWC,EAAUE,cAAc,0BACnC,IAAIpB,KACJA,EAASlR,KAAK4I,EAAO2J,QAAQ,MAAMrB,UACnC1J,KAAKgL,iBAAiBtB,GACtB1J,KAAKiL,sBAAsBN,EAAUA,EAASO,mBAAmB9C,UAAUC,SAAS,WAAYjH,EAAO2J,QAAQ,YAE9G,GAAIH,GAAaA,EAAUrC,iBAAiB,oBAAoBhR,OAAS,GAAKyI,KAAKtJ,OAAOyU,mBAAoB,CAC/G,IAAIC,GAAiBR,EAAUE,cAAc,YAAY1C,UAAUC,SAAS,aACpEuC,EAAUE,cAAc,YAAY1C,UAAUC,SAAS,UAC/DrI,KAAKqL,gBAAgBD,GACrBT,EAAWC,EAAUE,cAAc,0BACnC9K,KAAKiL,sBAAsBN,EAAUS,EAAehK,EAAO2J,QAAQ,SAG3EhB,EAAUlN,UAAUoO,sBAAwB,SAAUN,EAAUW,EAAYC,GACxE,IAAI9M,EAAOuB,KAAKtJ,OAAOyF,wBAAwBoP,EAAW7B,UACtD3G,GAASyI,QAASF,EAAYlK,OAAQuJ,EAAUY,WAAYA,EAC5DE,QAASd,EAASvC,UAAUC,SAAS,mBAC/BrI,KAAKtJ,OAAOgV,oBAAsBjN,GAC5CuB,KAAKtJ,OAAOuS,QAAQ0C,EAAuB5I,IAE/CgH,EAAUlN,UAAU+O,uBAAyB,WAIzC,IAAK,IAHDC,EACAC,EACAxU,EAAW0I,KAAKtJ,OAAc,QACzBqV,EAAM,EAAGA,EAAMzU,EAAQC,OAAQwU,IAChCzU,EAAQyU,GAAKvU,eACbqU,EAAa7L,KAAKtJ,OAAOY,QAAQyU,GAAKC,KAI9C,IAAK,IADDC,EAAmBjM,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBhR,OAClFwC,EAAI,EAAGA,EAAIkS,EAAkBlS,IAAK,CACtBiG,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBxO,GACtEoS,aAAa,kBAAoBN,IAC5CC,EAAc/R,GAGtB,OAAO+R,GAEX/B,EAAUlN,UAAUuN,eAAiB,WAEjC,GADApK,KAAK8L,YAAc9L,KAAK4L,yBACpB5L,KAAK8L,aAAe,GAAoF,IAA/E9L,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBhR,OAAc,CAC3G,IAAI6U,EAAgBpM,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBvI,KAAK8L,aAEzFO,EAAYrM,KAAKtJ,OAAO4V,cAAc,SAAWC,UAAW,kBAAmBC,OAASxJ,KAAQ,eAChG4H,EAAY6B,iBAAezM,KAAKtJ,OAAO4V,eAAe,GAASd,SAFvD,EAEuEkB,MAAO,OAChFtE,UAAUuE,IAAI,uBACxB/B,EAAUgC,aAAaP,EAAUQ,YAAajC,EAAUkC,YACnDpV,oBAAkB0U,IACnBA,EAAcQ,aAAahC,EAAWwB,EAAcU,YAEpD9M,KAAKtJ,OAAOyU,oBACZnL,KAAKqL,uBAGR,GAAIrL,KAAK8L,aAAe,GAAK9L,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBhR,OAAS,EAAG,CAC9G,IAAIqT,EACAQ,GADAR,EAAY5K,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,uBAAuB,IACzDuC,cAAc,YAAY1C,UAAUC,SAAS,WACvErI,KAAKtJ,OAAOyU,oBAAsBC,GAClCpL,KAAKqL,gBAAgBD,KAIjCrB,EAAUlN,UAAUkQ,qBAAuB,SAAUhK,GACjD,IAAIsJ,EAAYrM,KAAKtJ,OAAO4V,cAAc,SAAWC,UAAW,oBAAqBC,OAASxJ,KAAQ,cAClGvE,EAAOsE,EAAKtE,KAChBsE,EAAKtD,KAAK2I,UAAUuE,IAAI,sBACxB5J,EAAKtD,KAAKuN,aAAa,aAAc,YACrC,IAAI/S,GAASvC,oBAAkB+G,EAAKwO,gBAAyC,YAAvBxO,EAAKwO,cACvDrC,EAAY6B,iBAAezM,KAAKtJ,OAAO4V,eAAe,GAASd,QAASvR,EAAOyS,MAAO,MAK1F,GAJA9B,EAAUxC,UAAUuE,IAAI,uBACpB3M,KAAKtJ,OAAOwW,gBACZtC,EAAUE,cAAc,YAAYtQ,MAAM2S,MAAQ,QAE3B,kBAAvB1O,EAAKwO,cAAmC,CACxC,IAAIG,EAAWxC,EAAUrC,iBAAiB,YAAY,GACtD8E,eAAaD,IAAY,UAAW,SAAU,cAC9CxC,EAAUE,cAAc,YAAY1C,UAAUuE,IAAI,UAGtD,OADA/B,EAAUgC,aAAaP,EAAUQ,YAAajC,EAAUkC,YACjDlC,GAEXb,EAAUlN,UAAUwN,eAAiB,SAAUiD,GAC3C,IAAI1C,EAAY5K,KAAK+M,qBAAqBO,GACtCC,EAAeD,EAAU7N,KAAKqL,cAAc,2BAChD,GAAKpT,oBAAkB6V,GAKlB,CACD,IAAIC,EAAUxN,KAAKtJ,OAAO4V,cAAc,QAAUC,UAAW,mBACzD9N,EAAO6O,EAAU7N,KAAKgO,UAC1BH,EAAU7N,KAAKgO,UAAY,GAC3BD,EAAQC,UAAYhP,EACpB,IAAIiP,EAAS1N,KAAKtJ,OAAO4V,cAAc,OAASC,UAAW,6BAC3DmB,EAAOC,YAAY/C,GACnB8C,EAAOC,YAAYH,GACnBF,EAAU7N,KAAKkO,YAAYD,QAZtBJ,EAAU7N,KAAKqL,cAAc,yBAC9ByC,EAAaX,aAAahC,EAAW2C,EAAahF,iBAAiB,eAAe,KAc9FwB,EAAUlN,UAAUmO,iBAAmB,SAAU4C,GAC7C,IAAK,IAAIvW,EAAI,EAAGA,EAAIuW,EAAWrW,OAAQF,IAAK,CACxC,IAAIqB,EAASsH,KAAKtJ,OAAOyF,wBAAwByR,EAAWvW,IACxDwW,EAAa9U,EAAciH,KAAKtJ,OAAQgC,EAAOM,UAE/CiU,EAA0C,aAD9CvU,EAASmV,GACmBZ,cAA+B,QAAU,UACrEvU,EAAOuU,cAAgBA,EAEvB,IAAK,IADD3U,EAAOD,OAAOC,KAAKI,GACdqB,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IACzB1B,OAAOwE,UAAUC,eAAeC,KAAK8Q,EAAYvV,EAAKyB,MACtD8T,EAAWvV,EAAKyB,IAAMrB,EAAOJ,EAAKyB,KAG1CiG,KAAK8N,gBAAgBpV,EAAQuU,GAAe,GACxCjN,KAAKtJ,OAAOyU,oBACZnL,KAAKqL,oBAIjBtB,EAAUlN,UAAUiR,gBAAkB,SAAUpV,EAAQuU,EAAec,GACnE,IAAIxW,EAAS,EAKb,GAJAyI,KAAKgO,oBAAoBtV,EAAQuU,IAC5Bc,GAAerV,EAAOI,YAAckH,KAAKtJ,OAAOyU,oBACjDnL,KAAKiO,sBAAsBvV,EAAOI,YAElCJ,EAAOY,cAAgB0G,KAAKtJ,OAAOyU,mBAAoB,CACvD,IAAI7R,EAAeZ,EAAOY,cACrB5B,oBAAkBsI,KAAKtJ,OAAOwX,eAC/BlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAAKyI,KAAKtJ,OAAOyU,qBAClE7R,EAAe0G,KAAKoO,wBAAwB9U,IAEhD/B,EAAS+B,EAAa/B,OACtB,IAAK,IAAI8W,EAAQ,EAAGA,EAAQ9W,EAAQ8W,IAC3B/U,EAAa+U,GAAOC,eACjBhV,EAAa+U,GAAOhV,gBACpB2G,KAAK8N,gBAAgBxU,EAAa+U,GAAQpB,GAAe,GAGzDjN,KAAKgO,oBAAoB1U,EAAa+U,GAAQpB,MAMlElD,EAAUlN,UAAUuR,wBAA0B,SAAU9U,GACpD,IAAI8N,EAAQpH,KAIZ,OAH2B1G,EAAamE,OAAO,SAAUC,GACrD,OAAO0J,EAAM1Q,OAAOwX,aAAaC,eAAe3P,QAAQd,IAAM,KAItEqM,EAAUlN,UAAUoR,sBAAwB,SAAUpV,GAClD,IAAItB,EAAS,EACT+B,KACAZ,EAASK,EAAciH,KAAKtJ,OAAQmC,EAAaG,UACjDN,GAAUA,EAAOY,eACjBA,EAAeZ,EAAOY,eAErB5B,oBAAkBsI,KAAKtJ,OAAOwX,eAC/BlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAAKyI,KAAKtJ,OAAOyU,qBAClE7R,EAAe0G,KAAKoO,wBAAwB9U,IAEhD/B,EAAS+B,GAAgBA,EAAa/B,OACtC,IAAIgX,EAAU,EACVC,EAAoB,EACxB,IAAK9W,oBAAkBgB,GAAS,CAC5B,IAAK,IAAIrB,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IAAK,CAC1C,IACIoX,EADgB1V,EAAciH,KAAKtJ,OAAQ4C,EAAajC,GAAG2B,UAE1DtB,oBAAkB+W,KACkB,kBAAjCA,EAAexB,cACfsB,IAEsC,UAAjCE,EAAexB,eACpBuB,KAKR9V,EAAOuU,cADPsB,EAAU,GAAMC,EAAoB,GAAKA,IAAsBjX,EACxC,gBAEI,IAAtBiX,GAAuC,IAAZD,EACT,UAGA,QAE3BvO,KAAKgO,oBAAoBtV,EAAQA,EAAOuU,eACpCvU,EAAOI,YACPkH,KAAKiO,sBAAsBvV,EAAOI,cAI9CiR,EAAUlN,UAAUwO,gBAAkB,SAAUqD,GAC5C,IAAItH,EAAQpH,KAERzI,EAAS,EACb,IAAKG,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,EAAG,CACpG,IAAIoX,EAAe3O,KAAKtJ,OAAOwX,aAAaC,eACX,IAA7BnO,KAAKiK,aAAa1S,OAClByI,KAAKiK,aAAe0E,EAGhB3O,KAAKiK,eAAiB0E,IACtB3O,KAAKiK,aAAe0E,GAI5B3O,KAAKiK,aAAa1S,OAAS,IACtByI,KAAKtJ,OAAOsB,eAAeV,QAAQC,QAAUyI,KAAKiK,aAAa1S,SAChEyI,KAAKiK,iBAGb,IAAIxL,GAAS/G,oBAAkBsI,KAAKtJ,OAAOwX,eACtClO,KAAKiK,aAAa1S,OAAS,EAAMyI,KAAKiK,aACvCjK,KAAKtJ,OAAO8G,SAEhB,GADAiB,EAAOhI,EAAauJ,KAAKtJ,QAAUsJ,KAAKtJ,OAAOyF,wBAA0BsC,GACpE/G,oBAAkBgX,GACnB,IAAK,IAAIrX,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAC7B,GAAIqX,EAAU,CACV,GAA8B,UAA1BjQ,EAAKpH,GAAG4V,cACR,SAEJxO,EAAKpH,GAAG4V,cAAgB,QACxBjN,KAAKgO,oBAAoBvP,EAAKpH,GAAIoH,EAAKpH,GAAG4V,oBAGlCjN,KAAKgK,cAAcxL,QAAQC,EAAKpH,KAC3B,IACToH,EAAKpH,GAAG4V,cAAgB,UACxBjN,KAAKgO,oBAAoBvP,EAAKpH,GAAIoH,EAAKpH,GAAG4V,eACtCjN,KAAKtJ,OAAOyU,oBACZnL,KAAKiO,sBAAsBxP,EAAKpH,MAMnC,IAAbqX,GAAsB1O,KAAKtJ,OAAO0H,uBAClC4B,KAAKgK,iBACLhK,KAAKgI,mBACLvJ,EAAKhB,OAAO,SAAUmR,GAClBA,EAAI3B,cAAgB,UACpB7F,EAAM4G,oBAAoBY,EAAKA,EAAI3B,kBAG3C1V,EAASyI,KAAKgK,cAAczS,OAC5B,IAAI6V,EAAWpN,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,YAAY,GACvEhR,EAAS,GAAKkH,EAAKlH,OAAS,EACxBA,IAAWkH,EAAKlH,QAAWmX,GAK3BrB,eAAaD,IAAY,WACzBA,EAAShF,UAAUuE,IAAI,aALvBU,eAAaD,IAAY,YACzBA,EAAShF,UAAUuE,IAAI,WAQ3BU,eAAaD,IAAY,UAAW,YAG5CrD,EAAUlN,UAAUmR,oBAAsB,SAAUa,EAAevD,GAC/D,IAGIwD,EAGA1B,EANA1U,EAASsH,KAAKtJ,OAAOyF,wBAAwBsB,OAAO,SAAUC,GAC9D,OAAOA,EAAE1E,WAAa6V,EAAc7V,WAGpC+V,EAAc/O,KAAKtJ,OAAOyF,wBAAwBqC,QAAQ9F,EAAO,IACjEsW,EAAiBjW,EAAciH,KAAKtJ,OAAQmY,EAAc7V,UAE9D,GAAI+V,GAAe,EAAG,CAClB,IAAIE,EAAKjP,KAAKtJ,OAAOmI,UAAUkQ,GAC3BG,OAAY,GACZlP,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,sBACtCiQ,EAAYlP,KAAKtJ,OAAOyY,qBAAqBJ,IAEjD3B,EAAW6B,EAAG1G,iBAAiB,YAAY,GAAK0G,EAAG1G,iBAAiB,YAAY,GAC1E2G,EAAU3G,iBAAiB,YAAY,GACxC7Q,oBAAkB0V,IACnBC,eAAaD,IAAY,UAAW,SAAU,cAQtD,GALA0B,EAAgBE,EACZtX,oBAAkBoX,KAClBA,EAAgBD,GAEpBC,EAAc7B,cAAgB3B,EACX,UAAfA,GAA0B5T,oBAAkBmX,EAAcP,eACrC,IAAjBS,IAAqE,IAA/C/O,KAAKgI,gBAAgBxJ,QAAQuQ,IACnD/O,KAAKgI,gBAAgBxP,KAAKuW,IAEqB,IAA/C/O,KAAKgK,cAAcxL,QAAQsQ,KAA2C,IAAjBC,IACnDrX,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAClGyI,KAAKgK,cAAcxR,KAAKsW,IAEuB,IAA/C9O,KAAKgK,cAAcxL,QAAQsQ,IAAyB9O,KAAKtJ,OAAO0H,uBAA2B1G,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAC3LyI,KAAKgK,cAAcxR,KAAKsW,IAEuB,IAA/C9O,KAAKgK,cAAcxL,QAAQsQ,IAA2BpX,oBAAkBsI,KAAKtJ,OAAOwX,eACjC,IAAnDlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,QACxCyI,KAAKgK,cAAcxR,KAAKsW,IAEuB,IAA/C9O,KAAKgK,cAAcxL,QAAQsQ,IAAyBpX,oBAAkBsI,KAAKtJ,OAAOwX,eAClFlO,KAAKgK,cAAcxR,KAAKsW,QAG3B,IAAoB,YAAfxD,GAA2C,kBAAfA,IAAmC5T,oBAAkBmX,EAAcP,cAAe,CACpH,IAAIpU,EAAQ8F,KAAKgK,cAAcxL,QAAQsQ,GAIvC,IAHe,IAAX5U,GACA8F,KAAKgK,cAAc7M,OAAOjD,EAAO,IAEc,IAA/C8F,KAAKgI,gBAAgBxJ,QAAQuQ,GAAqB,CAClD,IAAIK,EAAepP,KAAKgI,gBAAgBxJ,QAAQuQ,GAChD/O,KAAKgI,gBAAgB7K,OAAOiS,EAAc,IAGlD,IAAIC,EAA+B,kBAAf/D,EAAiC,SAAW,KAAOA,EACnEyD,GAAe,IACVrX,oBAAkB0V,IACnBA,EAAShF,UAAUuE,IAAI0C,KAInCtF,EAAUlN,UAAUyN,kBAAoB,SAAUvH,GAC9C,IAEI8G,EACAyF,EAHAlI,EAAQpH,KACRH,EAAckD,EAAKlD,YAGvB,GAAIzI,EAAiB4I,KAAKtJ,SAClBsJ,KAAKtJ,OAAOyU,mBACZ,GAAqB,YAAhBtL,GAA6C,WAAhBA,EAA2B,CACzD,IAAIiI,EAAO9H,KAAKtJ,OAAOiB,KAAKkH,UAE5ByQ,GADAzF,EAAY7J,KAAKtJ,OAAOyF,yBACA5E,OACxByI,KAAKgI,mBACL,IAAK,IAAI3Q,EAAI,EAAGA,EAAIiY,EAAajY,IACxByQ,EAAKzQ,GAAG+Q,UAAUC,SAAS,iBAC5BrI,KAAKgO,oBAAoBnE,EAAUxS,GAAIwS,EAAUxS,GAAG4V,oBAI3D,GAAoB,WAAhBpN,GAA4C,QAAhBkD,EAAKzH,OAAkB,CACxD,IAAIiU,KACgB,WAAhB1P,EACA0P,EAAcxM,EAAKtE,KAGnB8Q,EAAY/W,KAAKuK,EAAKtE,MAE1B,IAASpH,EAAI,EAAGA,EAAIkY,EAAYhY,OAAQF,IAAK,CACzC,GAAoB,WAAhBwI,EAA0B,CAC1B,IAAI3F,EAAQ8F,KAAKtJ,OAAO8G,SAASgB,QAAQ+Q,EAAYlY,IACjD+X,EAAepP,KAAKgI,gBAAgBxJ,QAAQtE,GAChD8F,KAAKgI,gBAAgB7K,OAAOiS,EAAc,GAC1CpP,KAAKgO,oBAAoBuB,EAAYlY,GAAI,WAExCK,oBAAkB6X,EAAYlY,GAAGyB,aAClCkH,KAAKiO,sBAAsBsB,EAAYlY,GAAGyB,iBAIxB,QAArBiK,EAAKlD,aAAyBG,KAAKtJ,OAAOyU,mBAC/CpI,EAAKtE,KAAKwO,cAAgB,WAEL,cAAhBpN,GAA+C,cAAhBA,GAA+C,YAAhBA,IAC/DpJ,EAAauJ,KAAKtJ,WACtBsJ,KAAKgK,iBACLhK,KAAKgI,oBACL6B,GAAcnS,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,EAC1GyI,KAAKtJ,OAAOyF,wBAA0B6D,KAAKtJ,OAAO8G,UAC5CgS,QAAQ,SAAU9W,GACxB,GAAI0O,EAAM1Q,OAAO0H,qBAAsB,CAC/B1F,EAAOW,gBACP+N,EAAM6G,sBAAsBvV,GAG5B0O,EAAM4G,oBAAoBtV,EAAQA,EAAOuU,eAE7C,IAAIjP,EAAQ5E,EAAoBV,GAChCsF,EAAQoJ,EAAMgH,wBAAwBpQ,GACtC,IAAK,IAAI3G,EAAI,EAAGA,EAAI2G,EAAMzG,OAAQF,IAC1B2G,EAAM3G,GAAGgC,gBACT+N,EAAM6G,sBAAsBjQ,EAAM3G,IAE3B2G,EAAM3G,GAAkB,iBAAMK,oBAAkBsG,EAAM3G,KAC7D+P,EAAM4G,oBAAoBhQ,EAAM3G,GAAI2G,EAAM3G,GAAG4V,oBAKjDvU,EAAOW,gBACP+N,EAAM6G,sBAAsBvV,GAG5B0O,EAAM4G,oBAAoBtV,EAAQA,EAAOuU,iBAIrDjN,KAAKqL,oBAKrBtB,EAAUlN,UAAU4S,kBAAoB,WACpC,OAAOzP,KAAKgK,eAEhBD,EAAUlN,UAAU6S,qBAAuB,WACvC,OAAO1P,KAAKgI,iBAET+B,KCjdP4F,GAAuB,WAMvB,SAASA,EAAMjZ,GACXsJ,KAAKtJ,OAASA,EACd+L,OAAKC,OAAOkN,SACZ5P,KAAKkK,mBAyCT,OAjCAyF,EAAM9S,UAAU+F,cAAgB,WAC5B,MAAO,SAMX+M,EAAM9S,UAAUqN,iBAAmB,WAC/BlK,KAAKtJ,OAAOiB,KAAKwS,GAAG0F,EAAsB7P,KAAK8P,cAAe9P,OAElE2P,EAAM9S,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAOiB,KAAK+S,IAAImF,EAAsB7P,KAAK8P,gBAEpDH,EAAM9S,UAAUiT,cAAgB,SAAUC,GACtC,IAAIpY,EAAOY,YAAU,YAAawX,GAC9BC,EAAczX,YAAU,UAAWwX,GACvCpY,EAAKuS,iBAAiB+F,EAAsBjQ,KAAKtJ,OAAOiB,KAAK4M,eAC7D5M,EAAKuS,iBAAiBgG,EAAqBlQ,KAAKtJ,OAAOiB,KAAK2M,cAC5D3M,EAAKuS,iBAAiBiG,EAAwBnQ,KAAKtJ,OAAOiB,KAAK6M,iBAC/D4L,YAAUJ,GAAc,eAE5BL,EAAM9S,UAAUwT,MAAQ,WACpBrQ,KAAKtJ,OAAOiB,KAAK0Y,SAQrBV,EAAM9S,UAAU+M,QAAU,WACtB5J,KAAKwK,uBAEFmF,KC1DPlP,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5D8O,GAAgC,SAAUxO,GAE1C,SAASwO,IACL,OAAkB,OAAXxO,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAiB/D,OAnBAS,GAAU6P,EAAgBxO,GAI1BZ,IACIc,cACDsO,EAAezT,UAAW,cAAU,GACvCqE,IACIc,YAAS,IACVsO,EAAezT,UAAW,kBAAc,GAC3CqE,IACIc,WAAS,aACVsO,EAAezT,UAAW,gBAAY,GACzCqE,IACIc,cACDsO,EAAezT,UAAW,WAAO,GACpCqE,IACIc,cACDsO,EAAezT,UAAW,qBAAiB,GACvCyT,GACTrO,iBC5CExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5D+O,GAAmC,SAAUzO,GAE7C,SAASyO,IACL,OAAkB,OAAXzO,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAuB/D,OAzBAS,GAAU8P,EAAmBzO,GAI7BZ,IACIc,WAAS,QACVuO,EAAkB1T,UAAW,YAAQ,GACxCqE,IACIc,WAAS,SACVuO,EAAkB1T,UAAW,yBAAqB,GACrDqE,IACIc,WAAS,WACVuO,EAAkB1T,UAAW,YAAQ,GACxCqE,IACIc,YAAS,IACVuO,EAAkB1T,UAAW,wBAAoB,GACpDqE,IACIc,WAAS,YACVuO,EAAkB1T,UAAW,oBAAgB,GAChDqE,IACIc,YAAS,IACVuO,EAAkB1T,UAAW,oBAAgB,GAChDqE,IACIc,YAAS,IACVuO,EAAkB1T,UAAW,oBAAgB,GACzC0T,GACTtO,iBCxCEuO,GAAwB,WAMxB,SAASA,EAAO9Z,GACZsJ,KAAKtJ,OAASA,EACdsJ,KAAKyQ,eAAiB,KACtBzQ,KAAKtJ,OAAOiB,KAAKwS,GAAG,kBAAmBnK,KAAK0Q,qBAAsB1Q,MAClEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,sBAAuBnK,KAAK2Q,oBAAqB3Q,MA+QzE,OAvQAwQ,EAAO3T,UAAU+T,YAAc,SAAU7N,GACrC,GAAKA,EAAKtE,KAAV,CAGA,IAAIA,EAAOsE,EAAKtE,KACZlB,EAAakB,EAAK3F,WACtB,IAAKpB,oBAAkB+G,EAAK3F,cAAgBrB,EAAuBuI,KAAKtJ,WACjEsJ,KAAKtJ,OAAOma,aAA2D,SAA1C7Q,KAAKtJ,OAAOoa,aAAaC,cACpDta,EAAauJ,KAAKtJ,UAAY8C,EAAUwG,KAAKtJ,SAAW,EAC5CsJ,KAAKtJ,OAAOuC,kBAAoBvB,oBAAkB6F,EAAWyC,KAAKtJ,OAAOwC,sBACtFqE,EAAWyC,KAAKtJ,OAAOwC,sBAAwB8G,KAAKtJ,OAAOsa,qBAC1DvY,EAAgBuH,KAAKtJ,OAAQqM,EAAKtE,KAAMuB,KAAKtJ,OAAOiB,KAAKwE,4BAE1D4G,EAAKpE,IAAInE,MAAMG,QAAU,QAGjC,GAAIlE,EAAauJ,KAAKtJ,UAAY8C,EAAUwG,KAAKtJ,QAAS,CACtD,IAAIua,EAAUjR,KAAKtJ,OACfwa,EAAYlR,KAAKtJ,OAAOyF,wBAAwBsB,OAAO,SAAUmR,GACjE,OAAOvQ,WAAS4S,EAAQ/T,UAAW0R,KAASvQ,WAAS4S,EAAQhU,gBAAiBwB,KAElF,GAAIyS,EAAU3Z,OAAS,EAAG,CACtB,IAAIoD,EAAUuW,EAAU,GAAG/X,SAAW,YAAc,OACpD4J,EAAKpE,IAAIqO,aAAa,QAAS,YAAcrS,EAAU,MAI9CpC,YAAU,eAAgBwK,EAAKtE,OAE5C2R,YAAUrN,EAAKpE,KAAM,gBAErBoE,EAAKpE,IAAImM,cAAc,qBACvB/H,EAAKpE,IAAIqO,aAAa,gBAAiB,QAElCjK,EAAKpE,IAAImM,cAAc,wBAC5B/H,EAAKpE,IAAIqO,aAAa,gBAAiB,SAEvChN,KAAKtJ,OAAOsa,mBAAqBhR,KAAKtJ,OAAOuC,gBACxCvB,oBAAkB+G,EAAK3F,cACxBiK,EAAKpE,IAAInE,MAAMG,QAAU,SAGjCqF,KAAKtJ,OAAOuS,QAAQiH,EAAqBnN,KAQ7CyN,EAAO3T,UAAU2C,WAAa,SAAUuD,GACpC,GAAKA,EAAKtE,KAAV,CAGA,IAEIvE,EAIAiX,EANAxZ,EAAOqI,KAAKtJ,OAAOiB,KACnB8G,EAAOsE,EAAKtE,KAGZ2S,EADc1Z,oBAAkB+G,EAAK4S,aACjB5S,EAAKtE,MAAQsE,EAAK4S,YACtCC,EAAkB,EAElB3R,EAASK,KAAKtJ,OAAO6a,eAAexO,EAAKpD,OAAOqM,KAChDwF,EAAa/S,EAAK6P,aAClBmD,EAAgBzR,KAAKtJ,OAAOuI,mBAK5B/E,EAJCxC,oBAAkB+G,EAAK3F,YAIhB2F,EAAKvE,MAHLuE,EAAK3F,WAAWoB,MAa5B,IANI8F,KAAKtJ,OAAOgb,6BAA+B1R,KAAKtJ,OAAOuC,cACzC+G,KAAKtJ,OAA8B,wBAAEqM,EAAKpD,OAAOqM,KAGjDrU,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,QAEnChM,KAAKtJ,OAAO0I,iBAAyC,QAArB2D,EAAKlD,aACjD,mBAD0EkD,EAAKlD,aACtC,WAArBkD,EAAKlD,cAA4BnI,oBAAkBqL,EAAKtD,KAAKqL,cAAc,gBAqD9F9K,KAAKyQ,iBACVzQ,KAAKyQ,eAAiB,UAtD+F,CAMrH,IAAK,IALDnD,EAAYhB,gBAAc,OAASC,UAAW,2BAC9CqF,EAAkBtF,gBAAc,QAChCC,UAAW,iBACXsF,OAAQ,uCAEHC,EAAI,EAAGA,EAAIV,EAAKU,IACrBR,GAAmB,GACnBhE,EAAUK,YAAYiE,EAAgB/E,aAE1C,IAAIkF,EAAgBra,oBAAkB+G,EAAKuT,yBACNvT,EAAKpF,gBAApCoF,EAAKuT,wBAIX,GAHID,IAAiBra,oBAAkB+G,EAAKnF,gBACxCyY,IAA8C,IAA7BtT,EAAKnF,aAAa/B,SAEnCwa,EAAc,CACd3B,YAAUrN,EAAKtD,MAAO,iBACtB,IAAIwS,EAAa3F,gBAAc,QAAUC,UAAW,YAChD2F,OAAS,EAETA,EADAlS,KAAKtJ,OAAOuC,cACHwF,EAAKtF,WACTzB,oBAAkB+G,EAAKuB,KAAKtJ,OAAOwC,sBAAwBuF,EAAKuB,KAAKtJ,OAAOwC,uBAC5E8G,KAAKtJ,OAAOsa,qBAGLvS,EAAKtF,WAAaV,EAAgBuH,KAAKtJ,OAAQ+H,EAAMuB,KAAKtJ,OAAOiB,KAAKwE,0BAEtFiU,YAAU6B,GAAa,EAAW,mBAAqB,sBACvDX,GAAmB,GACnBhE,EAAUK,YAAYsE,GACtBL,EAAgBpX,MAAM2S,MAAQ,MAC9BmE,GAAmB,EACnBhE,EAAUK,YAAYiE,EAAgB/E,kBAEjCuE,IAAQA,IAAQ3S,EAAKtE,SAE1BmX,GAAmB,GACnBhE,EAAUK,YAAYiE,EAAgB/E,aACtCS,EAAUK,YAAYiE,EAAgB/E,cAM1CsE,EAAc7E,gBAAc,QAAUC,UAAW,eAC7CvM,KAAKtJ,OAAOwW,gBACZiE,EAAY3W,MAAM2S,MAAQ,eAAiBmE,EAAkB,OAEjElB,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAChE6F,KAAKmS,eAAepP,EAAMoO,GAC1B7D,EAAUK,YAAYwD,GACtBpO,EAAKtD,KAAKkO,YAAYL,GAM1B,GADc3V,EAAKya,4BAA8B,GAAKza,EAAK0a,6BAA+B,EAgBrF,CACD,IAAIC,EAAqB3a,EAAK4a,wBAC1BC,EAAoB7a,EAAK8a,uBACzBC,EAAiB/a,EAAKgb,oBACrBL,EAAmB/a,OAAS,GAAM+a,EAAmB,GAAGM,QAAU7P,EAAKpD,OAAOiT,MAC/ExC,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE1DqY,EAAkBjb,OAAS,GAAMib,EAAkB,GAAGI,QAAU7P,EAAKpD,OAAOiT,MAClFxC,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE1DuY,EAAenb,OAAS,GAAMmb,EAAe,GAAGE,QAAU7P,EAAKpD,OAAOiT,OAC5ExC,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,YAzBhEsX,EAAgBzR,KAAKtJ,OAAO0I,iBAAmBqS,EAAgB,GAC/D9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAASyF,EAC9CrB,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE3DsX,EAAgBzR,KAAKtJ,OAAO0I,iBAAmBqS,EAAgB,IACnE9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAASyF,GACxC9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAASyF,EAAgB,GACrErB,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE3DsX,IAAkBzR,KAAKtJ,OAAO0I,iBAAmBqS,EAAgB,GACtE9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAAkB,GAC5EgR,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAiBxE,IAAKzC,oBAAkBiI,IAAWA,EAAOnI,eACrCwI,KAAKtJ,OAAOmc,OAAO,iBAAkB9P,GACjC/C,KAAKtJ,OAAOwW,eAAe,CAC3B,IAAI4F,EAAkB/P,EAAKtD,KAAK8I,iBAAiB,YAAY,GAE7D+I,GADYyB,SAASD,EAAgBtY,MAAM2S,MAAO,IAElDmE,GAAmB,IAEfH,EADAxZ,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAC5C2D,EAAKtD,KAAKqL,cAAc,eAGxB/H,EAAKtD,KAAKqL,cAAc,oBAE9BtQ,MAAM2S,MAAQ,eAAiBmE,EAAkB,MAGrE,GAAIE,EAAY,CACZpB,YAAUrN,EAAKtD,MAAO,iBACtB,IAAIuT,EAAcza,YAAUwK,EAAKpD,OAAOiT,MAAO7P,EAAKtE,MACN,MAA1CsE,EAAKtD,KAAKqL,cAAc,eACxB/H,EAAKtD,KAAKqL,cAAc,eAAe2C,UAAYuF,EAGnDjQ,EAAKtD,KAAKgO,UAAYuF,EAG1Btb,oBAAkBsI,KAAKtJ,OAAOuc,cAC9BjT,KAAKtJ,OAAOuS,QAAQgH,EAAsBlN,KAGlDyN,EAAO3T,UAAUsV,eAAiB,SAAUpP,EAAMoO,GAC9C,IACI+B,EADc7U,WAAS,cAAe2B,KAAKtJ,QAClBsJ,KAAKtJ,OAAO0I,iBACrC+T,EAAa,aACbC,EAAWrQ,EAAKpD,OAAOzF,MACvBxC,oBAAkBwb,EAAWN,QAC7B7P,EAAKtD,KAAKuN,aAAa,gBAAiBoG,EAAW,IAEnDF,EAAWN,QAAU7P,EAAKpD,OAAOiT,OAAUlb,oBAAkBwb,EAAWG,YACxEtQ,EAAKpD,OAAO0T,SAAWH,EAAWG,SAClCtQ,EAAKpD,OAAOwT,GAAcG,mBAAiBvQ,EAAKpD,OAAO0T,UACvDtQ,EAAKtD,KAAK2I,UAAUuE,IAAI,mBAE5B,IAAI4G,EAAwD,MAA1CxQ,EAAKtD,KAAKqL,cAAc,eACtC/H,EAAKtD,KAAKqL,cAAc,eAAe2C,UAAY1K,EAAKtD,KAAKgO,UACjE,GAAsC,iBAA1B1K,EAAKpD,OAAe,UAAkBK,KAAKyQ,eACnD+C,iBAAerC,EAAanR,KAAKyQ,gBACjCzQ,KAAKyQ,eAAiB,KACtB1N,EAAKtD,KAAKgO,UAAY,QAErB,GAAI1K,EAAKtD,KAAK2I,UAAUC,SAAS,kBAAmB,CACrD,IAAIjQ,EAAM2K,EAAKtD,KAAKgU,SAASlc,OACzBmc,EAAS1T,KAAKtJ,OAAOid,QAAQC,GAAK7Q,EAAKpD,OAAOqM,IAClD,GAAIkH,EAAWN,QAAU7P,EAAKpD,OAAOiT,OAAUlb,oBAAkBwb,EAAWG,UAqBxE,KAAa,EAAOjb,EAAKA,EAAM2K,EAAKtD,KAAKgU,SAASlc,OAC9C4Z,EAAYxD,YAAY5K,EAAKtD,KAAKgU,SADzB,QArBsE,CACnF,IAAII,EAAU,UAEd,GAAI7T,KAAKtJ,OAAOod,SAA6C,iBAA1B/Q,EAAKpD,OAAe,SACnDoD,EAAKpD,OAAOwT,GAAYpQ,EAAKtE,KAAMuB,KAAKtJ,OAAQ,WAAYgd,EAAQ,KAAM,KAAMvC,GAC5EzZ,oBAAkBsI,KAAKtJ,OAAOiB,KAAKkc,MACnC7T,KAAKtJ,OAAOiB,KAAKkc,GAAW7T,KAAKtJ,OAAOmd,IAE5C7T,KAAKtJ,OAAOmc,OAAO,sBAAuB7S,KAAKtJ,OAAOmd,IACtD7T,KAAKtJ,OAA2B,2BAE/B,CACD,IACIqd,EAAShR,EAAKpD,OAAOwT,GAAY/W,UAASlC,MAAS,IAAM6I,EAAKtE,MAAOuB,KAAKtJ,OAAQ,WAAYgd,EAAQ1T,KAAKtJ,OAAU,kBACzH8c,iBAAerC,EAAa4C,UAEzBhR,EAAKpD,OAAO0T,gBACZtQ,EAAKpD,OAAOwT,GACnBpQ,EAAKtD,KAAKgO,UAAY,SAS1B0D,EAAY1D,UAAY8F,EACxBxQ,EAAKtD,KAAKgO,UAAY,IAG9B+C,EAAO3T,UAAU6T,qBAAuB,SAAU3N,GAC9C/C,KAAKyQ,eAAiB1N,EAAKsQ,UAE/B7C,EAAO3T,UAAU8T,oBAAsB,SAAU5N,GAG7C/C,KAAKtJ,OAAc,QAAIqM,EACvB/C,KAAKtJ,OAAOmc,OAAO,sBAAuB7S,KAAKtJ,OAAc,SAC7DsJ,KAAKtJ,OAA2B,wBAEpC8Z,EAAO3T,UAAU+M,QAAU,WACvB5J,KAAKtJ,OAAOiB,KAAK+S,IAAI,kBAAmB1K,KAAK0Q,sBAC7C1Q,KAAKtJ,OAAOiB,KAAK+S,IAAI,sBAAuB1K,KAAK2Q,sBAE9CH,KCxRPwD,GAAkC,WAClC,SAASA,EAAiBrc,GACtBqI,KAAKiU,aAAe,eACpBjU,KAAKtJ,OAASiB,EACdqI,KAAKkU,eACLlU,KAAKmU,WACLnU,KAAKoU,iBACLpU,KAAKqU,aAAe,EACpBrU,KAAKsU,cACLtU,KAAKuU,cAAe,EACpBvU,KAAKkK,mBACLlK,KAAKwU,eACLxU,KAAKhF,iBAAmBtD,oBAAkBsI,KAAKtJ,OAAOuG,iBA0jB1D,OApjBA+W,EAAiBnX,UAAUqN,iBAAmB,WAC1ClK,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKyU,uBAAwBzU,MACjEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,gBAAiBnK,KAAK0U,aAAc1U,MACxDA,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAK2U,WAAY3U,MAChDA,KAAKtJ,OAAOyT,GAAGyK,EAAqB5U,KAAK6U,qBAAsB7U,MAC/DA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAK8U,cAAe9U,OAMxDgU,EAAiBnX,UAAU2N,oBAAsB,WACzCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIkK,EAAqB5U,KAAK6U,sBAC1C7U,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKyU,wBAC1CzU,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAK2U,YACrC3U,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAK8U,eACtC9U,KAAKtJ,OAAOiB,KAAK+S,IAAI,gBAAiB1K,KAAK0U,gBAQ/CV,EAAiBnX,UAAU+M,QAAU,WACjC5J,KAAKwK,uBAMTwJ,EAAiBnX,UAAUkY,SAAW,WAClC,OAAM/U,KAAKtJ,OAAOC,sBAAsBC,eAc5Cod,EAAiBnX,UAAUmY,kBAAoB,SAAUvW,GACrD,IAAI2I,EAAQpH,KAIZ,GAHAA,KAAKtJ,OAAO8G,SAAyC,IAA7BnF,OAAOC,KAAKmG,GAAMlH,QAAkByI,KAAKtJ,OAAOC,sBAAsBC,iBAC1FoJ,KAAKtJ,OAAOC,WAChBqJ,KAAKtJ,OAAO6G,cACP9G,EAAauJ,KAAKtJ,UAAY8C,EAAUwG,KAAKtJ,SAAY+H,aAAgB7H,iBAAiB6H,aAAgB/B,OAAQ,CACnH,IAAIjD,EAAKuG,KAAKtJ,OAAOC,WACrB,GAAIqJ,KAAKtJ,OAAOuG,gBAAiB,CAG7B,GAFA+C,KAAKtJ,OAAOue,MAAQvd,oBAAkBsI,KAAKtJ,OAAOue,OAC9C,IAAIC,QAAUlV,KAAKtJ,OAAOue,MAC1BjV,KAAKtJ,OAAOuG,gBAAiB,CAC7B,IAAIkY,EAAYnV,KAAKtJ,OAAOue,MAAMG,OAAO3X,OAAO,SAAU4X,GAAS,MAAqB,cAAdA,EAAMxd,MAC5EmI,KAAKtJ,OAAOuC,gBAAkBkc,EAAU5d,SACxCyI,KAAKtJ,OAAOue,MAAMK,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAAS,MAC9D+C,KAAKtJ,OAAOue,MAAMM,UAAU,YAAavV,KAAKtJ,OAAOwG,YAG7D,IAAK8C,KAAKtJ,OAAO8e,gBAAiB,CAC9B,IAAIC,EAAMzV,KAAKtJ,OAAOue,MAAMS,QAC5BD,EAAIE,YACJF,EAAMA,EAAInM,QAAQtJ,KAAKtJ,OAAOuG,mBAC1B9F,iBAAkB,EACtBsC,EAAGmc,aAAaH,GAAKI,KAAK,SAAUnY,GAChC0J,EAAM8M,YAAc4B,WAASC,SAASrY,EAAEqW,OAAQ3M,EAAM1Q,OAAOuG,iBAAiB,GAIlE,IAHF1E,YAAU,sBAAuB6O,EAAM1Q,QAAQ+G,OAAO,SAAUC,GACtE,MAAoC,OAA7BA,EAAEsY,YAAYC,aACtB1e,SAEC2e,WAAS,+BAA+B,EAAM9O,EAAM1Q,QAC/CgB,oBAAkB0P,EAAM+O,mBACzBD,WAAS,UAAU,EAAO9O,EAAM+O,iBAChC9X,WAAS,oBAAqB+I,EAAM1Q,QAAQ0f,mBAAmBhP,EAAM+O,iBACrE/O,EAAM+O,gBAAkB,MAE5B/O,EAAM1Q,OAAOiB,KAAK0e,wBAM7B5X,aAAgB/B,OACrBsD,KAAKsW,gBAAgB7X,IAG7BuV,EAAiBnX,UAAUyZ,gBAAkB,SAAU7X,GAGnD,GAFAuB,KAAKoU,iBACLpU,KAAKmU,WACAnU,KAAKtJ,OAAOwG,UAIb,IAAK,IAAI7F,EAAI,EAAGA,EAAIgB,OAAOC,KAAKmG,GAAMlH,OAAQF,IAAK,CAC/C,IAAIkf,EAAW9X,EAAKpH,GACpB2I,KAAKoU,cAAc5b,KAAK4D,YAAWma,IAC9B7e,oBAAkB6e,EAASvW,KAAKtJ,OAAOwG,aACxC8C,KAAKmU,QAAQ3b,KAAK+d,EAASvW,KAAKtJ,OAAOwG,iBAP/C8C,KAAKoU,cAAgB3V,EAWzB,GAAIuB,KAAKhF,gBAAiB,CAIjB,IAHDwb,KACAC,EAAc,IAAI7f,cAAYoJ,KAAKoU,eAAesC,cAAa,IAAIxB,SAClEyB,MAAM3W,KAAKtJ,OAAOuG,kBACvB,IAAS5F,EAAI,EAAGA,EAAIof,EAAYlf,OAAQF,IAAK,CACzC,IAAIuf,EAAYH,EAAYpf,GACxB6C,EAAQ8F,KAAKmU,QAAQ3V,QAAQoY,EAAU/e,KAC3C,IAAKH,oBAAkBkf,EAAU/e,MACzBqC,GAAS,EADjB,CAEQ,IAAI2P,EAAa+M,EAAe,MAChC5W,KAAKoU,cAAcla,GAAO8F,KAAKtJ,OAAO0G,cAAgByM,OAI9D2M,EAAShe,KAAKuJ,MAAMyU,EAAUI,EAAUC,OAE5C7W,KAAKoU,cAAgBpU,KAAK8W,oBAAoBN,GAElD,GAAKne,OAAOC,KAAK0H,KAAKoU,eAAe7c,OAMjCyI,KAAK+W,cAAc/W,KAAKoU,mBANiB,CACzC,IACI4C,IAAkBhX,KAAKtJ,OAAOC,sBAAsBC,gBAAgBoJ,KAAKtJ,OAAc,QAC3FsJ,KAAKtJ,OAAO8G,SAAWwZ,EAAiBhX,KAAKtJ,OAAiB,cAKlEsJ,KAAKqU,aAAe,GAYxBL,EAAiBnX,UAAUia,oBAAsB,SAAUN,GAEvD,IADA,IAAIzC,KACG/T,KAAKoU,cAAc7c,OAAS,GAAKif,EAASjf,OAAS,GAAG,CACzD,IAAI2C,EAAQsc,EAAShY,QAAQwB,KAAKoU,cAAc,KACjC,IAAXla,EACA8F,KAAKoU,cAAc6C,SAGnBlD,EAAOvb,KAAKwH,KAAKoU,cAAc6C,SAC/BT,EAASrZ,OAAOjD,EAAO,IAG/B,OAAO6Z,GASXC,EAAiBnX,UAAU4X,uBAAyB,SAAU1R,GAC1D,IAAI7K,EAAU6K,EAAKgR,OACnB,GAAK/T,KAAKtJ,OAAO8e,iBAAoBxV,KAAKkU,YAAY3c,QAChDyI,KAAKtJ,OAAOwgB,kBAKd,GAAKlX,KAAKtJ,OAAOwgB,kBAoBRxf,oBAAkBQ,IACnB8H,KAAKgV,kBAAkB9c,QApB3B,IAAK,IAAI0W,EAAM,EAAGA,EAAM1W,EAAQX,OAAQqX,IAChCzX,EAAgB6I,KAAKtJ,SAAWwB,EAAQ0W,GAAKvV,iBAAmB2G,KAAKtJ,OAAOuC,gBAC5Ef,EAAQ0W,GAAKzV,UAAW,GAExBzB,oBAAkBQ,EAAQ0W,GAAK1U,SAC/BhC,EAAQ0W,GAAKxU,SAAWgC,YAAWlE,EAAQ0W,IAC3C1W,EAAQ0W,GAAK5V,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACxDsC,WAAS,sBAAwBhe,EAAQ0W,GAAK5V,SAAUd,EAAQ0W,GAAM5O,KAAKtJ,QAC3EwB,EAAQ0W,GAAKzU,MAAQ,EACrBjC,EAAQ0W,GAAK1U,MAAQkd,KAAKC,KAAqB,IAAhBD,KAAKE,WAC/Bpf,EAAQ0W,GAAK5O,KAAKtJ,OAAO8e,mBACyC,IAAnExV,KAAKkU,YAAY1V,QAAQtG,EAAQ0W,GAAK5O,KAAKtJ,OAAOwG,eAClDhF,EAAQ0W,GAAKvV,iBAAkB,GAEnCnB,EAAQ0W,GAAK3B,cAAgB,gBAnBzCjN,KAAKmW,gBAAkBpT,EACvBmT,WAAS,UAAU,EAAMnT,GA4B7BA,EAAKgR,OAAS/T,KAAKtJ,OAAOwgB,kBAAoBlX,KAAKtJ,OAAO8G,SAAWtF,EACrE8H,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,IAaxCiR,EAAiBnX,UAAUgY,qBAAuB,SAAU0C,EAAYC,GACpE,IAAIC,EAAWzX,KAAKtJ,OAAOmI,UAC3B,GAAImB,KAAKtJ,OAAOuc,YAAa,CACzB,IAAInL,EAAO9H,KAAKtJ,OAAOghB,kBAAkB5P,KACzC2P,KAAcnP,MAAMvL,KAAK+K,GAE7B,IAAI6P,EACJ,GAAIJ,EAAWzP,KAAKvQ,OAAS,EAAG,CACvBigB,IACDD,EAAW7e,OAAOS,UAAW,GAEjC,IAAK,IAAI9B,EAAI,EAAGA,EAAIkgB,EAAWzP,KAAKvQ,OAAQF,IAAK,CAE7C,GADAkgB,EAAWzP,KAAKzQ,GAAGmD,MAAMG,QAAU,YAC/BqF,KAAKtJ,OAAOwgB,kBAAmB,CAC/B,IAAIU,EAAYL,EAAWzP,KAAKzQ,GAAGwgB,uBAAuB,sBAAsB,GAChFF,EAAc3X,KAAKtJ,OAAOuc,YAAcjT,KAAKtJ,OAAOiB,KAAKwE,wBAAwBob,EAAWzP,KAAKzQ,GAAGqS,UAChG1J,KAAKtJ,OAAOiB,KAAKmgB,oBAAoBP,EAAWzP,KAAKzQ,GAAG8U,aAAa,aAAa1N,MACjF/G,oBAAkBkgB,IAAcD,EAAYxe,WAC7CiX,YAAUwH,GAAY,oBACtBvK,eAAauK,GAAY,uBAE7B,IAAIG,MACJA,EAAYN,EAASha,OAAO,SAAU+D,GAClC,OAAOA,EAAEsJ,cAAc,kBAAoB6M,EAAYzd,MAAQ,SAAWyd,EAAYxd,MAAQ,OAEpF5C,QAAUogB,EAAYxe,UAChC6G,KAAK6U,sBAAuBnc,OAAQif,EAAa7P,KAAMiQ,EAAWC,UAAWT,EAAWS,YAAa,GAG7G,IAAIC,EAAcV,EAAWzP,KAAKzQ,GAAGyT,cAAc,wBAC9CpT,oBAAkBugB,IACnBjY,KAAKtJ,OAAOiB,KAAKugB,gBAAgBhG,OAAO+F,SAKhDjY,KAAKmY,sBAAuBzf,OAAQ6e,EAAW7e,OAAQoP,KAAMyP,EAAWzP,KAAMkQ,UAAWT,EAAWS,aAG5GhE,EAAiBnX,UAAUsb,qBAAuB,SAAUZ,GACxD,IAAInQ,EAAQpH,KACR+C,GAASpE,IAAK4Y,EAAWS,UAAWvZ,KAAM8Y,EAAW7e,QACrDe,EAAKuG,KAAKtJ,OAAOC,WACjB8e,EAAMzV,KAAKtJ,OAAOiB,KAAKygB,gBAAgBC,gBACvCC,EAAc7C,EAAIE,QAAQlY,OAAO,SAAUC,GAAK,MAAgB,WAATA,EAAE6a,IAA4B,YAAT7a,EAAE6a,KAClF9C,EAAIE,QAAU2C,EACd7C,EAAIte,iBAAkB,EACtBse,EAAIH,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAASsa,EAAW7e,OAAOsH,KAAKtJ,OAAOwG,YAC9Esb,cAAYxY,KAAKtJ,OAAOid,SACxBla,EAAGmc,aAAaH,GAAKI,KAAK,SAAUnY,GAChC,IAAIvF,EAAQiP,EAAM1Q,OAAOiB,KAAK8gB,gBAAgBnQ,QAC1CoQ,EAAMvgB,EAAMqG,QAAQ+Y,EAAW7e,SACtB,IAATggB,GACAtR,EAAM1Q,OAAOiB,KAAKghB,gBAAgBnJ,QAAQ,SAAU1H,GAC5CA,EAAKrJ,KAAKzF,WAAaue,EAAW7e,OAAOM,WACzC0f,EAAM5Q,EAAK5N,SAIvB,IAAI0e,EAAYrgB,YAAU,mBAAoBmF,GAC1CqW,EAASrW,EAAEqW,OACfwD,EAAW7e,OAAOY,aAAeya,EACjC,IAAK,IAAIvS,EAAI,EAAGA,EAAIuS,EAAOxc,OAAQiK,IAAK,CACpCuS,EAAOvS,GAAGpH,SAAWgC,YAAW2X,EAAOvS,IACvCuS,EAAOvS,GAAGrH,MAAQod,EAAW7e,OAAOyB,MAAQ,EAC5C4Z,EAAOvS,GAAGtH,MAAQkd,KAAKC,KAAqB,IAAhBD,KAAKE,UACjC,IAAI/Z,EAAanB,YAAWmb,EAAW7e,eAChC6E,EAAWjE,aAClBya,EAAOvS,GAAG1I,WAAayE,EACvBwW,EAAOvS,GAAGlD,eAAiBiZ,EAAW7e,OAAOM,SAC7C+a,EAAOvS,GAAGxI,SAAWme,SAAO/P,EAAM1Q,OAAOid,QAAQC,GAAK,UACtDG,EAAOvS,GAAGyL,cAAgB,UAC1BiJ,WAAS,sBAAwBnC,EAAOvS,GAAGxI,SAAU+a,EAAOvS,GAAI4F,EAAM1Q,SAEjEqd,EAAOvS,GAAG4F,EAAM1Q,OAAO8e,mBAAsF,IAAlEpO,EAAM8M,YAAY1V,QAAQuV,EAAOvS,GAAG4F,EAAM1Q,OAAOwG,aACxF0b,IAAcA,EAAUpX,KAC7BuS,EAAOvS,GAAGnI,iBAAkB,EAC5B0a,EAAOvS,GAAGrI,UAAW,GAEzBhB,EAAMgF,OAAOub,EAAMlX,EAAI,EAAG,EAAGuS,EAAOvS,IAMxC,GAJA0U,WAAS,SAAU/d,EAAOuF,GAC1BwY,WAAS,SAAU,sBAAuBxY,GAC1C0J,EAAM1Q,OAAOuS,QAAQ4P,EAAuBnb,GAC5C2Y,cAAYjP,EAAM1Q,OAAOid,SACrBvM,EAAM1Q,OAAOiB,KAAKmhB,WAAWvhB,OAAS,IAAM6P,EAAM1Q,OAAO0H,qBAAsB,CAC/E,IAAI2a,EAAYxgB,YAAU,QAASmF,GAKnC,GAHIhG,oBAAkBqhB,KAClBA,EAAY1a,WAAS,yBAA0B+I,EAAM1Q,QAAQsiB,eAAe,IAAI9D,WAE/Exd,oBAAkBqhB,GAAY,CAC/B,IAAIE,EAAeF,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KACpE7a,EAAU,OAAI0J,EAAM1Q,OAAOyiB,cAAcC,sBAAsBH,EAAcvb,EAAU,QAAG,IAGlGA,EAAE2Q,MAAQjH,EAAM1Q,OAAOiB,KAAKmZ,aAAauI,kBACzC,IAAIC,KACAlS,EAAM1Q,OAAO0H,sBACbgJ,EAAMmS,oBAAoBD,GAE9B,IAAIE,GAAetf,MAAOwe,EAAK7O,UAAWkK,GACtC3M,EAAM1Q,OAAO+iB,wBACbrS,EAAM1Q,OAAOmc,OAAO,yBAA0B2G,GAG9Cnb,WAAS,oBAAqB+I,EAAM1Q,QAAQ0f,mBAAmB1Y,EAAG4b,GAEtElS,EAAM1Q,OAAOuS,QAAQyQ,EAAiB3W,MAG9CiR,EAAiBnX,UAAU0c,oBAAsB,SAAUD,GACvDA,EAAYzZ,YAAc,UAC1BqW,WAAS,oBAAoB,EAAMoD,GACnC,IAAIK,EAAgBtb,WAAS,qBAAsB2B,KAAKtJ,QACpDkjB,EAAcvb,WAAS,cAAesb,GACtCE,EAAWxb,WAAS,WAAYsb,GAChCC,EAAYE,UAAY9Z,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,cAAgBH,EAAYI,SAASC,OAC3Fja,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YAAcF,EAASI,OAG7DjG,EAAiBnX,UAAU6X,aAAe,WACtC1U,KAAKuU,cAAe,GAExBP,EAAiBnX,UAAUka,cAAgB,SAAUtY,EAAMyb,GAEvD,IAAK,IADDC,KACK9iB,EAAI,EAAGe,EAAMC,OAAOC,KAAKmG,GAAMlH,OAAQF,EAAIe,EAAKf,IAAK,CAC1D,IAAI+iB,EAAche,YAAWqC,EAAKpH,IAClC+iB,EAAYhgB,SAAWqE,EAAKpH,GAC5B,IAAI8C,EAAQ,EAyBZ,GAxBA6F,KAAKqU,cACAhc,OAAOwE,UAAUC,eAAeC,KAAKqd,EAAa,WACnDA,EAAYlgB,MAAQ8F,KAAKqU,eAExB3c,oBAAkB0iB,EAAYpa,KAAKtJ,OAAO0G,gBAC1Cgd,EAAYpa,KAAKtJ,OAAO8e,kBAAoBre,EAAgB6I,KAAKtJ,WAClE0jB,EAAY/gB,iBAAkB,EAC1B2G,KAAKtJ,OAAOsa,oBAAsBtZ,oBAAkBsI,KAAKtJ,OAAOkN,kBAC7DlM,oBAAkB0iB,EAAYpa,KAAKtJ,OAAO0G,eAC7Cgd,EAAYjhB,UAAW,EAGvBihB,EAAYjhB,WAAYzB,oBAAkB0iB,EAAYpa,KAAKtJ,OAAOwC,sBAC5DkhB,EAAYpa,KAAKtJ,OAAOwC,qBAGjCb,OAAOwE,UAAUC,eAAeC,KAAKqd,EAAa,WACnDA,EAAYlgB,OAAQkgB,EAAY/gB,gBAAkB2G,KAAKqU,cAEvDrU,KAAKhF,iBAAmBtD,oBAAkB0iB,EAAYpa,KAAKtJ,OAAOuG,mBAClE+C,KAAKtJ,OAAO6G,WAAW/E,KAAK4hB,GAEhCA,EAAYphB,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACvDsC,WAAS,sBAAwBkE,EAAYphB,SAAUohB,EAAapa,KAAKtJ,SACpEgB,oBAAkBwiB,GAAgB,CACnC,IAAI3c,EAAanB,YAAW8d,UACrB3c,EAAWjE,oBACXiE,EAAWyC,KAAKtJ,OAAO0G,cAC1B4C,KAAKhF,wBACEuC,EAAWnD,SAAS4F,KAAKtJ,OAAO0G,cAE3Cgd,EAAYthB,WAAayE,EACzB6c,EAAY9b,eAAiBf,EAAWvE,SACxCmB,EAAQ+f,EAAc/f,MAAQ,EAYlC,GAVK9B,OAAOwE,UAAUC,eAAeC,KAAKqd,EAAa,WACnDA,EAAYjgB,MAAQA,GAExBigB,EAAYnN,cAAgB,WACxBvV,oBAAkB0iB,EAAYpa,KAAKtJ,OAAOuG,mBAAqBmd,EAAYthB,aAC3EkH,KAAKtJ,OAAO8G,SAAShF,KAAK4hB,GAEzBpa,KAAKhF,iBAAyC,IAAtBof,EAAYjgB,OACrC6F,KAAKtJ,OAAO6G,WAAW/E,KAAK4hB,IAE3B1iB,oBAAkB0iB,EAAYpa,KAAKtJ,OAAO0G,eAAiBgd,EAAYpa,KAAKtJ,OAAO0G,cAAc7F,QAAS,CAC3G,IAAImB,EAASsH,KAAK+W,cAAcqD,EAAYpa,KAAKtJ,OAAO0G,cAAegd,GACvEA,EAAY9gB,aAAeZ,EAE/ByhB,EAAa3hB,KAAK4hB,GAEtB,OAAOD,GASXnG,EAAiBnX,UAAUiY,cAAgB,SAAU/R,GACjD,IAIIsX,EAJAC,EAAW/hB,YAAU,WAAYwK,GACjCwX,EAAahiB,YAAU,aAAcwK,GACrCyX,EAAajiB,YAAU,aAAcwK,GACrC0X,EAAaliB,YAAU,aAAcwK,GAErC2X,EAAaniB,YAAU,aAAcwK,GACrClD,EAActH,YAAU,cAAewK,GACvC4X,EAAapiB,YAAU,OAAQwK,GAC/BzH,EAAS/C,YAAU,SAAUwK,GAC7B6X,EAAgBF,EAChBG,EAAuB7a,KAAKtJ,OAAO6E,0BAA0B,GAC7Duf,EAAYviB,YAAU,OAAQqiB,GAC5BljB,oBAAkBkjB,IAAqBljB,oBAAkBkjB,EAActf,SAAsC,QAAzBsf,EAActf,QAC/F5D,oBAAkBkjB,EAAcnc,QAAU/G,oBAAkBkjB,EAAcnc,KAAKoc,MACpFD,EAAcnc,KAAKoc,GAAwB9X,EAAKgR,OAAO6G,EAAc1gB,OAAO2gB,GAC5EC,EAAU1gB,SAASygB,GAAwB9X,EAAKgR,OAAO6G,EAAc1gB,OAAO2gB,MAE1EnjB,oBAAkBgjB,IAAeriB,OAAOC,KAAKoiB,GAAYnjB,QAA2B,SAAhBsI,KACtEA,EAAcA,GAA4B6a,EAAW7a,YACrD8a,EAAaA,GAA0BpiB,YAAU,OAAQmiB,GACzDpf,EAASA,GAAkB/C,YAAU,SAAUmiB,GACT,UAAlC1a,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAK3E,aAAe2E,KAAKtJ,OAAOiB,KAAKoE,WAAWC,mBAEhDgE,KAAKtJ,OAAOqkB,aACZ/a,KAAKgb,aAAaL,EAAYrf,EAAQuE,IAU9C,IAKIob,EACAC,EANAC,GANAd,EADAC,IAAa5iB,oBAAkB6iB,GACrBA,EAGApjB,EAAgB6I,KAAKtJ,QAAU2H,WAAS,SAAU2B,KAAKtJ,OAAOiB,KAAKhB,YACvEqJ,KAAKtJ,OAAOiB,KAAKhB,sBAEMC,cAAcyjB,EAAQ1jB,WAAW8E,KAAO4e,EACrEhM,EAAQlX,EAAgB6I,KAAKtJ,QAAU2H,WAAS,QAAS2B,KAAKtJ,OAAOC,YACnEwkB,EAAQ5jB,OACVke,EAAM,IAAIP,QACV6D,EAAYxgB,YAAU,QAASwK,GAOnC,GAJKrL,oBAAkBqhB,KACnBkC,EAAclC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,YAATA,EAAEX,KAC/D2C,EAAcnC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,aAATA,EAAEX,MAE9DvY,KAAKtJ,OAAOiB,KAAKI,gBAAkBiI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC3EyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAIN,OAAS,IAAQG,oBAAkBqhB,KACvEkC,EAAY1jB,QAAU2jB,EAAY3jB,SAAWyI,KAAKtJ,OAAOqkB,YAAc,CACpErjB,oBAAkBqhB,KAClBA,EAAY,IAAI7D,QAChB6D,EAAY1a,WAAS,yBAA0B2B,KAAKtJ,QAAQukB,YAAYlC,GACxEA,EAAY1a,WAAS,yBAA0B2B,KAAKtJ,QAAQwkB,YAAYnC,IAE5E,IAAIqC,EAAYrC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,YAATA,EAAEX,KAC7D8C,EAAYtC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,aAATA,EAAEX,KACjE9C,EAAIE,QAAUyF,EAAU7hB,OAAO8hB,GAC/B,IAAIC,EAAe,IAAI1kB,cAAYukB,GAASzE,aAAajB,GAIzD,GAHAzV,KAAKtJ,OAAOmc,OAAO,oBAAsBpU,KAAM6c,IAC/CH,EAAUnb,KAAKwU,YAAYT,OAC3B/T,KAAKwU,YAAYT,OAAS,KACtB/T,KAAKtJ,OAAOiB,KAAKmhB,WAAWvhB,OAAS,EAAG,CACxC,IAAI0d,EAAQ1c,YAAU,QAASwK,GAI/B,GAHIrL,oBAAkBqhB,KAClBA,EAAY1a,WAAS,yBAA0B2B,KAAKtJ,QAAQsiB,eAAe,IAAI9D,WAE9Exd,oBAAkBud,GAAQ,CAC3B,IAAIgE,EAAehE,EAAMU,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KAChE4C,EAAUnb,KAAKtJ,OAAOyiB,cAAcC,sBAAsBH,EAAckC,GAAS,KAI7F,GAAInb,KAAKtJ,OAAOiB,KAAKmhB,WAAWvhB,QAA2D,IAAjDyI,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQC,QACtB,IAAnDyI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,SAAiByI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAIN,OAAQ,CACxG,IAAIgkB,EAAchjB,YAAU,QAASwK,GACjCrL,oBAAkB6jB,KAClBA,EAAcld,WAAS,yBAA0B2B,KAAKtJ,QAAQsiB,eAAe,IAAI9D,UAEjF+D,EAAesC,EAAY5F,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KACtE4C,EAAUnb,KAAKtJ,OAAOyiB,cAAcC,sBAAsBH,EAAcjZ,KAAKtJ,OAAO8G,UAAU,GAElG,GAAIwC,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQC,OAAS,GAAKyI,KAAKuU,aAAc,CACvEvU,KAAKuU,cAAe,EAIpB,IAAK,IAHDhX,EAAayC,KAAKtJ,OAAO6G,WAEzBie,GADAvG,EAAQ1c,YAAU,QAASwK,GAClB,IAAImS,SACRuG,EAAMzb,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQC,OAAS,EAAGkkB,GAAO,EAAGA,IAAO,CAC9E,IAAI1P,EAAM/L,KAAKtJ,OAAOiB,KAAK+jB,iBAAiB1b,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQmkB,GAAK7I,OACnF+I,EAAU5P,EAAI6P,cAAgBpiB,EAAUwG,KAAKtJ,QAC7CqV,EAAI6P,aAAaC,KAAK9P,GACtB/L,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQmkB,GAAKK,UAC/CN,EAAOO,OAAO/b,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQmkB,GAAK7I,MAAO+I,GAEpE,IACIK,GAAatgB,aADE,IAAI9E,cAAY2G,GAAYmZ,aAAa8E,GACfF,aAAcH,EAASK,OAAQA,GAM5E,GALAxb,KAAKtJ,OAAOmc,OAAO,aAAcmJ,GACjCb,EAAUa,EAAStgB,aACnBsE,KAAKwU,YAAYT,OAAS,KAC1B/T,KAAKsU,WAAa6G,EAClBnb,KAAKtJ,OAAOmc,OAAO,kBACf7S,KAAKtJ,OAAOiB,KAAKmhB,WAAWvhB,OAAS,IAAMG,oBAAkBud,GAAQ,CAGjEgE,EADU1gB,YAAU,QAASwK,GACN4S,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KAClE4C,EAAUnb,KAAKtJ,OAAOyiB,cAAcC,sBAAsBH,EAAcjZ,KAAKsU,YAHhE,IAMrBjG,EAAQlX,EAAgB6I,KAAKtJ,QAAU2H,WAAS,QAAS2B,KAAKtJ,OAAOC,YAC/DwkB,EAAQ5jB,OACd,IAAI0kB,EAAOjc,KAAKkc,OAAOf,EAAS9M,EAAOiM,EAAUG,EAAYD,EAAYzX,GACzEoY,EAAUc,EAAKlI,OACf1F,EAAQ4N,EAAK5N,MACbtL,EAAKgR,OAASoH,EACdpY,EAAKsL,MAAQA,EACbrO,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,IAExCiR,EAAiBnX,UAAUqf,OAAS,SAAUf,EAAS9M,EAAOiM,EAAUG,EAAYD,EAAYzX,GAC5F,IAAI/C,KAAKtJ,OAAOma,aAAiByJ,GAA2B,gBAAfE,GACpCC,GAAwC,gBAA1Bza,KAAKtJ,OAAOylB,WAM9B,IAAKnc,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,4BAA8Ba,GAA2B,gBAAfE,IAC3D,SAAlCnc,WAAS,cAAe0E,GAAkB,CAC7C,IAAIqZ,EAAUpc,KAAKtJ,OAAO+iB,wBAA0B1W,EAAO1E,WAAS,aAAc0E,GAClF/C,KAAKtJ,OAAOmc,OAAOwJ,GAAwBtI,OAAQoH,EAAS9M,MAAOA,EAAOqM,WAAY0B,IACtFjB,EAAUnb,KAAKwU,YAAYT,OAC3B1F,EAAQrO,KAAKwU,YAAYnG,YAVzBrO,KAAKtJ,OAAOmc,OAAOwJ,GAAwBtI,OAAQoH,EAAS9M,MAAOA,IACnE8M,EAAUnb,KAAKwU,YAAYT,OAC3B1F,EAAQlX,EAAgB6I,KAAKtJ,QAAU2H,WAAS,QAAS2B,KAAKtJ,OAAOC,YAC/DqJ,KAAKwU,YAAYnG,MAS3B,IACIiO,EAA0B,0BAC9B,KAAoB,IAAf7B,GAAwB1X,EAAgB,cAAMrL,oBAAkBqL,EAAKuZ,KACnEvZ,EAAKuZ,MAAyD,aAA1Btc,KAAKtJ,OAAOylB,UAA0B,CAE7E,IAAK,IADDI,KACKllB,EAAI,EAAGA,EAAI8jB,EAAQ5jB,OAAQF,IAAK,CAClBoB,EAAgBuH,KAAKtJ,OAAQykB,EAAQ9jB,GAAI2I,KAAKtJ,OAAO6G,aAEpEgf,EAAc/jB,KAAK2iB,EAAQ9jB,IAInCgX,GADA8M,EAAUoB,GACMhlB,OAGpB,OADcwc,OAAQoH,EAAS9M,MAAOA,IAG1C2F,EAAiBnX,UAAU8X,WAAa,SAAU6H,GAC9Cxc,KAAKwU,YAAcgI,GAEvBxI,EAAiBnX,UAAUme,aAAe,SAAUL,EAAYrf,EAAQuE,GAC/C,WAAhBA,GAA4C,SAAhBA,GAC7BG,KAAKtJ,OAAOmc,OAAO4J,IAAqBxiB,MAAO0gB,EAAYrf,OAAQA,GAAUuE,IAE7D,cAAhBA,GAAiE,UAAlCG,KAAKtJ,OAAOmF,aAAaC,MACxDkE,KAAKtJ,OAAOmc,OAAO6J,QAGpB1I,MC3kBX,SAAW2I,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,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAmB,MAAI,IAAM,QACzCA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAwB,WAAI,IAAM,aAdlD,CAeGA,gBAAgBA,mBAOnB,SAAWC,GACPA,EAAiBA,EAA0B,QAAI,GAAK,UACpDA,EAAiBA,EAA6B,WAAI,GAAK,aACvDA,EAAiBA,EAAgC,cAAI,GAAK,gBAC1DA,EAAiBA,EAAiC,eAAI,GAAK,iBAC3DA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAA4B,UAAI,GAAK,YACtDA,EAAiBA,EAA8B,YAAI,GAAK,cACxDA,EAAiBA,EAA4B,UAAI,IAAM,YACvDA,EAAiBA,EAA4B,UAAI,IAAM,YACvDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAAyB,OAAI,IAAM,SAhBxD,CAiBGA,qBAAqBA,wBC7CxB,IAAInc,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Dqb,GAA8B,SAAU/a,GAExC,SAAS+a,IACL,OAAkB,OAAX/a,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KA0B/D,OA5BAS,GAAUoc,EAAc/a,GAIxBZ,IACIc,WAAS,KACV6a,EAAahgB,UAAW,gBAAY,GACvCqE,IACIc,WAAS,IACV6a,EAAahgB,UAAW,iBAAa,GACxCqE,IACIc,WAAS,IACV6a,EAAahgB,UAAW,mBAAe,GAC1CqE,IACIc,cACD6a,EAAahgB,UAAW,yBAAqB,GAChDqE,IACIc,YAAS,IACV6a,EAAahgB,UAAW,yBAAqB,GAChDqE,IACIc,YAAS,IACV6a,EAAahgB,UAAW,iBAAa,GACxCqE,IACIc,WAAS,OACV6a,EAAahgB,UAAW,gBAAY,GACvCqE,IACIc,WAAS,QACV6a,EAAahgB,UAAW,oBAAgB,GACpCggB,GACT5a,iBCrDExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAQ5Dsb,GAAiC,SAAUhb,GAE3C,SAASgb,IACL,IAAI1V,EAAmB,OAAXtF,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAGhE,OAFAoH,EAAM2V,KAAO,IAAIC,uBACjB5V,EAAM+L,cACC/L,EAiFX,OAtFA3G,GAAUqc,EAAiBhb,GAe3Bgb,EAAgBjgB,UAAUogB,aAAe,SAAUC,GAC3Cld,KAAKmd,SAAWnd,KAAKmd,OAAOC,UAAYpd,KAAKmd,OAAOA,UACpDnd,KAAKqd,SAAWrd,KAAKsd,kBAAkBtd,KAAKmd,UAQpDL,EAAgBjgB,UAAUygB,kBAAoB,SAAUH,GACpD,OAAIA,EAAOna,KACAhD,KAAK+c,KAAKQ,cAAcJ,GAGxBnd,KAAK+c,KAAKS,gBAAgBL,IAOzCL,EAAgBjgB,UAAU4gB,aAAe,WACrC,OAAOzd,KAAKqd,UAOhBP,EAAgBjgB,UAAU6gB,YAAc,SAAUC,QAC/B,IAAXA,IAAqBA,WACGC,IAAxB5d,KAAK6d,iBACL7d,KAAKmT,WAAW2K,eAAaC,WAAUA,WAASC,WAAczF,GAAI0F,UAAQje,KAAK6d,eAAgBF,GAC3FO,SAAU,oBAQtBpB,EAAgBjgB,UAAUshB,YAAc,SAAUnb,GAC9C,OAAOhD,KAAKmT,WAAW2K,eAAaC,WAAU/a,KAOlD8Z,EAAgBjgB,UAAUuhB,oBAAsB,SAAUC,GACtDre,KAAKse,cAAcD,GAAM,IAE7Bnd,IACIc,cACD8a,EAAgBjgB,UAAW,YAAQ,GACtCqE,IACIc,cACD8a,EAAgBjgB,UAAW,sBAAkB,GAChDqE,IACIc,cACD8a,EAAgBjgB,UAAW,aAAS,GACvCqE,IACIc,cACD8a,EAAgBjgB,UAAW,cAAU,GACxCqE,IACIc,cACD8a,EAAgBjgB,UAAW,kBAAc,GAC5CqE,IACIc,cACD8a,EAAgBjgB,UAAW,uBAAmB,GAC1CigB,GACT7a,iBAEEsc,GAA8B,SAAUzc,GAExC,SAASyc,IACL,OAAkB,OAAXzc,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAQ/D,OAVAS,GAAU8d,EAAczc,GAIxBZ,IACIiB,gBAAe2a,KAChByB,EAAa1hB,UAAW,eAAW,GACtCqE,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,wBAAoB,GACxC0hB,GACTtc,iBC/HExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Dgd,GAA8B,SAAU1c,GAExC,SAAS0c,IACL,OAAkB,OAAX1c,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAmC/D,OArCAS,GAAU+d,EAAc1c,GAIxBZ,IACIc,YAAS,IACVwc,EAAa3hB,UAAW,mBAAe,GAC1CqE,IACIc,YAAS,IACVwc,EAAa3hB,UAAW,oBAAgB,GAC3CqE,IACIc,YAAS,IACVwc,EAAa3hB,UAAW,qBAAiB,GAC5CqE,IACIc,WAAS,SACVwc,EAAa3hB,UAAW,YAAQ,GACnCqE,IACIc,WAAS,QACVwc,EAAa3hB,UAAW,sBAAkB,GAC7CqE,IACIc,YAAS,IACVwc,EAAa3hB,UAAW,2BAAuB,GAClDqE,IACIc,YAAS,IACVwc,EAAa3hB,UAAW,yBAAqB,GAChDqE,IACIc,YAAS,IACVwc,EAAa3hB,UAAW,+BAA2B,GACtDqE,IACIc,WAAS,KACVwc,EAAa3hB,UAAW,gBAAY,GACvCqE,IACIc,gBACDwc,EAAa3hB,UAAW,cAAU,GACrCqE,IACIc,YAAS,IACVwc,EAAa3hB,UAAW,wBAAoB,GACxC2hB,GACTvc,iBC9DExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Did,GAAgC,SAAU3c,GAE1C,SAAS2c,IACL,OAAkB,OAAX3c,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAQ/D,OAVAS,GAAUge,EAAgB3c,GAI1BZ,IACIc,cACDyc,EAAe5hB,UAAW,aAAS,GACtCqE,IACIc,cACDyc,EAAe5hB,UAAW,iBAAa,GACnC4hB,GACTxc,iBAKEyc,GAA8B,SAAU5c,GAExC,SAAS4c,IACL,OAAkB,OAAX5c,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAQ/D,OAVAS,GAAUie,EAAc5c,GAIxBZ,IACIiB,gBAAesc,KAChBC,EAAa7hB,UAAW,eAAW,GACtCqE,IACIc,YAAS,IACV0c,EAAa7hB,UAAW,mBAAe,GACnC6hB,GACTzc,iBCpDExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Dmd,GAAwC,SAAU7c,GAElD,SAAS6c,IACL,OAAkB,OAAX7c,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAW/D,OAbAS,GAAUke,EAAwB7c,GAIlCZ,IACIc,YAAS,IACV2c,EAAuB9hB,UAAW,mBAAe,GACpDqE,IACIc,WAAS,IACV2c,EAAuB9hB,UAAW,iBAAa,GAClDqE,IACIc,WAAS,IACV2c,EAAuB9hB,UAAW,qBAAiB,GAC/C8hB,GACT1c,iBCtCExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GA0C5Dod,GAA0B,SAAU9c,GAEpC,SAAS8c,EAAS7e,EAAS4T,GACvB,IAAIvM,EAAQtF,EAAO/E,KAAKiD,KAAMD,EAAS4T,IAAY3T,KACnDoH,EAAMoN,eACNpN,EAAMyX,sBACNzX,EAAM0X,4BACN1X,EAAM2X,eAAiB,iBACvB3X,EAAM4X,eAAiB,iBACvB5X,EAAM6M,aAAe,eACrB7M,EAAM6X,sBAAwB,SAAUC,EAAKC,GACzC,GAAID,EAAK,CAIL,IAAK,IAHD5mB,EAAOD,OAAOC,KAAK4mB,GACnBE,GAAU,EACVC,GAAe,WAAY,eAAgB,WAAY,WAAY,aAAc,iBAAkB,SAC9FhoB,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAC7B,GAAI6nB,EAAI5mB,EAAKjB,MAAQ8nB,EAAQ7mB,EAAKjB,MAAyC,IAAlCgoB,EAAY7gB,QAAQlG,EAAKjB,IAAY,CAE1E,KADa6nB,EAAI5mB,EAAKjB,cAAeioB,MAAQH,EAAQ7mB,EAAKjB,cAAeioB,OACzDJ,EAAI5mB,EAAKjB,IAAIkoB,YAAcJ,EAAQ7mB,EAAKjB,IAAIkoB,UAAY,CACpEH,GAAU,EACV,OAIZ,OAAOA,EAGP,OAAO,GAGfI,EAAW9c,OAAO+c,IAClBvJ,WAAS,mBAAoB9O,EAAMsY,yBAA0BtY,GAM7D,OAJK1P,oBAAkB0P,EAAMuY,gBAAsB,SAC/Cld,OAAKC,OAAOF,UAEhB4E,EAAMzP,KAAO,IAAI8K,OACV2E,EApCX3G,GAAUme,EAAU9c,GAsCpB0d,EAAaZ,EAWbA,EAAS/hB,UAAU+iB,YAAc,SAAUC,EAAuBC,EAAkBC,EAAUC,GAE1F,OAAOhgB,KAAKigB,kBAAkBC,IAAIL,EAAuBC,EAAkBC,EAAUC,GAAQ,IAYjGpB,EAAS/hB,UAAUsjB,UAAY,SAAUN,EAAuBC,EAAkBC,EAAUC,GAExF,OAAOhgB,KAAKigB,kBAAkBC,IAAIL,EAAuBC,EAAkBC,EAAUC,GAAQ,IAWjGpB,EAAS/hB,UAAUujB,UAAY,SAAUC,EAAqBP,EAAkBQ,EAAQN,GACpF,OAAOhgB,KAAKugB,gBAAgBL,IAAIG,EAAqBP,EAAkBQ,EAAQN,IAQnFpB,EAAS/hB,UAAU+F,cAAgB,WAC/B,MAAO,YAQXgc,EAAS/hB,UAAU2jB,UAAY,WAC3BxgB,KAAKygB,iBACLzgB,KAAK0gB,iBACL1gB,KAAK2gB,eACDC,MAAO,QACPC,MAAO,QACPC,MAAO,QACPC,OAAQ,UACRC,UAAW,aACXC,YAAa,eACbC,UAAW,SACXC,WAAY,WAEhBnhB,KAAKohB,KAAO,IAAIC,OAAK,WAAYrhB,KAAK2gB,cAAe3gB,KAAKshB,QACtDthB,KAAKhF,iBAAmBtD,oBAAkBsI,KAAK5C,gBAC/C4C,KAAK5C,aAAe,aAW5BwhB,EAAS/hB,UAAU0kB,aAAe,SAAUpmB,EAAY2gB,EAAW0F,GAC/DxhB,KAAKyhB,WAAWC,WAAWvmB,EAAY2gB,EAAW0F,IAOtD5C,EAAS/hB,UAAU8kB,aAAe,WAC1B3hB,KAAKyhB,YACLzhB,KAAKyhB,WAAWE,gBAUxB/C,EAAS/hB,UAAU+kB,iBAAmB,SAAUhP,GAC5C5S,KAAKyhB,WAAWG,iBAAiBhP,IAUrCgM,EAAS/hB,UAAUglB,OAAS,SAAUC,GAClC9hB,KAAKrI,KAAKkqB,OAAOC,IAarBlD,EAAS/hB,UAAUklB,eAAiB,SAAUC,GAC1ChiB,KAAKiiB,aAAaF,eAAeC,GACjChiB,KAAKkiB,qBASTtD,EAAS/hB,UAAUslB,eAAiB,SAAUC,EAAWC,GACrDriB,KAAKrI,KAAKwqB,eAAeC,EAAWC,IAExCzD,EAAS/hB,UAAU4jB,eAAiB,WAEhC,IAAIa,EAASD,OAAKC,OACdgB,KACJpM,WAASlW,KAAKshB,UAAYgB,GAC1B,IAAIC,EACJA,KACAA,EAAahqB,YAAUyH,KAAKshB,OAAQA,GACpC,IAAIkB,EACJA,KACAA,EAAiBjqB,YAAUyH,KAAK4C,gBAAiB2f,GACjDrM,WAAS,OAAQsM,EAAgBjqB,YAAUyH,KAAKshB,OAAQgB,IACxDjB,OAAKoB,KAAKH,IASd1D,EAAS/hB,UAAUwT,MAAQ,WACvBrQ,KAAK0iB,YAAYrS,SAErBuO,EAAS/hB,UAAU8lB,yBAA2B,SAAUjlB,GACpD,GAAIsC,KAAK4iB,cAAe,CACpB,IACIC,OAAe,EAEflkB,OAAM,EACNmkB,OAAiB,EACrB,OAAQplB,EAAEpC,QACN,IAAK,gBACD0E,KAAK+iB,YACL,MACJ,IAAK,cACD/iB,KAAKgjB,cACL,MACJ,IAAK,mBAIW,QADZrkB,EAFSjB,EAAE0D,OACK2J,QAAQ,cACXA,QAAQ,aACO6S,IAARjf,GAChBqB,KAAKijB,sBAAsBtkB,EAAImM,cAAc,sBAEjD,MACJ,IAAK,qBAIW,QADZnM,EAFSjB,EAAE0D,OACK2J,QAAQ,cACXA,QAAQ,aACO6S,IAARjf,GAChBqB,KAAKijB,sBAAsBtkB,EAAImM,cAAc,wBAEjD,MACJ,IAAK,YACD,IAAK9K,KAAK5B,qBAGN,GAFAykB,EAAenlB,EAAE0D,OAAO8hB,cAED,QADvBJ,EAAiB9iB,KAAKmjB,mBAAmBN,IACZ,CACzB,IAAInZ,EAAWoZ,EAAepZ,SAC9B1J,KAAKojB,UAAU1Z,GACf,IAAI2Z,EAAY3lB,EAAE0D,OAAOiiB,UACrBC,EAAQR,EAAerP,SAAS4P,GACpCjT,YAAUkT,GAAQ,aAClBlT,YAAUkT,GAAQ,gBAGlBtjB,KAAKujB,iBAGb,MACJ,IAAK,UACD,IAAKvjB,KAAK5B,qBAGN,GAFAykB,EAAenlB,EAAE0D,OAAO8hB,cAED,QADvBJ,EAAiB9iB,KAAKwjB,uBAAuBX,IAChB,CACzB,IAAIY,EAASX,EAAepZ,SAC5B1J,KAAKojB,UAAUK,GACf,IAAIC,EAAShmB,EAAE0D,OAAOiiB,UAClBvb,EAAOgb,EAAerP,SAASiQ,GACnCtT,YAAUtI,GAAO,aACjBsI,YAAUtI,GAAO,gBAGjB9H,KAAKujB,oBAO7B3E,EAAS/hB,UAAUsmB,mBAAqB,SAAUQ,GAC9C,IAAIpY,EAAaoY,EAAkBzY,mBAKnC,OAJmB,OAAfK,IAA0E,IAAlDA,EAAWgB,UAAU/N,QAAQ,iBACxB,SAA7B+M,EAAW/Q,MAAMG,UACjB4Q,EAAavL,KAAKmjB,mBAAmB5X,IAElCA,GAGXqT,EAAS/hB,UAAU2mB,uBAAyB,SAAUG,GAClD,IAAIpY,EAAaoY,EAAkBC,uBAKnC,OAJmB,OAAfrY,IAA0E,IAAlDA,EAAWgB,UAAU/N,QAAQ,iBACxB,SAA7B+M,EAAW/Q,MAAMG,UACjB4Q,EAAavL,KAAKwjB,uBAAuBjY,IAEtCA,GAEXqT,EAAS/hB,UAAU6jB,eAAiB,WAChC1gB,KAAK2gB,iBACL3gB,KAAKxC,YACLwC,KAAKzC,cACLyC,KAAK6jB,eACL7jB,KAAK8jB,aAAc,EACnB9jB,KAAK+jB,eAAgB,EACrB/jB,KAAKgkB,YACDC,cAAe,iBACfC,YAAa,eACbC,iBAAkB,qBAClBC,mBAAoB,uBACpBC,UAAW,YACXC,QAAS,WAEbtkB,KAAK+a,cAAiB/a,KAAKrJ,sBAAsBC,gBAAgBoJ,KAAKrJ,WAAWA,WAAW4tB,UACnF7sB,oBAAkBsI,KAAKrJ,WAAW+C,QAAWsG,KAAKrJ,WAAWE,mBAAmB2tB,oBACzFxkB,KAAKhF,iBAAmBtD,oBAAkBsI,KAAK/C,kBAQnD2hB,EAAS/hB,UAAU4nB,WAAa,WAC5BC,eAAa/X,IAAI3M,KAAKrI,KAAKgc,QAAS,QAAS3T,KAAK2kB,kBAAmB3kB,MACrE0kB,eAAa/X,IAAI3M,KAAK2T,QAAS,WAAY3T,KAAK2kB,kBAAmB3kB,MACnEA,KAAK4kB,eAAiB,IAAIC,iBAAe7kB,KAAK2T,SAC1CmR,UAAW9kB,KAAK2iB,yBAAyB9G,KAAK7b,MAC9CgkB,WAAYhkB,KAAKgkB,WACjBe,UAAW,YAEX/kB,KAAK4iB,gBACL5iB,KAAK2T,QAAQqR,UAAsC,IAA3BhlB,KAAK2T,QAAQqR,SAAkB,EAAIhlB,KAAK2T,QAAQqR,WAShFpG,EAAS/hB,UAAUooB,gBAAkB,WACjC,IAAIC,KAGJ,OADAllB,KAAKrI,KAAqB,iBAAEqI,KAAKmlB,eAAenlB,KAAK1I,UACjD0I,KAAKyK,YACEya,GAEXA,EAAQ1sB,MACJ4sB,OAAQ,SAAUriB,MAAO/C,KAAMA,KAAKhI,kBAEnCN,oBAAkBsI,KAAKqlB,UACxBH,EAAQ1sB,MACJ4sB,OAAQ,UACRriB,MAAO/C,QAGXA,KAAKslB,kBACLJ,EAAQ1sB,MACJ4sB,OAAQ,cACRriB,MAAO/C,QAGXA,KAAK6Q,aACLqU,EAAQ1sB,MACJ4sB,OAAQ,QACRriB,MAAO/C,KAAMA,KAAK8Q,gBAGtB9Q,KAAKI,iBACL8kB,EAAQ1sB,MACJ4sB,OAAQ,UACRriB,MAAO/C,QAGXA,KAAKM,cACL4kB,EAAQ1sB,MACJ4sB,OAAQ,OACRriB,MAAO/C,QAGXA,KAAK8Y,WAAWvhB,OAAS,GACzB2tB,EAAQ1sB,MACJ4sB,OAAQ,UAAWriB,MAAO/C,QAGlCklB,EAAQ1sB,MACJ4sB,OAAQ,SAAUriB,MAAO/C,QAEzBA,KAAKulB,kBACLL,EAAQ1sB,MACJ4sB,OAAQ,cAAeriB,MAAO/C,SAGlCA,KAAKyR,eAAiBzR,KAAKhB,YAAcgB,KAAKf,oBAC9Ce,KAAKrI,KAAKya,6BAA+BpS,KAAKrI,KAAK0a,+BACnD6S,EAAQ1sB,MACJ4sB,OAAQ,SAAUriB,MAAO/C,QAG7BA,KAAKwlB,gBACLN,EAAQ1sB,MACJ4sB,OAAQ,YAAariB,MAAO/C,QAGhCA,KAAKylB,gBACLP,EAAQ1sB,MACJ4sB,OAAQ,YAAariB,MAAO/C,QAGhCA,KAAKK,gBACL6kB,EAAQ1sB,MACJ4sB,OAAQ,aAAcriB,MAAO/C,QAGjCA,KAAK0lB,mBACLR,EAAQ1sB,MACJ4sB,OAAQ,gBAAiBriB,MAAO/C,QAGxCA,KAAK2lB,sBAAsBT,GACpBA,IAEXtG,EAAS/hB,UAAU8oB,sBAAwB,SAAUT,GAC7CllB,KAAKX,qBACL6lB,EAAQ1sB,MACJ4sB,OAAQ,iBACRriB,MAAO/C,SAGXA,KAAKnE,aAAa+pB,aAAe5lB,KAAKnE,aAAagqB,eAAiB7lB,KAAKnE,aAAaoE,eACtFilB,EAAQ1sB,MACJ4sB,OAAQ,OACRriB,MAAO/C,QAGXA,KAAK8lB,gBAAgB9lB,KAAK1I,UAC1B4tB,EAAQ1sB,MACJ4sB,OAAQ,gBACRriB,MAAO/C,QAGXA,KAAK+lB,gBACLb,EAAQ1sB,MACJ4sB,OAAQ,YACRriB,MAAO/C,QAGXA,KAAK5B,sBACL8mB,EAAQ1sB,MACJ4sB,OAAQ,gBACRriB,MAAO/C,QAGXA,KAAKyZ,yBACLyL,EAAQ1sB,MACJ4sB,OAAQ,iBACRriB,MAAO/C,QAGfklB,EAAQ1sB,MACJ4sB,OAAQ,SACRriB,MAAO/C,KAAKrI,SAGpBinB,EAAS/hB,UAAUipB,gBAAkB,SAAUxuB,GAC3C,IAAI8P,EAAQpH,KACZ,OAAO1I,EAAQ0uB,KAAK,SAAUja,GAC1B,OAAIA,EAAIzU,QACG8P,EAAM0e,gBAAgB/Z,EAAIzU,YAE3ByU,EAAIka,WAAYla,EAAIma,qBAStCtH,EAAS/hB,UAAUspB,aAAe,WAC1BnmB,KAAKrI,MAAQqI,KAAKrI,KAAKgc,SACvB+Q,eAAa0B,OAAOpmB,KAAKrI,KAAKgc,QAAS,QAAS3T,KAAK2kB,oBAY7D/F,EAAS/hB,UAAUgG,IAAM,SAAUC,EAAOC,GAClC/C,KAAKqmB,cACLrmB,KAAKqmB,aAAatiB,QAAQjB,EAAOC,EAAM/C,OAS/C4e,EAAS/hB,UAAUypB,OAAS,WACxB,IAAIlf,EAAQpH,KACRA,KAAK8T,UACL9T,KAAKrI,KAAKmc,SAAU,EACpB9T,KAAKrI,KAAKkc,YAEd0S,iBAAgBnlB,OAAQpB,KAAK2T,SAAW3T,KAAKsM,eAC7CtM,KAAK6C,KAAK,2BACV7C,KAAKT,aAAe,IAAIiR,GAAOxQ,MAC/BA,KAAKwmB,WAAa,IAAIxS,GAAiBhU,MACvCA,KAAK0iB,YAAc,IAAI/S,GAAM3P,MAC7BA,KAAKiJ,QdljBK,QcmjBVjJ,KAAKymB,sBACLzmB,KAAK/G,eAAgB,EAChBvB,oBAAkBsI,KAAKrJ,aACxBqJ,KAAK0mB,gBAAgB1mB,KAAKrJ,YAE9BqJ,KAAK2mB,WACD3mB,KAAK2T,QAAQvL,UAAUC,SAAS,eAAiBrI,KAAK4mB,gBAAgBC,WACtE7mB,KAAKrI,KAAKivB,gBAAgBC,UAAY,gBAE1C7mB,KAAK8mB,cACL,IAAIC,EAAgBza,gBAAc,OAASsH,GAAI5T,KAAK2T,QAAQC,GAAK,iBACjExD,YAAUpQ,KAAK2T,SAAU,cACpBjc,oBAAkBsI,KAAKgnB,SAAoC,iBAAjBhnB,KAAW,SAAgD,IAA9BA,KAAKgnB,OAAOxoB,QAAQ,OAC5FwB,KAAK2T,QAAQnZ,MAAMwsB,OAAShnB,KAAKgnB,QAEhCtvB,oBAAkBsI,KAAKmN,QAAkC,iBAAhBnN,KAAU,QAA+C,IAA7BA,KAAKmN,MAAM3O,QAAQ,OACzFwB,KAAK2T,QAAQnZ,MAAM2S,MAAQnN,KAAKmN,OAEpCnN,KAAK2T,QAAQhG,YAAYoZ,GACzB,IAAIE,EAAsBjnB,KAAKrI,KAAKstB,gBACpCjlB,KAAKrI,KAAKstB,gBAAkB,WACxB,IAAIC,KACJA,EAAU+B,EAAoBllB,MAAM/B,MACpC,IAAK,IAAI3I,EAAI,EAAGA,EAAI6tB,EAAQ3tB,OAAQF,IACN,kBAAtB6tB,EAAQ7tB,GAAG+tB,SACXF,EAAQ7tB,GAAG+tB,OAAS,qBAG5B,OAAOF,GAEXllB,KAAKrI,KAAKuvB,SAASH,GACnB/mB,KAAKykB,aACLzkB,KAAKmnB,iBACL,IACIC,EAAoBpnB,KAAKrI,KAAoB,gBAEjDqI,KAAKrI,KAAoB,gBAAI,SAAUoL,EAAM7I,GACzCktB,EAAkBrlB,MAAMqF,EAAMzP,MAExByP,EAAM0M,SAAWpc,oBAAkB0P,EAAa,UAClDA,EAAMigB,cAActkB,EAAM7I,KAItC0kB,EAAS/hB,UAAUyqB,gBAAkB,WAC5B5vB,oBAAkBsI,KAAKrI,KAAK4vB,kBAC7BvnB,KAAKrI,KAAK4vB,gBAAgB3d,UAE9B5J,KAAKunB,gBAAkBvnB,KAAKrI,KAAK4vB,gBAAkB,IAAIpgB,GAAcnH,OAEzE4e,EAAS/hB,UAAU6pB,gBAAkB,SAAUjoB,GAC3C,IAAI2I,EAAQpH,KAIZ,GAHI7I,EAAgB6I,QAChBvB,EAAOJ,WAAS,SAAUI,IAE1BA,aAAgB/B,OAAS+B,EAAKlH,OAAS,GAAKc,OAAOwE,UAAUC,eAAeC,KAAK0B,EAAK,GAAI,SAC1FuB,KAAKxC,SAAWiB,EAChBuB,KAAKxC,SAASC,OAAO,SAAUC,GAC3BwY,WAAS,sBAAwBxY,EAAE1E,SAAU0E,EAAG0J,GAChC,IAAZ1J,EAAEvD,OACFiN,EAAM7J,WAAW/E,KAAKkF,UAK9B,GAAIvG,EAAgB6I,MAAO,CACvB,IAAIwnB,EAAWnpB,WAAS,SAAU2B,KAAKrJ,YACvCqJ,KAAKwmB,WAAWxR,kBAAkBwS,QAGlCxnB,KAAKwmB,WAAWxR,kBAAkBvW,IAa9CmgB,EAAS/hB,UAAU4qB,mBAAqB,WACpCznB,KAAK0nB,mBACL1nB,KAAKrI,KAAKgwB,UAAY3nB,KAAK2nB,UAC3B3nB,KAAKrI,KAAKirB,cAAgB5iB,KAAK4iB,cAC/B5iB,KAAKrI,KAAKL,QAAU0I,KAAKmlB,eAAenlB,KAAK1I,SAC7C0I,KAAKrI,KAAK4tB,iBAAmBvlB,KAAKulB,iBAClCvlB,KAAKrI,KAAK8tB,eAAiBzlB,KAAKylB,eAChCzlB,KAAKrI,KAAKsd,MAAQjV,KAAKiV,MACvBjV,KAAKrI,KAAKiwB,gBAAkB5nB,KAAK4nB,gBACjC5nB,KAAKrI,KAAKkZ,YAAc7Q,KAAK6Q,YAC7B7Q,KAAKrI,KAAKmZ,aAAe+W,sBAAoB7nB,KAAK8Q,cAClD9Q,KAAKrI,KAAKmwB,cAAgB9nB,KAAK8nB,cAC/B9nB,KAAKrI,KAAK0I,eAAiBL,KAAKK,eAChCL,KAAKrI,KAAK2I,aAAeN,KAAKM,aAC9BN,KAAKrI,KAAKI,eAAiBiI,KAAKjI,eAChCiI,KAAKrI,KAAKyG,qBAAuB4B,KAAK5B,qBACtC4B,KAAKrI,KAAK+Z,2BAA6B1R,KAAK0R,2BAC5C1R,KAAKrI,KAAK8hB,wBAA0BzZ,KAAKyZ,wBACzCzZ,KAAKrI,KAAKowB,uBAAyB/nB,KAAK+nB,uBACxC/nB,KAAKrI,KAAKwV,MAAQnN,KAAKmN,MACvBnN,KAAKrI,KAAKqvB,OAAShnB,KAAKgnB,OACxBhnB,KAAKrI,KAAKqwB,aAAehoB,KAAKgoB,aAC9BhoB,KAAKrI,KAAKyI,gBAAkBJ,KAAKI,gBACjCJ,KAAKrI,KAAKuV,cAAgBlN,KAAKkN,cAC/BlN,KAAKrI,KAAK4I,cAAgBP,KAAKO,cAC/BP,KAAKrI,KAAKswB,YAAcjoB,KAAKioB,YAC7BjoB,KAAKrI,KAAKuwB,eAAiBloB,KAAKkoB,eAChCloB,KAAKrI,KAAK2H,oBAAsBU,KAAKV,oBACrCU,KAAKrI,KAAK0H,oBAAsBW,KAAKX,oBACrCW,KAAKrI,KAAKivB,gBAAkBiB,sBAAoB7nB,KAAK4mB,iBACrD5mB,KAAKrI,KAAKwwB,UAAYnoB,KAAKmoB,UAC3BnoB,KAAKrI,KAAKywB,UAAYpoB,KAAKooB,UAC3BpoB,KAAKrI,KAAKouB,eAAiB/lB,KAAK+lB,eAChC/lB,KAAKrI,KAAK0tB,QAAUwC,sBAAoB7nB,KAAKqoB,kBAC7CroB,KAAKrI,KAAK2wB,gBAAkBtoB,KAAKsoB,gBACjCtoB,KAAKrI,KAAK+tB,kBAAoB1lB,KAAK0lB,kBACnC1lB,KAAKrI,KAAKK,eAAiB6vB,sBAAoB7nB,KAAKhI,gBACpDgI,KAAKrI,KAAKoQ,kBAAoB8f,sBAAoB7nB,KAAK+H,mBACvD/H,KAAKrI,KAAK4G,aAAespB,sBAAoB7nB,KAAKzB,cAClDyB,KAAKrI,KAAKC,eAAiBiwB,sBAAoB7nB,KAAKpI,gBACpDoI,KAAKrI,KAAKmhB,WAAa+O,sBAAoB7nB,KAAK8Y,YAChD9Y,KAAKrI,KAAK4wB,iBAAmBV,sBAAoB7nB,KAAKuoB,kBACtDvoB,KAAKrI,KAAKwkB,UAAY0L,sBAAoB7nB,KAAKmc,WAC/Cnc,KAAKrI,KAAK2pB,OAASuG,sBAAoB7nB,KAAKshB,QAC5CthB,KAAKrI,KAAK6wB,iBAAmBxoB,KAAKwoB,iBAClCxoB,KAAKrI,KAAK2tB,iBAAmBuC,sBAAoB7nB,KAAKyoB,kBACtDzoB,KAAKrI,KAAK+wB,gBAAkBb,sBAAoB7nB,KAAK0oB,iBACrD1oB,KAAKrI,KAAKkE,aAAemE,KAAK2oB,sBAC9B3oB,KAAKrI,KAAKsb,YAAc4U,sBAAoB7nB,KAAKiT,aACjDjT,KAAKrI,KAAK6tB,eAAiBqC,sBAAoB7nB,KAAKwlB,gBACpDxlB,KAAKrI,KAAKqH,WAAagB,KAAKhB,WAC5BgB,KAAKrI,KAAK8Z,cAAgBzR,KAAKyR,cAC/BzR,KAAKrI,KAAKixB,SAAWf,sBAAoB7nB,KAAK4oB,UAC9C,IAAIC,EAAmB,yBACvB7oB,KAAKrI,KAAKkxB,GAAoB7oB,KAAK6oB,GAEnC7oB,KAAKrI,KAAkB,eAAI,GAE/BinB,EAAS/hB,UAAUisB,cAAgB,SAAU/lB,GACzC/C,KAAKiJ,QAAQ1Q,YAAU,OAAQwK,GAAOA,IAE1C6b,EAAS/hB,UAAUksB,eAAiB,WAChC,IAAI3hB,EAAQpH,KACZA,KAAKrI,KAAKqxB,aAAe,SAAUjmB,GAC1BrL,oBAAkBqL,EAAK3B,WAAY2B,EAAK3B,OAAOgH,UAAUC,SAAS,qBAChEtF,EAAK3B,OAAOgH,UAAUC,SAAS,uBAAyBtF,EAAK3B,OAAOgH,UAAUC,SAAS,kBAI9FjB,EAAM6B,Qd3rBQ,ec2rBqBlG,GAH/BA,EAAKiG,QAAS,GAKtBhJ,KAAKrI,KAAKgN,YAAc,SAAU5B,GAC9BqE,EAAMohB,iBAAmBphB,EAAMzP,KAAK6wB,iBACpCphB,EAAMyL,OAAOoW,EAAoBlmB,GACjCqE,EAAM6B,QAAQggB,EAAoBlmB,IAEtC/C,KAAKrI,KAAKkN,cAAgB,SAAU9B,GAChCqE,EAAMohB,iBAAmBphB,EAAMzP,KAAK6wB,iBACpCphB,EAAM6B,QAAQigB,EAAsBnmB,IAExC/C,KAAKrI,KAAKwxB,WAAa,SAAUpmB,GAC7BqE,EAAM8a,oBACN9a,EAAM6B,Qd1rBM,ac0rBqBlG,IAErC/C,KAAKrI,KAAKyxB,mBAAqB,SAAUrmB,GACrCqE,EAAMyL,OAAO,gBAAiB9P,GAC9BA,EAAOqE,EAAMoN,aAEjBxU,KAAKrI,KAAK0xB,iBAAmB,SAAUtmB,GACnCqE,EAAMyL,OAAO,cAAe9P,GAC5BA,EAAOqE,EAAMoN,aAEjBxU,KAAKrI,KAAK2xB,eAAiB,SAAUvmB,GACjCqE,EAAM6B,QAAQ0C,EAAuB5I,IAEzC/C,KAAKrI,KAAK4xB,kBAAoBvpB,KAAK8oB,cAAcjN,KAAK7b,MACtDA,KAAKrI,KAAK6xB,oBAAsBxpB,KAAK8oB,cAAcjN,KAAK7b,MACxDA,KAAKrI,KAAK8xB,yBAA2BzpB,KAAK8oB,cAAcjN,KAAK7b,MAC7DA,KAAKrI,KAAK+xB,uBAAyB1pB,KAAK8oB,cAAcjN,KAAK7b,MAC3DA,KAAKrI,KAAKgyB,kBAAoB3pB,KAAK8oB,cAAcjN,KAAK7b,MACtDA,KAAKrI,KAAKgO,kBAAoB3F,KAAK8oB,cAAcjN,KAAK7b,MACtDA,KAAKrI,KAAKiyB,eAAiB5pB,KAAK8oB,cAAcjN,KAAK7b,MACnDA,KAAKrI,KAAKkyB,eAAiB7pB,KAAK8oB,cAAcjN,KAAK7b,MACnDA,KAAKrI,KAAKmyB,gBAAkB9pB,KAAK8oB,cAAcjN,KAAK7b,MACpDA,KAAKrI,KAAKoyB,eAAiB/pB,KAAK8oB,cAAcjN,KAAK7b,MACnDA,KAAKrI,KAAKqyB,gBAAkBhqB,KAAK8oB,cAAcjN,KAAK7b,MACpDA,KAAKrI,KAAKsyB,aAAejqB,KAAK8oB,cAAcjN,KAAK7b,MACjDA,KAAKrI,KAAKuyB,eAAiBlqB,KAAK8oB,cAAcjN,KAAK7b,MACnDA,KAAKrI,KAAKwyB,YAAcnqB,KAAK8oB,cAAcjN,KAAK7b,MAChDA,KAAKrI,KAAKyyB,SAAWpqB,KAAK8oB,cAAcjN,KAAK7b,MAC7CA,KAAKrI,KAAK0yB,WAAarqB,KAAK8oB,cAAcjN,KAAK7b,MAC/CA,KAAKrI,KAAK2yB,gBAAkBtqB,KAAK8oB,cAAcjN,KAAK7b,MACpDA,KAAKrI,KAAK4yB,WAAavqB,KAAK8oB,cAAcjN,KAAK7b,MAC/CA,KAAKrI,KAAK6yB,YAAcxqB,KAAK8oB,cAAcjN,KAAK7b,MAChDA,KAAKrI,KAAK8yB,WAAazqB,KAAK8oB,cAAcjN,KAAK7b,MAC/CA,KAAKrI,KAAK+yB,YAAc,SAAU3nB,GAG9B,IAFA,IAAI+E,EAAOV,EAAMvI,UAEViJ,EAAK/E,EAAa,UAAGqF,UAAUC,SAAS,iBAC3CtF,EAAa,WAEjBqE,EAAM6B,QdzsBO,ccysBqBlG,IAEtC/C,KAAKrI,KAAK8qB,KAAO,WAEb,GADArb,EAAMzP,KAAKwS,GAAG,cAAe/C,EAAMkgB,gBAAiBlgB,IAC/C1P,oBAAkB0P,EAAMif,cAAe,CAExCjf,EAAMif,aAAejf,EAAMzP,KAAiB,aAAI,IAAIgzB,EAAWvjB,EAAMzP,QAG7EqI,KAAKrI,KAAKizB,cAAgB5qB,KAAK8oB,cAAcjN,KAAK7b,MAClDA,KAAKrI,KAAKkzB,cAAgB7qB,KAAK8oB,cAAcjN,KAAK7b,MAClDA,KAAK8qB,6BACL9qB,KAAK+qB,qBACL/qB,KAAKgrB,2BACLhrB,KAAKirB,yBACLjrB,KAAKkrB,qBACLlrB,KAAKmrB,sBAETvM,EAAS/hB,UAAUuuB,cAAgB,SAAUC,EAAYC,GACrD,IAAK,IAAIvxB,EAAI,EAAGA,EAAIsxB,EAAW3rB,MAAMnI,OAAQwC,IACrCuxB,EACAlb,YAAUib,EAAW3rB,MAAM3F,IAAK,iBAGhCsT,eAAage,EAAW3rB,MAAM3F,IAAK,kBAI/C6kB,EAAS/hB,UAAU0uB,cAAgB,WAC/B,MAAoB,SAAhBvrB,KAAKgnB,SAA8D,IAAzChnB,KAAKgnB,OAAOpf,WAAWpJ,QAAQ,MAOjEogB,EAAS/hB,UAAUiuB,2BAA6B,WAC5C,IAAI1jB,EAAQpH,KACZA,KAAKrI,KAAK6zB,UAAY,SAAUzoB,GAK5B,GAJAqE,EAAMqkB,oBACNrkB,EAAM8a,oBACN9a,EAAMskB,aAAatkB,EAAMvI,WACzBuI,EAAMyL,OAAO,eAAgB9P,GACzBtM,EAAa2Q,KAAW5N,EAAU4N,KAAWA,EAAMoO,gBAAiB,CACpE,IAAImW,EAAMpzB,YAAU,sBAAuB6O,GAAO3J,OAAO,SAAUC,GAC/D,MAAoC,OAA7BA,EAAEsY,YAAYC,aACtB1e,OACH2e,WAAS,gCAAiCyV,EAAM,GAAIvkB,GAExD,GAAIA,EAAMmkB,iBAAmBnkB,EAAMnO,cAG/B,IAAK,IAFD6O,EAAOV,EAAMsQ,kBAAkB5P,KAC/B8jB,KAAetjB,MAAMvL,KAAK+K,GACrBzQ,EAAIu0B,EAAUr0B,OAAS,EAAGF,EAAI,EAAGA,IACtC,IAAKiD,EAASsxB,EAAUv0B,IAAK,CACrBu0B,EAAUv0B,GAAG6T,oBACb9D,EAAMgkB,cAAcQ,EAAUv0B,IAAI,GAEtC,MAIZ+P,EAAM6B,QdxzBK,YcwzBqBlG,GAChCqE,EAAMnO,eAAgB,GAG1B,IAAI+K,EAAWhE,KACfA,KAAKrI,KAAK6M,gBAAkB,SAAUzB,GAClC,IACIlD,EAActH,YAAU,SAAUwK,GACtC,IAAMtM,EAAauN,KAAcxK,EAAUwK,IAAc7M,EAAgB6I,QAA0B,SAAhBH,EAC/EmE,EAAS6O,OAAO,oBAAqB9P,GACrCA,EAAQiB,EAAoB,iBAE3B,GAAiC,IAA7BA,EAASxG,SAASjG,QAAgBiC,EAAUwK,IAAaA,EAASrN,sBAAsBC,cAAa,CAC1G,IAAI6C,EAAKuK,EAASrN,WAClBqN,EAASwiB,WAAWxR,kBAAkBvb,EAAG9C,WAAW8E,MACpDsH,EAAKgR,OAAS/P,EAASrM,KAAKhB,WAAqB,WAAE8E,KAAOuI,EAASxG,SAiBvE,GAfK/G,EAAauN,IAAc7M,EAAgB6I,OAAUtI,oBAAkBsM,EAASrN,cAC7EqJ,KAAKya,YACLvE,WAAS,cAAc,EAAMnT,GAEjCiB,EAAS6O,OAAO,gBAAiB9P,IAGrC3G,SAAO2G,EAAMiB,EAASwQ,aAClBxQ,EAAS1E,sBACTyD,EAAKgR,OAAShR,EAAKgR,OAAOzL,SAE1BtE,EAAS/K,gBACT+G,KAAK2Z,cAAcsF,sBAAwBjb,EAASib,wBAGnDjf,KAAKya,WAAY,CAClB,IAAIoR,EAAoB,IAAIC,WAI5B,OAHA9nB,EAASiF,QAAQkH,EAAwBpN,EAAM,SAAUgpB,GACrDF,EAAkBG,QAAQD,KAEvBF,IAGf7rB,KAAKrI,KAAKkL,IAAM,SAAUG,EAAMD,GACxBqE,EAAMif,cACNjf,EAAMif,aAAaxjB,IAAIG,EAAMD,KAIzC6b,EAAS/hB,UAAUsuB,mBAAqB,WACpC,IAAI/jB,EAAQpH,KACZA,KAAKrI,KAAKmN,aAAe,SAAU/B,GAC/B,KAAKA,EAAKE,KAAK2Q,KAAOxM,EAAMzP,KAAKgc,QAAQC,GAAK,iBAA6C,IAA3BxM,EAAMme,kBACjExiB,EAAKE,KAAK2Q,KAAOxM,EAAMzP,KAAKgc,QAAQC,GAAK,eAAyC,IAAzBxM,EAAMqe,gBAC/D1iB,EAAKE,KAAK2Q,KAAOxM,EAAMzP,KAAKgc,QAAQC,GAAK,eAA2C,IAA3BxM,EAAMme,kBAFpE,CAKA,IAAI0G,EAAkB,IAAIH,WAO1B,OANA1kB,EAAM6B,QAAQijB,EAAqBnpB,EAAM,SAAUopB,GAC1CA,EAAYnjB,QACb5B,EAAMyL,OAAOqZ,EAAqBnpB,GAEtCkpB,EAAgBD,QAAQG,KAErBF,IAEXjsB,KAAKrI,KAAKy0B,cAAgB,SAAUrpB,GAChC,IAAIkpB,EAAkB,IAAIH,WAI1B,OAHA1kB,EAAM6B,QAAQ1Q,YAAU,OAAQwK,GAAOA,EAAM,SAAUspB,GACnDJ,EAAgBD,QAAQK,KAErBJ,GAEXjsB,KAAKrI,KAAK8N,UAAY,SAAU1C,GAC5B,GAAKrL,oBAAkBqL,EAAKpE,OAAQoE,EAAKpE,IAAIyJ,UAAUC,SAAS,gBAAhE,CAIA,IAAI4jB,EAAkB,IAAIH,WAI1B,OAHA1kB,EAAM6B,QAAQqjB,GAAkBvpB,EAAM,SAAUwpB,GAC5CN,EAAgBD,QAAQO,KAErBN,EAPHlpB,EAAKiG,QAAS,IAU1B4V,EAAS/hB,UAAUouB,uBAAyB,WACxC,IAAI7jB,EAAQpH,KACZA,KAAKrI,KAAKiM,gBAAkB,SAAUb,GAC9BqE,EAAMolB,iBACNplB,EAAMolB,iBAAkB,EACxBplB,EAAMzP,KAAKhB,YAAeod,OAAQ3M,EAAM5J,SAAU6Q,MAAOhQ,WAAS,QAAS+I,EAAMzP,KAAKhB,cAGtFyQ,EAAM6B,QAAQwjB,EAAwB1pB,IAG9C/C,KAAKrI,KAAKiO,SAAW,SAAU7C,GAC3B,GAAIqE,EAAMzP,KAAK+0B,oBAAqB,CAChC,IAAIC,EAAevlB,EAAMzP,KAAKi1B,kBAAkBC,YAAYlZ,QAAQkE,uBAAuB,cAAc,IACpGngB,oBAAkBi1B,IAAiBA,EAAa/Y,KAAOxM,EAAMuM,QAAQC,GAAK,6BAC3E7Q,EAAKiG,QAAS,GAGtB,IAAIijB,EAAkB,IAAIH,WAO1B,OANA1kB,EAAM6B,QAAQ6jB,GAAiB/pB,EAAM,SAAUgqB,GACtCA,EAAa/jB,QACd5B,EAAMyL,OAAOia,GAAiBC,GAElCd,EAAgBD,QAAQe,KAErBd,GAEXjsB,KAAKrI,KAAKkO,UAAY,SAAU9C,GAC5BqE,EAAM6B,QAAQ+jB,GAAkBjqB,GAChCqE,EAAMyL,OAAOma,GAAkBjqB,IAEnC/C,KAAKrI,KAAKmO,SAAW,SAAU/C,GAC3B,IACIkqB,EAAU,IAAInB,WAGlB,OAFA/oB,EAAS,QAAIkqB,EACb7lB,EAAMyL,OAAOqa,GAAiBnqB,GACvBkqB,GAEXjtB,KAAKrI,KAAKsO,SAAW,SAAUlD,GAC3BqE,EAAM6B,QAAQkkB,GAAiBpqB,GAC/BqE,EAAMyL,OAAOsa,GAAiBpqB,IAElC/C,KAAKrI,KAAKyO,gBAAkB,SAAUrD,GAClCqE,EAAM6B,QAAQmkB,GAAwBrqB,GACtCqE,EAAMyL,OAAOua,GAAwBrqB,IAEzC/C,KAAKrI,KAAKwO,eAAiB,SAAUpD,GACjCqE,EAAM6B,QAAQokB,GAAuBtqB,GACrCqE,EAAMyL,OAAOwa,GAAuBtqB,IAExC/C,KAAKrI,KAAKoO,YAAc,SAAUhD,GAC9BqE,EAAM6B,QAAQqkB,GAAoBvqB,GAClCqE,EAAMyL,OAAOya,GAAoBvqB,IAErC/C,KAAKrI,KAAKuO,kBAAoB,SAAUnD,GACpCqE,EAAM6B,QAAQskB,GAA0BxqB,GACxCqE,EAAMyL,OAAO0a,GAA0BxqB,IAE3C/C,KAAKrI,KAAKqO,YAAc,SAAUjD,GACE,SAA5BqE,EAAMvL,aAAaC,MACnBsL,EAAM6B,QAAQukB,GAAoBzqB,GAEtCqE,EAAMyL,OAAO2a,GAAoBzqB,KAGzC6b,EAAS/hB,UAAU4uB,kBAAoB,WACnCzrB,KAAKytB,yBAET7O,EAAS/hB,UAAU6qB,iBAAmB,WAClC,IAAI/wB,EAAa,aAIjB,GAAIqJ,KAAKrJ,YAAcQ,EAAgB6I,MAAO,CAC1C,IAAIvB,EAAOuB,KAAKxC,SACZkwB,EAAYrvB,WAAS,QAAS2B,KAAKrJ,YACvCqJ,KAAKrI,KAAKhB,YAAeod,OAAQtV,EAAM4P,MAAOqf,QAG9C1tB,KAAKrI,KAAKhB,WAAeqJ,KAAKrJ,sBAAsBC,cAChC,IAAIA,cAAYoJ,KAAKrJ,WAAWA,WAAYqJ,KAAKrJ,WAAWg3B,aAAc3tB,KAAKrJ,WAAWE,SAA1GmJ,KAAKxC,SAEb,GAAIwC,KAAKrJ,sBAAsBC,gBAAgBoJ,KAAKrJ,WAAWA,WAAW4tB,SAAWvkB,KAAKrJ,WAAW+C,OAAQ,CACzGsG,KAAKrI,KAAKhB,WAAWA,GAAY8E,KAAO9B,EAAYqG,KAAKrJ,WAAWA,GAAY8E,MAChFuE,KAAKrI,KAAKhB,WAAgB,MAAIqJ,KAAKrJ,WAAW+C,MAE9C,IAAIuX,EAAUjR,KACTtI,oBAAkBsI,KAAKrI,KAAKhB,WAAgB,QAC7CqJ,KAAKrI,KAAKhB,WAAgB,MAAEkf,KAAK,SAAUnY,GACvC,IAAIjE,EAAKwX,EAAQtZ,KAAKhB,WACtB8C,EAAG9C,GAAY4tB,SAAU,EACzB9qB,EAAkB,iBAAI,EACtBA,EAAG9C,GAAY8E,KAAOiC,EAAEqW,OACxBta,EAAU,QAAI,IAAIm0B,kBAKlChP,EAAS/hB,UAAUmuB,yBAA2B,WAC1C,IAAI5jB,EAAQpH,KACZA,KAAKrI,KAAK8M,YAAc,SAAU1B,GACL,YAArBA,EAAKlD,aAA6BkD,EAAK3B,QAAU2B,EAAK3B,OAAO8hB,eAC7DngB,EAAK3B,OAAO8hB,cAAc9a,UAAUC,SAAS,yBAC7CtF,EAAKiG,QAAS,GAGE,YADFzQ,YAAU,cAAewK,IAEvCqE,EAAMyL,OAAO,qBAEjBzL,EAAMyL,OAAO,eAAiBhY,WAAYkI,IACrCtM,EAAa2Q,IAAW1P,oBAAkB0P,EAAM8G,eAAkB/W,EAAgBiQ,IAClC,IAA7CA,EAAMzP,KAAKK,eAAeV,QAAQC,QAAyD,IAAzC6P,EAAMzP,KAAKC,eAAeC,IAAIN,SACpF6P,EAAMyL,OAAO,gBAAkBrV,SAAU4J,EAAMzP,KAAKhB,aACpDyQ,EAAMzP,KAAK2mB,eAAgB3nB,WAAYyQ,EAAMoN,YAAYT,SAAU,IAEvE,IAAIkY,EAAkB,IAAIH,WAO1B,OANA1kB,EAAM6B,QAAQ4kB,EAAoB9qB,EAAM,SAAU2X,GACzCA,EAAW1R,QACZ5B,EAAMyL,OAAOyZ,GAAkB5R,GAEnCuR,EAAgBD,QAAQtR,KAErBuR,GAEXjsB,KAAKrI,KAAK+M,eAAiB,SAAU3B,GACjCqE,EAAMyL,OAAO,iBAAkB9P,GAC/BqE,EAAM8a,oBACN9a,EAAM0mB,sBACmB,YAArB/qB,EAAKlD,aACLuH,EAAMyL,OAAO,qBAEjBzL,EAAMyL,OAAO,kBAAoBhY,WAAYkI,IACpB,QAArBA,EAAKlD,aAAgE,QAAtCuH,EAAMvL,aAAaQ,gBAAkE,WAAtC+K,EAAMvL,aAAaQ,gBACjG+K,EAAMyL,OAAOkb,GAAiBhrB,GAET,cAArBA,EAAKlD,aACLuH,EAAMyL,OAAO6J,GAAkB3Z,GAEnCqE,EAAMyL,OAAO,oBAAqB9P,GACT,SAArBA,EAAKlD,aAA0BuH,EAAM0R,WAAW3a,IAAI,SAAU6vB,GAAM,OAA+B,IAAxBA,EAAGC,mBAA8B12B,QAC5G6P,EAAMzP,KAAKu2B,UAEf9mB,EAAM6B,QAAQ4P,EAAuB9V,KAG7C6b,EAAS/hB,UAAUkuB,mBAAqB,WACpC,IAAI3jB,EAAQpH,KAERgE,EAAWhE,KACfA,KAAKrI,KAAKgO,kBAAoB,SAAU5C,GACpCqE,EAAM6B,QAAQklB,GAA0BprB,GACxCqE,EAAMyL,OAAOsb,GAA0BprB,IAE3C/C,KAAKrI,KAAKkP,gBAAkB,SAAU9D,GAClCqE,EAAMyL,OAAO,kBAAmB9P,GAChCqE,EAAM6B,QAAQmlB,GAAwBrrB,IAE1C/C,KAAKrI,KAAK2M,aAAe,SAAUvB,GAC3BrL,oBAAkBsI,KAAKya,YACvBvE,WAAS,cAAc,EAAOnT,GAG9BmT,WAAS,aAAclW,KAAKya,WAAY1X,GAE5CiB,EAASzE,aAAaqR,YAAY7N,IAEtC/C,KAAKrI,KAAK4M,cAAgB,SAAUxB,GAC5BrL,oBAAkBsI,KAAKya,YACvBvE,WAAS,cAAc,EAAOnT,GAG9BmT,WAAS,aAAclW,KAAKya,WAAY1X,GAE5CiB,EAASzE,aAAaC,WAAWuD,IAErC/C,KAAKrI,KAAK4N,iBAAmB,SAAUxC,GACnCqE,EAAMyL,OAAOwb,GAAyBtrB,GACtCqE,EAAM6B,QAAQolB,GAAyBtrB,IAE3C/C,KAAKrI,KAAK2N,gBAAkB,SAAUvC,GAClCqE,EAAMyL,OAAOyb,EAAwBvrB,GACrCqE,EAAM6B,QAAQqlB,EAAwBvrB,IAE1C/C,KAAKrI,KAAK4M,cAAgB,SAAUxB,GAChCqE,EAAM7H,aAAaC,WAAWuD,KAGtC6b,EAAS/hB,UAAUquB,mBAAqB,WACpC,IAAI9jB,EAAQpH,KACZA,KAAKrI,KAAKmP,mBAAqB,SAAU/D,GACrCqE,EAAM6B,QAAQslB,GAA2BxrB,IAE7C/C,KAAKrI,KAAK62B,aAAe,SAAUzrB,GAC/BqE,EAAM6B,Qd39BQ,ec29BqBlG,IAEvC/C,KAAKrI,KAAK82B,QAAU,SAAU1rB,GACtBqE,EAAMzP,KAAK+2B,OACX3rB,EAAKiG,QAAS,GAGlB5B,EAAMyL,OAAO8b,GAAmB5rB,GAChCqE,EAAM6B,Qdz+BG,Ucy+BqBlG,KAElC/C,KAAKrI,KAAKi3B,QAAU,SAAU7rB,GACtBqE,EAAMzP,KAAK+2B,OACX3rB,EAAKiG,QAAS,GAGlB5B,EAAMyL,OAAOgc,GAAmB9rB,GAChCA,EAAKiG,QAAS,KAStB4V,EAAS/hB,UAAU8pB,SAAW,WAC1B3mB,KAAKynB,qBACLznB,KAAK+oB,iBACL7S,WAAS,qBAAsBlW,KAAK8uB,mBAAoB9uB,KAAKrI,MAE7Due,WAAS,mBAAoBlW,KAAQ,iBAAGA,KAAKrI,OAQjDinB,EAAS/hB,UAAU4pB,oBAAsB,WACrC,IAAKzmB,KAAK1I,QAAQC,SAAYyI,KAAKwmB,WAAWzR,YAAc1c,OAAOC,KAAK0H,KAAKrJ,YAAYY,OAAS,CAC9FyI,KAAK1I,WAOL,IAAK,IAHDoB,EAASsH,KAAKrJ,WAAW,GAEzB2B,EAAOD,OAAOC,KAAKI,GACdrB,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,KACuC,KAA/D2I,KAAK5C,aAAc4C,KAAK/C,iBAAiBuB,QAAQlG,EAAKjB,KACvD2I,KAAK1I,QAAQkB,KAAKF,EAAKjB,MAKvCunB,EAAS/hB,UAAU8rB,oBAAsB,WACrC,IAAIzoB,KAaJ,OAXAA,EAAK0lB,YAAc5lB,KAAKnE,aAAa+pB,YACrC1lB,EAAKD,aAAeD,KAAKnE,aAAaoE,aACtCC,EAAK2lB,cAAgB7lB,KAAKnE,aAAagqB,cACvC3lB,EAAK7D,eAAsD,WAArC2D,KAAKnE,aAAaQ,eAA8B,SAAW,MACjF6D,EAAK6uB,oBAAsB/uB,KAAKnE,aAAakzB,oBAC7C7uB,EAAK8uB,kBAAoBhvB,KAAKnE,aAAamzB,kBAC3C9uB,EAAKmT,SAAWrT,KAAKnE,aAAawX,SAClCnT,EAAK+uB,wBAA0BjvB,KAAKnE,aAAaozB,wBACjD/uB,EAAKgvB,iBAAmBlvB,KAAKnE,aAAaqzB,iBAC1ChvB,EAAS,KAAIF,KAAKnE,aAAiB,KACnCqE,EAAKivB,OAASnvB,KAAKnE,aAAaszB,OACxBnvB,KAAKnE,aAAaC,MACtB,IAAK,SAGL,IAAK,QACDoE,EAAKpE,KAAOkE,KAAKnE,aAAaC,KAC9B,MACJ,IAAK,MACDoE,EAAKpE,KAAO,SACZ,MACJ,IAAK,OACDoE,EAAKpE,KAAO,SACZoE,EAAK8uB,mBAAoB,EAGjC,OAAO9uB,GAQX0e,EAAS/hB,UAAU4rB,eAAiB,WAChC,GAAIzoB,KAAKslB,iBAAkB,CAEvB,IAAK,IADDzO,KACKxf,EAAI,EAAGA,EAAI2I,KAAKslB,iBAAiB/tB,OAAQF,IAC9C,OAAQ2I,KAAKslB,iBAAiBjuB,IAC1B,IAAK,SACL,KAAKulB,mBAAiBmE,OAClBlK,EAAMre,MAAO42B,KAAMpvB,KAAKohB,KAAKiO,YAAY,UACrCjuB,OAAQ,aAAcwS,GAAI5T,KAAK2T,QAAQC,GAAK,4BAC5CiD,QAAUuY,KAAMpvB,KAAKohB,KAAKiO,YAAY,SAAUzb,GAAI,UAAawb,KAAMpvB,KAAKohB,KAAKiO,YAAY,SAAUzb,GAAI,UAAawb,KAAMpvB,KAAKohB,KAAKiO,YAAY,SAAUzb,GAAI,YACtK,MACJ,QACIiD,EAAMre,KAAKwH,KAAKslB,iBAAiBjuB,IAG7C,OAAOwf,EAGP,OAAO,MASf+H,EAAS/hB,UAAUwrB,eAAiB,WAChC,GAAIroB,KAAKqlB,QAAS,CAGd,IAAK,IAFDxO,KACAyY,OAAc,EACTj4B,EAAI,EAAGA,EAAI2I,KAAKqlB,QAAQ9tB,OAAQF,IACrC,OAAQ2I,KAAKqlB,QAAQhuB,IACjB,IAAK,SACL,KAAKslB,cAAY4S,OACb1Y,EAAMre,KAAK,UACX,MACJ,IAAK,QACL,KAAKmkB,cAAYhN,MACbkH,EAAMre,KAAK,SACX,MACJ,IAAK,YACL,KAAKmkB,cAAYqE,UACbsO,EAActvB,KAAKohB,KAAKiO,YAAY,aACpCxY,EAAMre,MAAO42B,KAAME,EAAaA,YAAaA,EACzCE,WAAY,WAAY5b,GAAI5T,KAAK2T,QAAQC,GAAK,2BAClD,MACJ,IAAK,cACL,KAAK+I,cAAYsE,YACbqO,EAActvB,KAAKohB,KAAKiO,YAAY,eACpCxY,EAAMre,MAAO42B,KAAME,EACfA,YAAaA,EAAaE,WAAY,aAAc5b,GAAI5T,KAAK2T,QAAQC,GAAK,6BAE9E,MACJ,IAAK,SACL,KAAK+I,cAAYuE,UACboO,EAActvB,KAAKohB,KAAKiO,YAAY,aACpCxY,EAAMre,MACF42B,KAAME,EAAaA,YAAaA,EAChCE,WAAY,WAAY5b,GAAI5T,KAAK2T,QAAQC,GAAK,wBAElD,MACJ,IAAK,UACL,KAAK+I,cAAYwE,WACbmO,EAActvB,KAAKohB,KAAKiO,YAAY,cACpCxY,EAAMre,MACF42B,KAAME,EAAaA,YAAaA,EAChCE,WAAY,YAAa5b,GAAI5T,KAAK2T,QAAQC,GAAK,yBAEnD,MACJ,QACIiD,EAAMre,KAAKwH,KAAKqlB,QAAQhuB,IAGpC,OAAOwf,EAGP,OAAO,MAGf+H,EAAS/hB,UAAUsoB,eAAiB,SAAU7tB,EAASm4B,EAAoBv1B,QAC5C,IAAvBu1B,IAAiCA,GAAqB,QAC5C,IAAVv1B,IAAoBA,EAAQ,GAChC,IAAIyF,EAASrI,EAETm4B,IACAzvB,KAAK6jB,gBAET,IAAI6L,EACAC,EACJz1B,EAAkB,IAAVA,GAAe,EAAIA,EAE3B,IAAK,IADD01B,KACKv4B,EAAI,EAAGA,EAAIsI,EAAOpI,OAAQF,IAAK,CACpC6C,GAAgB,EAChB,IAAIgZ,EAAalT,KAAKrI,KAAK4Z,eAAe5R,EAAOtI,GAAG2U,KAGpD,GAFA2jB,EAAazc,MACbwc,KAC+B,iBAApB1vB,KAAK1I,QAAQD,GACpBs4B,EAAW/c,MAAQ8c,EAAe9c,MAAQ5S,KAAK1I,QAAQD,QAGvD,IAAK,IAAIw4B,EAAK,EAAGC,EAAKz3B,OAAOC,KAAKqH,EAAOtI,IAAKw4B,EAAKC,EAAGv4B,OAAQs4B,IAAM,CAChE,IAAIxR,EAAOyR,EAAGD,GACV31B,IAAU8F,KAAKZ,iBAA4B,aAATif,EAClCqR,EAAerR,GAAQ1e,EAAOtI,GAAGgnB,GAEnB,YAATA,GAAuB3mB,oBAAkBiI,EAAOtI,GAAGgnB,IAKxDsR,EAAWtR,GAAQqR,EAAerR,GAAQ1e,EAAOtI,GAAGgnB,IAJpDsR,EAAWtR,GAAQre,KAAKmlB,eAAexlB,EAAOtI,GAAGgnB,IAAO,EAAOnkB,GAC/Dw1B,EAAerR,GAAQ1e,EAAOtI,GAAGgnB,IAOxCqR,EAA4B,SAC7B1vB,KAAK6jB,YAAYrrB,KAAK,IAAIsH,EAAO4vB,IAErCE,EAAqBp3B,KAAKm3B,GAE9B,OAAOC,GASXhR,EAAS/hB,UAAUkzB,kBAAoB,SAAUC,GAG7C,IAAK,IADDC,GAAiB,EACZJ,EAAK,EAAGK,EAFA73B,OAAOC,KAAK03B,GAEeH,EAAKK,EAAa34B,OAAQs4B,IAAM,CACxE,IAAIxR,EAAO6R,EAAaL,GACxB,OAAQxR,GACJ,IAAK,UACDre,KAAKrI,KAAKL,QAAU0I,KAAKmlB,eAAenlB,KAAK1I,SAC7C,MACJ,IAAK,kBACD0I,KAAKrI,KAAKw4B,iBACV,MACJ,IAAK,cACDnwB,KAAKrI,KAAKkZ,YAAc7Q,KAAK6Q,YAC7B,MACJ,IAAK,eACD7Q,KAAKrI,KAAKmZ,aAAe+W,sBAAoB7nB,KAAK8Q,cAClDmf,GAAiB,EACjB,MACJ,IAAK,uBACDjwB,KAAKrI,KAAKyG,qBAAuB4B,KAAK5B,qBACtC,MACJ,IAAK,6BACD4B,KAAKrI,KAAK+Z,2BAA6B1R,KAAK0R,2BAC5C,MACJ,IAAK,UACD1R,KAAKrI,KAAK0tB,QAAUrlB,KAAKqoB,iBACzB,MACJ,IAAK,iBACDroB,KAAKrI,KAAKouB,eAAiB/lB,KAAK+lB,eAChC,MACJ,IAAK,oBACD/lB,KAAKrI,KAAKoQ,kBAAoB8f,sBAAoB7nB,KAAK+H,mBACvD,MACJ,IAAK,eACD/H,KAAKrI,KAAK2I,aAAeN,KAAKM,aAC9B,MACJ,IAAK,oBACDN,KAAKrI,KAAKy4B,kBAAoBpwB,KAAKowB,kBACnC,MACJ,IAAK,eACDpwB,KAAKrI,KAAK4G,aAAespB,sBAAoB7nB,KAAKzB,cAClD,MACJ,IAAK,iBACDyB,KAAKrI,KAAKC,eAAiBiwB,sBAAoB7nB,KAAKpI,gBACpD,MACJ,IAAK,iBACDoI,KAAKrI,KAAKI,eAAiBiI,KAAKjI,eAChC,MACJ,IAAK,iBACIiI,KAAK/G,gBACN+G,KAAKrI,KAAKK,eAAiB6vB,sBAAoB7nB,KAAKhI,iBAExD,MACJ,IAAK,iBACDgI,KAAKrI,KAAK0I,eAAiBL,KAAKK,eAChC,MACJ,IAAK,sBACDL,KAAKrI,KAAK0H,oBAAsBW,KAAKX,oBACrC,MACJ,IAAK,aACDW,KAAKrI,KAAKmhB,WAAa+O,sBAAoB7nB,KAAK8Y,YAChD,MACJ,IAAK,0BACD9Y,KAAKrI,KAAK8hB,wBAA0BzZ,KAAKyZ,wBACzC,MACJ,IAAK,aAID,GAHAzZ,KAAK+a,cAAiB/a,KAAKrJ,sBAAsBC,iBAAkBc,oBAAkBsI,KAAKrJ,WAAW+C,QAC9FsG,KAAKrJ,WAAWE,mBAAmB2tB,oBAC1CxkB,KAAK0mB,gBAAgB1mB,KAAKrJ,YACtBqJ,KAAK+a,YAAa,CAClB,GAAI5jB,EAAgB6I,MAAO,CACvB,IAAIqO,EAAQhQ,WAAS,QAAS2B,KAAKrJ,YACnCqJ,KAAKrI,KAAKhB,YAAeod,OAAQ/T,KAAKxC,SAAU6Q,MAAOA,OAEtD,CACD,IAAI5P,EAAOuB,KAAKrJ,WAChBqJ,KAAKrI,KAAKhB,WAAe8H,aAAgB7H,cACrB,IAAIA,cAAY6H,EAAK9H,WAAY8H,EAAKkvB,aAAclvB,EAAK5H,SAAzEmJ,KAAKxC,SAETwC,KAAK5B,uBACL4B,KAAKrI,KAAKgiB,cAAc0W,qBAAsB,QAIlDrwB,KAAK0nB,mBACD1nB,KAAK5B,uBACL4B,KAAKrI,KAAKgiB,cAAcnP,sBACxBxK,KAAKrI,KAAKgiB,cAAc2W,cAAc,MACtCtwB,KAAKrI,KAAKgiB,cAAc4W,eAGhC,MACJ,IAAK,QACDvwB,KAAKrI,KAAKsd,MAAQjV,KAAKiV,MACvB,MACJ,IAAK,oBACG+a,EAAQ3R,GACRre,KAAKgjB,cAGLhjB,KAAK+iB,YAET,MACJ,IAAK,qBACD/iB,KAAKrI,KAAKu2B,UACV,MACJ,IAAK,YACDluB,KAAKrI,KAAKywB,UAAYpoB,KAAKooB,UAC3B,MACJ,IAAK,cACDpoB,KAAKrI,KAAKsb,YAAc4U,sBAAoB7nB,KAAKiT,aACjD,MACJ,IAAK,aACDjT,KAAKrI,KAAKqH,WAAagB,KAAKhB,WAC5B,MACJ,IAAK,gBACDgB,KAAKrI,KAAK8Z,cAAgBzR,KAAKyR,cAC/B,MACJ,IAAK,YACDzR,KAAKrI,KAAKwwB,UAAYnoB,KAAKmoB,UAC3B,MACJ,IAAK,SACIzwB,oBAAkBsI,KAAKgnB,SAAoC,iBAAjBhnB,KAAW,SAAgD,IAA9BA,KAAKgnB,OAAOxoB,QAAQ,OAC5FwB,KAAK2T,QAAQnZ,MAAMwsB,OAAShnB,KAAKgnB,QAErChnB,KAAKrI,KAAKqvB,OAAShnB,KAAKgnB,OACxB,MACJ,IAAK,QACItvB,oBAAkBsI,KAAKmN,QAAkC,iBAAhBnN,KAAU,QAA+C,IAA7BA,KAAKmN,MAAM3O,QAAQ,OACzFwB,KAAK2T,QAAQnZ,MAAM2S,MAAQnN,KAAKmN,OAEpCnN,KAAKrI,KAAKwV,MAAQnN,KAAKmN,MACvB,MACJ,IAAK,SACDnN,KAAKrI,KAAK2pB,OAASthB,KAAKshB,OACxB,MACJ,IAAK,mBACDthB,KAAKrI,KAAK6wB,iBAAmBxoB,KAAKwoB,iBAClC,MACJ,IAAK,eACDxoB,KAAKrI,KAAKqwB,aAAehoB,KAAKgoB,aAC9B,MACJ,IAAK,cACDhoB,KAAKrI,KAAKswB,YAAcjoB,KAAKioB,YAC7B,MACJ,IAAK,iBACDjoB,KAAKrI,KAAKuwB,eAAiBloB,KAAKkoB,eAChC,MACJ,IAAK,sBACDloB,KAAKrI,KAAK2H,oBAAsBU,KAAKV,oBACrC,MACJ,IAAK,mBACDU,KAAKrI,KAAK4tB,iBAAmBvlB,KAAKulB,iBAClC,MACJ,IAAK,iBACDvlB,KAAKrI,KAAK8tB,eAAiBzlB,KAAKylB,eAChC,MACJ,IAAK,YACDzlB,KAAKrI,KAAKgwB,UAAY3nB,KAAK2nB,UAC3B,MACJ,IAAK,kBACD3nB,KAAKrI,KAAKyI,gBAAkBJ,KAAKI,gBACjC,MACJ,IAAK,gBACDJ,KAAKrI,KAAK4I,cAAgBP,KAAKO,cAC/B,MACJ,IAAK,mBACDP,KAAKrI,KAAK4wB,iBAAmBV,sBAAoB7nB,KAAKuoB,kBACtD,MACJ,IAAK,gBACDvoB,KAAKrI,KAAKuV,cAAgB2a,sBAAoB7nB,KAAKkN,eACnDlN,KAAKrI,KAAKu2B,UACV,MACJ,IAAK,mBACDluB,KAAKrI,KAAK2tB,iBAAmBtlB,KAAKyoB,iBAClC,MACJ,IAAK,oBACDzoB,KAAKrI,KAAK+tB,kBAAoB1lB,KAAK0lB,kBACnC,MACJ,IAAK,iBACD1lB,KAAKrI,KAAK6tB,eAAiBqC,sBAAoB7nB,KAAKwlB,gBACpD,MACJ,IAAK,kBACDxlB,KAAKrI,KAAK+wB,gBAAkBb,sBAAoB7nB,KAAK0oB,iBACrD,MACJ,IAAK,eACG1oB,KAAKrI,KAAK+2B,QAA0C,WAAhC1uB,KAAKrI,KAAKkE,aAAaC,MAAqBk0B,EAAQ3R,GAAMviB,OACtD,SAAvBk0B,EAAQ3R,GAAMviB,MAA0C,QAAvBk0B,EAAQ3R,GAAMviB,OAChDkE,KAAKrI,KAAK64B,YAEdxwB,KAAKrI,KAAKkE,aAAemE,KAAK2oB,sBAGlCsH,GACAjwB,KAAKrI,KAAKu2B,YAUtBtP,EAAS/hB,UAAU+M,QAAU,WACzB,IAAI6mB,EAAkBzwB,KAAK2T,QAC3B,GAAK8c,EAAL,CAGA,IAAIC,KAAmBD,EAAgB3lB,cAAc,mBACjD2lB,EAAgB3lB,cAAc,mBAC9B4lB,GACA1wB,KAAKmmB,eAETnmB,KAAK2wB,iBACDD,GACA5uB,EAAOjF,UAAU+M,QAAQ7M,KAAKiD,MAE9BA,KAAKrI,MACLqI,KAAKrI,KAAKiS,UAEV5J,KAAKwmB,YACLxmB,KAAKwmB,WAAW5c,UAMpB,IAAK,IAJDsb,GAAW,aAAc,aAAc,eAAgB,eAAgB,cAAe,kBACtF,oBAAqB,kBAAmB,gBAAiB,gBAAiB,gBAAiB,eAC3F,cAAe,iBAAkB,mBAAoB,oBAAqB,aAAc,sBACxF,kBAAmB,YAAa,uBAAwB,gBACnD7tB,EAAI,EAAGA,EAAI6tB,EAAQ3tB,OAAQF,IAC5B2I,KAAKklB,EAAQ7tB,MACb2I,KAAKklB,EAAQ7tB,IAAM,MAG3B2I,KAAK2T,QAAQlG,UAAY,GACzBzN,KAAKrI,KAAO,OAShBinB,EAAS/hB,UAAU+zB,SAAW,WACtBl5B,oBAAkBsI,KAAKrI,QAG3BmK,EAAOjF,UAAU+zB,SAAS7zB,KAAKiD,MAC/BA,KAAKrI,KAAKi5B,aAQdhS,EAAS/hB,UAAUg0B,eAAiB,WAWhC,IAAK,IAVDC,GAAa,eAAgB,eAC7B,iBAAkB,UAAW,iBAAkB,oBAC/CC,GACAjgB,cAAe,WAAY,YAAa,eAAgB,oBAAqB,oBAAqB,aAClG9Y,gBAAiB,OAAQ,OAAQ,sBAAuB,qBAAsB,eAAgB,iBAC9FJ,gBAAiB,SAAU,WAAY,cACvC2G,gBAAkBjH,WAAakxB,qBAI1BnxB,EAAI,EAAGA,EAAIy5B,EAAUv5B,OAAQF,IAElC,IAAK,IADD25B,EAAgBhxB,KAAK8wB,EAAUz5B,IAC1Bw4B,EAAK,EAAGC,EAAKiB,EAAgBD,EAAUz5B,IAAKw4B,EAAKC,EAAGv4B,OAAQs4B,IAAM,QAEhEmB,EADGlB,EAAGD,IAKrB,OADA7vB,KAAKixB,gBATiB,SAAU,OAAQ,oBAAqB,iBAAkB,WAC3E,kBAAmB,WAAY,cAQCjxB,KAAK1I,SAClC0I,KAAKkxB,aAAaJ,IAE7BlS,EAAS/hB,UAAUo0B,eAAiB,SAAUE,EAAgB75B,GAC1D,IAAK,IAAID,EAAI,EAAGA,EAAIC,EAAQC,OAAQF,IAC5BC,EAAQD,GAAGC,SACX0I,KAAKoxB,eAAeD,EAAgB75B,EAAQD,IAC5C2I,KAAKixB,eAAeE,EAAgB75B,EAAQD,GAAGC,UAG/C0I,KAAKoxB,eAAeD,EAAgB75B,EAAQD,KAIxDunB,EAAS/hB,UAAUu0B,eAAiB,SAAUD,EAAgBxxB,GAC1D,IAAK,IAAItI,EAAI,EAAGA,EAAI85B,EAAe55B,OAAQF,WAChCsI,EAAOwxB,EAAe95B,IAC7BsI,EAAOlC,WAGfmhB,EAAS/hB,UAAU8nB,kBAAoB,SAAUjnB,GAC7C,GAAKhG,oBAAkBgG,EAAE2zB,SAAzB,CAGA,IAAIjwB,EAAS1D,EAAE0D,QACVA,EAAOgH,UAAUC,SAAS,sBAC3BjH,EAAOgH,UAAUC,SAAS,uBAA4BrI,KAAKsxB,gBAAmBtxB,KAAKrI,KAAK+2B,QACxF1uB,KAAKijB,sBAAsB7hB,GAE/BpB,KAAKsxB,gBAAiB,EACtBtxB,KAAK6S,OAAO,qBAAuBzR,OAAQA,MAO/Cwd,EAAS/hB,UAAUgC,QAAU,WACzB,OAAOmB,KAAKrI,KAAKkH,WAOrB+f,EAAS/hB,UAAU00B,SAAW,WAC1B,OAAOvxB,KAAKrI,KAAK45B,YAWrB3S,EAAS/hB,UAAU20B,UAAY,SAAU/yB,EAAMvE,EAAOu3B,GAClD,GAAIzxB,KAAKjE,WAAY,CAEjBiE,KAAKjE,WAA6B,oBAAI,EACtCiE,KAAKjE,WAAWy1B,UAAU/yB,EAAMvE,EAAOu3B,KAQ/C7S,EAAS/hB,UAAU2zB,UAAY,WACvBxwB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWy0B,aAQ7B5R,EAAS/hB,UAAU60B,SAAW,WACtB1xB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAW21B,YAW7B9S,EAAS/hB,UAAU80B,WAAa,SAAUjoB,EAAUkJ,EAAO3Y,GACnD+F,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAW41B,WAAWjoB,EAAUkJ,EAAO3Y,IAUzD2kB,EAAS/hB,UAAU+0B,UAAY,SAAU13B,EAAOuE,GAC5C,GAAIuB,KAAKrI,KAAKoE,WACV,GAAKrE,oBAAkBwC,GAMnB8F,KAAKrI,KAAKoE,WAAW61B,UAAU13B,EAAOuE,OANX,CAC3B,IAAI+oB,EAAWxnB,KAAKrI,KAAKwE,wBAAwBjC,GACjDkC,SAAOorB,EAAU/oB,GACjBuB,KAAKrI,KAAKoE,WAAW61B,UAAU13B,EAAOstB,KAelD5I,EAAS/hB,UAAUg1B,aAAe,SAAUC,EAAWrzB,GAC/CuB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAW81B,aAAaC,EAAWrzB,IASrDmgB,EAAS/hB,UAAUk1B,UAAY,SAAUpzB,GACjCqB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWg2B,UAAUpzB,IAUvCigB,EAAS/hB,UAAUm1B,SAAW,SAAUtoB,EAAUkJ,GAC1C5S,KAAKjE,YACLiE,KAAKjE,WAAWi2B,SAAStoB,EAAUkJ,IAU3CgM,EAAS/hB,UAAUo1B,mBAAqB,SAAUpb,EAAOqb,GACjDlyB,KAAKrI,KAAKw6B,eACVnyB,KAAKrI,KAAKw6B,cAAcC,YAAYvb,EAAOqb,IAQnDtT,EAAS/hB,UAAUw1B,QAAU,WACrBryB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWs2B,WAU7BzT,EAAS/hB,UAAUy1B,kBAAoB,SAAUC,EAAGC,GAC5CxyB,KAAKyyB,qBACLzyB,KAAKyyB,oBAAoBH,kBAAkBC,EAAGC,IAStD5T,EAAS/hB,UAAU61B,UAAY,SAAUzjB,GACjCjP,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAW22B,UAAUzjB,IAQvC2P,EAAS/hB,UAAUtB,wBAA0B,WACzC,OAAOyE,KAAKrI,KAAK4D,2BAWrBqjB,EAAS/hB,UAAU81B,aAAe,SAAU96B,EAAK+a,EAAO3Y,GACpD+F,KAAKrI,KAAKg7B,aAAa96B,EAAK+a,EAAO3Y,GACnC,IAAIyP,EAAW1J,KAAKrI,KAAKmH,wBAAwBjH,GAC7Ca,EAASsH,KAAK7D,wBAAwBuN,GACrChS,oBAAkBgB,IACnBmC,GAAaZ,MAAOvB,EAAQ4C,OAAQ,QAAU0E,KAAMA,KAAKhF,gBAAiBtC,EAAOwB,MAAO8F,KAAKrI,KAAK6wB,iBAAkB5V,IAW5HgM,EAAS/hB,UAAU6B,WAAa,SAAU7G,EAAK4T,GAC3C,IAAIvN,EAAiB8B,KAAK7D,wBACtBy2B,EAAa5yB,KAAKrI,KAAK4D,0BAA0B,GACjDpB,EAAQ,EACRzB,KACJwF,EAAe8nB,KAAK,SAAU/rB,GAC1B,OAAIA,EAAM24B,KAAgB/6B,IACtBa,EAASuB,GACF,KAMfE,EAAQzB,EAAOyB,MACfsR,EAAQtR,MAAQA,EAChBsR,EAAQvR,MAAQxB,EAAOwB,MACvBuR,EAAQnS,aAAeZ,EAAOY,aAC9BmS,EAAQrR,SAAW1B,EAAO0B,SAC1BqR,EAAQzS,SAAWN,EAAOM,SAC1ByS,EAAQ3S,WAAaJ,EAAOI,WAC5B2S,EAAQwB,cAAgBvU,EAAOuU,cAC/BxB,EAAQpS,gBAAkBX,EAAOW,gBACjCoS,EAAQnN,eAAiB5F,EAAO4F,eAChCmN,EAAQtS,SAAWT,EAAOS,SAC1B6G,KAAKrI,KAAK+G,WAAW7G,EAAK4T,IAQ9BmT,EAAS/hB,UAAUg2B,SAAW,SAAUC,GAChC9yB,KAAKrI,KAAKo7B,aACV/yB,KAAKrI,KAAKo7B,YAAYF,SAASC,IASvClU,EAAS/hB,UAAUm2B,sBAAwB,SAAU1vB,GAC7CtD,KAAK+yB,aACL/yB,KAAKrI,KAAKo7B,YAAYC,sBAAsB1vB,IAUpDsb,EAAS/hB,UAAUo2B,iBAAmB,SAAUvpB,EAAUoC,GACtD,OAAO9L,KAAKrI,KAAKs7B,iBAAiBvpB,EAAUoC,IAQhD8S,EAAS/hB,UAAU6e,iBAAmB,SAAU9I,GAC5C,OAAOsgB,uBAAqBlzB,KAAK6jB,YAAa,SAAU5gB,GACpD,GAAIA,EAAK2P,QAAUA,EACf,OAAO3P,IAGZ,IAQP2b,EAAS/hB,UAAU0U,eAAiB,SAAUvF,GAC1C,IAAImnB,EAAUnzB,KAAK/G,cAAgB+G,KAAKrI,KAAKL,QAAU0I,KAAK1I,QAC5D,OAAO47B,uBAAqBC,EAAS,SAAUlwB,GAC3C,GAAIA,EAAK+I,MAAQA,EACb,OAAO/I,IAGZ,IAOP2b,EAAS/hB,UAAUu2B,oBAAsB,WACrC,OAAOpzB,KAAKrI,KAAKy7B,uBAOrBxU,EAAS/hB,UAAUw2B,iBAAmB,WAClC,OAAOrzB,KAAKrI,KAAK07B,oBAOrBzU,EAAS/hB,UAAUy2B,sBAAwB,WACvC,OAAOtzB,KAAKrI,KAAK27B,yBASrB1U,EAAS/hB,UAAU02B,YAAc,SAAUj7B,EAAMk7B,GAC7CxzB,KAAKrI,KAAK47B,YAAYj7B,EAAMk7B,GAC5BxzB,KAAKkiB,qBASTtD,EAAS/hB,UAAU42B,YAAc,SAAUn7B,EAAMo7B,GAC7C1zB,KAAKrI,KAAK87B,YAAYn7B,EAAMo7B,GAC5B1zB,KAAKkiB,qBAQTtD,EAAS/hB,UAAU82B,uBAAyB,SAAU/gB,GAClD,OAAO5S,KAAKrI,KAAKg8B,uBAAuB/gB,IAQ5CgM,EAAS/hB,UAAU+2B,uBAAyB,SAAU15B,GAClD,OAAO8F,KAAKrI,KAAKi8B,uBAAuB15B,IAQ5C0kB,EAAS/hB,UAAUg3B,qBAAuB,SAAU7nB,GAChD,OAAOhM,KAAKrI,KAAKk8B,qBAAqB7nB,IAQ1C4S,EAAS/hB,UAAUi3B,sBAAwB,SAAUlhB,GACjD,OAAO5S,KAAKrI,KAAKm8B,sBAAsBlhB,IAE3CgM,EAAS/hB,UAAUk3B,wBAA0B,SAAU/nB,GACnD,IACI9R,EAAQg5B,uBAAqBlzB,KAAKrI,KAAgB,YAAG,SAAUsL,EAAM/I,GACrE,GAAI+I,EAAK+I,MAAQA,EACb,OAAO9R,IAGZ,GACH,OAAQxC,oBAAkBwC,IAAkB,EAATA,GAQvC0kB,EAAS/hB,UAAU8U,oBAAsB,SAAU3F,GAC/C,OAAOhM,KAAKrI,KAAKga,oBAAoB3F,IAQzC4S,EAAS/hB,UAAU+C,WAAa,SAAUo0B,GAEtC,OADAh0B,KAAKkiB,kBAAkBliB,KAAKrI,KAAKiI,WAAWo0B,IACrCh0B,KAAK6jB,aAEhBjF,EAAS/hB,UAAUqlB,kBAAoB,SAAUviB,GAC7C,IAAIsc,EACArJ,EACAqhB,EAAcv8B,oBAAkBiI,GAAUK,KAAKrI,KAAKiI,aAAeD,GACzC,IAA1BK,KAAKZ,iBAA0BY,KAAK6jB,YAAY7jB,KAAKZ,mBACpD1H,oBAAkBsI,KAAK6jB,YAAY7jB,KAAKZ,iBAAiBiU,YAC1D4I,EAAOjc,KAAK6jB,YAAY7jB,KAAKZ,iBAAiBiU,SAC9CT,EAAQ5S,KAAK6jB,YAAY7jB,KAAKZ,iBAAiBwT,OAEnD,IACI+c,EADAuE,GAAgB,EAEpB,IAAKl0B,KAAK0R,4BAA+B1R,KAAK0R,4BAA8B1R,KAAK6jB,YAAYtsB,SAAW08B,EAAY18B,OAAS,CACzHyI,KAAK6jB,eACL,IAAK,IAAIxsB,EAAI,EAAGA,EAAI48B,EAAY18B,OAAQF,IAAK,CACzCs4B,KACA,IAAK,IAAIE,EAAK,EAAGC,EAAKz3B,OAAOC,KAAK27B,EAAY58B,IAAKw4B,EAAKC,EAAGv4B,OAAQs4B,IAAM,CACrE,IAAIxR,EAAOyR,EAAGD,GACdF,EAAWtR,GAAQ4V,EAAY58B,GAAGgnB,GAEtCre,KAAK6jB,YAAYrrB,KAAK,IAAIsH,EAAO6vB,IAC7B/c,IAAU5S,KAAK6jB,YAAYxsB,GAAGub,OAAWlb,oBAAkBukB,IAAkB,KAATA,IACpEjc,KAAK6jB,YAAYxsB,GAAGgc,SAAW4I,IAa3C,OARAjc,KAAU,WAAK,WACXA,KAAKrI,KAAKL,QAAQC,SAAWyI,KAAK6jB,YAAYtsB,SAC9C28B,GAAgB,GAEfA,GACDl0B,KAAKse,eAAgBhnB,QAAS0I,KAAK6jB,cAAe,GAEtD7jB,KAAU,eAAI4d,EACP5d,KAAK6jB,aAOhBjF,EAAS/hB,UAAUs3B,WAAa,WAC5B,OAAOn0B,KAAKrI,KAAKw8B,cAErBvV,EAAS/hB,UAAU6iB,yBAA2B,WAE1C1f,KAAKrI,KAAa,qBAAEoK,MAAM/B,OAE9B4e,EAAS/hB,UAAUu3B,aAAe,SAAUC,EAAc/8B,GAEtD0I,KAAKrI,KAAa,aAAEoK,MAAM/B,MAAOq0B,EAAc/8B,KAEnDsnB,EAAS/hB,UAAUixB,oBAAsB,WACrC9tB,KAAKse,eAAgBtmB,eAAgBO,YAAU,aAAcyH,KAAKrI,KAAKK,kBAAmB,GAC1FgI,KAAKse,eAAgBxN,aAAcvY,YAAU,aAAcyH,KAAKrI,KAAKmZ,gBAAiB,GACtF9Q,KAAKse,eAAgB1mB,eAAgBW,YAAU,aAAcyH,KAAKrI,KAAKC,kBAAmB,GAC1FoI,KAAKse,eAAgB/f,aAAchG,YAAU,aAAcyH,KAAKrI,KAAK4G,gBAAiB,IAO1FqgB,EAAS/hB,UAAU6a,gBAAkB,WACjC,OAAO1X,KAAKrI,KAAK+f,mBAOrBkH,EAAS/hB,UAAUy3B,YAAc,WAG7B,IAAK,IAFDC,KACAzsB,EAAO9H,KAAKrI,KAAK28B,cACZj9B,EAAI,EAAGe,EAAM0P,EAAKvQ,OAAQF,EAAIe,EAAKf,IACnCyQ,EAAKzQ,GAAG+Q,UAAUC,SAAS,iBAC5BksB,EAAM/7B,KAAKsP,EAAKzQ,IAGxB,OAAOk9B,GAQX3V,EAAS/hB,UAAUV,sBAAwB,WACvC,OAAO6D,KAAKrI,KAAK8gB,iBAOrBmG,EAAS/hB,UAAUb,gBAAkB,WACjC,OAAOgE,KAAKrI,KAAKoE,WAAWC,mBAOhC4iB,EAAS/hB,UAAUqP,iBAAmB,WAClC,OAAOlM,KAAKrI,KAAKuU,oBAOrB0S,EAAS/hB,UAAU23B,eAAiB,WAChC,OAAOx0B,KAAKrI,KAAK68B,kBAQrB5V,EAAS/hB,UAAU+B,cAAgB,SAAU1E,GACzC,OAAO8F,KAAKrI,KAAKiH,cAAc1E,IAQnC0kB,EAAS/hB,UAAU43B,WAAa,SAAUrzB,GACtC,OAAOpB,KAAKrI,KAAK88B,WAAWrzB,IAQhCwd,EAAS/hB,UAAU63B,oBAAsB,SAAU9hB,GAC/C,OAAO5S,KAAKrI,KAAK+8B,oBAAoB9hB,IAOzCgM,EAAS/hB,UAAUiM,kBAAoB,WAEnC,IAAK,IADD6rB,KACK9E,EAAK,EAAGC,EAAK9vB,KAAK6jB,YAAagM,EAAKC,EAAGv4B,OAAQs4B,IAAM,CAC1D,IAAI9jB,EAAM+jB,EAAGD,GACT9jB,EAAI6oB,SACJD,EAAKn8B,KAAKuT,GAGlB,OAAO4oB,GAOX/V,EAAS/hB,UAAU2b,YAAc,WAC7BA,cAAYxY,KAAK2T,UAOrBiL,EAAS/hB,UAAUwZ,YAAc,WAC7BA,cAAYrW,KAAK2T,UAOrBiL,EAAS/hB,UAAUqxB,QAAU,WACzBluB,KAAK6e,sBACL7e,KAAK0mB,gBAAgB1mB,KAAKrJ,YACrBQ,EAAgB6I,QACjBA,KAAKrI,KAAKhB,WAAeqJ,KAAKrJ,sBAAsBC,cAChD,IAAIA,cAAYoJ,KAAKrJ,WAAWA,WAAYqJ,KAAKrJ,WAAWg3B,aAAc3tB,KAAKrJ,WAAWE,SAD3BmJ,KAAKxC,UAG5EwC,KAAKrI,KAAKu2B,WAQdtP,EAAS/hB,UAAU6O,kBAAoB,WACnC,OAAO1L,KAAK60B,gBAAgBplB,qBAQhCmP,EAAS/hB,UAAUi4B,kBAAoB,WACnC,IAAIC,KACA74B,EAAqB8D,KAAK7D,wBAC9B,GAAK6D,KAAK6Q,YASNkkB,EAAiB74B,OARjB,IAAK,IAAI7E,EAAI,EAAGA,EAAI6E,EAAmB3E,OAAQF,IAC3C09B,EAAev8B,KAAK0D,EAAmB7E,IAClC6E,EAAmB7E,GAAG8B,WACvB9B,GAAK+B,EAAoB8C,EAAmB7E,IAAIE,QAO5D,OAAOw9B,GAOXnW,EAAS/hB,UAAU6S,qBAAuB,WACtC,OAAO1P,KAAK60B,gBAAgBnlB,wBAQhCkP,EAAS/hB,UAAUmO,iBAAmB,SAAUgqB,GAC5Ch1B,KAAK60B,gBAAgB7pB,iBAAiBgqB,IAQ1CpW,EAAS/hB,UAAUszB,eAAiB,SAAU8E,GACtCv9B,oBAAkBu9B,IAAcA,GAChCj1B,KAAKrI,KAAKL,QAAU0I,KAAKmlB,eAAenlB,KAAK1I,SAC7C0I,KAAKrI,KAAKw4B,kBAGVnwB,KAAKrI,KAAK2mB,eAAgBhnB,QAAS0I,KAAKmlB,eAAenlB,KAAK1I,WAAY,IAQhFsnB,EAAS/hB,UAAUq4B,cAAgB,WAC/Bl1B,KAAKrI,KAAKu9B,iBASdtW,EAAS/hB,UAAUomB,sBAAwB,SAAU7hB,GACjD,GAA+B,UAA3BpB,KAAKnE,aAAaC,KAAkB,CAGpC,GAAIkE,KAAKhE,kBAAkBgE,KAAK+e,gBAAgBxnB,QAC5CyI,KAAKhE,kBAAkBgE,KAAKgf,gBAAgBznB,QAAUyI,KAAKhE,kBAAkBgE,KAAKiU,cAAc1c,OAAQ,CACxG,IAAI49B,EAAYn1B,KAAKrI,KAAKoE,WAAc,UAGxC,OAFAiE,KAAKrI,KAAKoE,WAAqB,WAAE,aAAco5B,QAC/Cn1B,KAAKo1B,cAAgBh0B,IAI7B,GAAIpB,KAAKiT,YAAa,CAClB,IAAIoiB,EAAUj0B,EAAO2J,QAAQ,kBAAkBmY,cAC3CxqB,EAASsH,KAAK7D,wBAAwBk5B,EAAQ3rB,UAC9CtI,EAAOgH,UAAUC,SAAS,oBAC1BrI,KAAKs1B,YAAYD,EAAS38B,GAG1BsH,KAAKu1B,UAAUF,EAAS38B,OAG3B,CAEGA,GADA28B,EAAUr1B,KAAKrI,KAAK88B,WAAWrzB,IACdqK,QACjBzL,KAAKV,sBACL5G,EAASsH,KAAK7D,wBAAwBk5B,EAAQ3rB,WAE9CtI,EAAOgH,UAAUC,SAAS,oBAC1BrI,KAAKs1B,YAAYD,EAAQ12B,IAAKjG,GAG9BsH,KAAKu1B,UAAUF,EAAQ12B,IAAKjG,KAWxCkmB,EAAS/hB,UAAU04B,UAAY,SAAU52B,EAAKjG,GAC1C,IAAI0O,EAAQpH,KACZtH,EAASsH,KAAKw1B,yBAAyB72B,EAAKjG,IACvChB,oBAAkBiH,IAAQA,EAAIe,MAAM,GAAG0I,UAAUC,SAAS,kBAC3DrI,KAAKorB,cAAczsB,GAAK,GAE5B,IAAIoE,GAAStE,KAAM/F,EAAQiG,IAAKA,EAAKqK,QAAQ,GAC7ChJ,KAAKiJ,QdnwEU,YcmwEgBlG,EAAM,SAAU0yB,GAC3C,IAAKA,EAAczsB,OAAQ,CACvB5B,EAAMsuB,eAAe,SAAU/2B,EAAKjG,GAEpC,KAAMjC,EAAa2Q,IAAW5N,EAAU4N,OAAajQ,EAAgBiQ,KAAW1P,oBAAkBgB,EAAe,WAAK,CAClH,IAAIi9B,GAAiBl3B,KAAM/F,EAAQiG,IAAKA,GACxCyI,EAAMwuB,4BACNxuB,EAAM6B,QAAQyQ,EAAiBic,QAK/C/W,EAAS/hB,UAAU+4B,0BAA4B,WAC3C,IAAIC,EAAU71B,KAAKrI,KAAKya,4BAA8B,GAAKpS,KAAKrI,KAAK0a,6BAA+B,GAChGrS,KAAKrI,KAAKsH,mBAAqB,GAAK42B,IACpC71B,KAAKrI,KAAKgiB,cAAcmc,uBAGhClX,EAAS/hB,UAAU24B,yBAA2B,SAAU72B,EAAKjG,GAUzD,OATIsH,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA0B/Q,KAAK8jB,aAAepsB,oBAAkBgB,KACrGjC,EAAauJ,MACdtH,EAASsH,KAAKxC,SAASC,OAAO,SAAUC,GACpC,OAAOA,EAAErE,kBAGR3B,oBAAkBgB,KACvBA,EAASsH,KAAKrI,KAAKwE,wBAAwBwC,EAAI+K,WAE5ChR,GASXkmB,EAAS/hB,UAAUy4B,YAAc,SAAU32B,EAAKjG,GAC5C,IAAI0O,EAAQpH,KAER+C,GAAStE,KADb/F,EAASsH,KAAKw1B,yBAAyB72B,EAAKjG,GACjBiG,IAAKA,EAAKqK,QAAQ,GAC7ChJ,KAAKiJ,QdxyEW,acwyEgBlG,EAAM,SAAUgzB,GAC5C,IAAKA,EAAe/sB,OAAQ,CACxB5B,EAAMsuB,eAAe,WAAY/2B,EAAKjG,GACtC,IAAIi9B,GAAiBl3B,KAAM/F,EAAQiG,IAAKA,GACxC,IAAKlI,EAAa2Q,KACdA,EAAMwuB,4BACNxuB,EAAM6B,QAAQ+sB,EAAkBL,GAC5BvuB,EAAMqS,yBAAyB,CACZrS,EAAMzP,KAAKw8B,aAAa8B,kBAAkBC,aAC7C9uB,EAAMzP,KAAKw8B,aAAa8B,kBAAkBE,UACzB/uB,EAAMzP,KAAKy+B,iBAAkBhvB,EAAM4f,QAChE5f,EAAMzP,KAAKw8B,aAAa8B,kBAAkBI,SAAS,EAAGjvB,EAAMzP,KAAKy+B,qBAazFxX,EAAS/hB,UAAUy5B,cAAgB,SAAUn8B,GACzC,IAAM6F,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,wBAA0B3H,EAAauJ,MAAO,CACtH,IAAI4O,EAAM5O,KAAKrI,KAAKhB,WAAW8G,OAAO,SAAUC,GAI5C,OAHIA,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IACjCuD,EAAEvE,UAAW,GAEVuE,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IAE5C6F,KAAKu1B,UAAU,KAAM3mB,OAMhB,CAHDA,EAAM5O,KAAKu2B,iBAAiBp8B,GAGhC,IAAK,IAFDwE,EAAMpG,YAAU,OAAQqW,GACxBlW,EAASH,YAAU,UAAWqW,GACzBvX,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAAK,CACpC,QAA6BumB,IAAzBllB,EAAOrB,GAAGyB,WAA0B,CACpC,IAAI09B,EAASx2B,KAAKxC,SAAS9E,EAAOrB,GAAGyB,WAAWoB,OAAOA,OAChB,IAAnC8F,KAAKxC,SAASg5B,GAAQr9B,WACtBT,EAAOF,KAAKwH,KAAKxC,SAASg5B,IAC1Bx2B,KAAKxC,SAASg5B,GAAQr9B,UAAW,GAGzC6G,KAAKu1B,UAAU52B,EAAItH,GAAIqB,EAAOrB,OAI1CunB,EAAS/hB,UAAU05B,iBAAmB,SAAUp8B,GAC5C,IAAI2N,EAAO9H,KAAKnB,UAAUpB,OAAO,SAAUC,GACvC,OAAkD,IAA1CA,EAAE6O,UAAU/N,QAAQ,QAAUrE,KAC9BuD,EAAEoN,cAAc,wBAA0BpN,EAAEoN,cAAc,wBAMtE,OADY5S,QAHE8H,KAAK7D,wBAAwBsB,OAAO,SAAUC,GACxD,OAAOA,EAAEvD,QAAUA,GAASuD,EAAErE,kBAEJyO,KAAMA,IASxC8W,EAAS/hB,UAAU45B,gBAAkB,SAAUt8B,GAC3C,IAAM6F,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,wBAA0B3H,EAAauJ,MAAO,CACtH,IAAItH,EAASsH,KAAKrI,KAAKhB,WAAW8G,OAAO,SAAUC,GAI/C,OAHIA,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IACjCuD,EAAEvE,UAAW,GAEVuE,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IAE5C6F,KAAKs1B,YAAY,KAAM58B,QAMvB,IAAK,IAHDkW,EAAM5O,KAAKu2B,iBAAiBp8B,GAC5B2N,EAAOvP,YAAU,OAAQqW,GACzB1W,EAAUK,YAAU,UAAWqW,GAC1BvX,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC2I,KAAKs1B,YAAYxtB,EAAKzQ,GAAIa,EAAQb,IAG1C,IAAK2I,KAAKrI,KAAKgiB,cAAc0W,qBAAuBrwB,KAAK5B,sBAAwB4B,KAAKnB,WAC/EmB,KAAKzC,WAAWhG,SAAWyI,KAAKnB,UAAUtH,OAAQ,CAErDyI,KAAKrI,KAAKgiB,cAAc+c,YAAc,EACtC12B,KAAKrI,KAAKgiB,cAAsB,UAAK,IAQ7CiF,EAAS/hB,UAAUkmB,UAAY,WAC3B/iB,KAAK22B,kBAAkB,WAO3B/X,EAAS/hB,UAAUmmB,YAAc,WAC7BhjB,KAAK22B,kBAAkB,aAE3B/X,EAAS/hB,UAAU85B,kBAAoB,SAAUr7B,GAC7C,IAAIwM,EAAO9H,KAAKnB,UAAUpB,OAAO,SAAUC,GACvC,OAAOA,EAAEoN,cAAc,eAA4B,WAAXxP,EAAsB,WAAa,aAO/E,IALKwM,EAAKvQ,QAAUyI,KAAKnB,UAAUtH,QAC/BuQ,EAAKtP,KAAKwH,KAAKnB,UAAU,IAE7BmB,KAAK8jB,aAAc,EACnB9jB,KAAK+jB,eAAgB,GACf/jB,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,wBAA0B3H,EAAauJ,OAM/G,GALAA,KAAKxC,SAASC,OAAO,SAAUC,GACvBA,EAAErE,kBACFqE,EAAEvE,SAAsB,aAAXmC,KAGjBwM,EAAKvQ,OACU,aAAX+D,EACA0E,KAAKs1B,YAAYxtB,EAAK,IAGtB9H,KAAKu1B,UAAUztB,EAAK,SAGvB,GAAI9H,KAAK6Q,YAAa,CACvB,IAAI+lB,EAAsB52B,KAAKgR,kBAC/BhR,KAAKse,eAAgBtN,mBAAmB,IAAQ,GAChDhR,KAAKrI,KAAKo7B,YAAYF,SAAS,GAC/B7yB,KAAKse,eAAgBtN,kBAAmB4lB,IAAuB,SAInE,IAAK,IAAIv/B,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IACd,aAAXiE,EACA0E,KAAKs1B,YAAYxtB,EAAKzQ,IAGtB2I,KAAKu1B,UAAUztB,EAAKzQ,IAIhC2I,KAAK8jB,aAAc,EACnB9jB,KAAK+jB,eAAgB,GAEzBnF,EAAS/hB,UAAU64B,eAAiB,SAAUp6B,EAAQqD,EAAKjG,EAAQ8e,GAC/D,IAIII,EAJA6d,GAAkB92B,IAAKA,EAAKF,KAAM/F,EAAQmR,aAAehK,YAAavE,GACtEhC,EAAe0G,KAAK7D,wBAAwBsB,OAAO,SAAUC,GAC7D,OAAOA,EAAEY,iBAAmB5F,EAAOM,YAGlCvC,EAAauJ,OAAoB,WAAX1E,GAAuB0E,KAAKhF,iBAAmB7D,EAAgB6I,QAAU1G,EAAa/B,QAC7GyI,KAAK62B,oBAAoBpB,GAE7B,IAAIhe,EAAWzX,KAAKnB,UACpB,GAAImB,KAAKiT,YAAa,CAClB,IAAInL,EAAO9H,KAAK0X,kBAAkB5P,KAClC2P,KAAcnP,MAAMvL,KAAK+K,GAa7B,GAVIpQ,oBAAkBiH,GAElBA,EAAM8Y,EADKzX,KAAK7D,wBAAwBqC,QAAQ9F,KAIpCiG,EAAIwN,aAAa,iBAE5BzU,oBAAkBiH,IACnBA,EAAIqO,aAAa,gBAA4B,WAAX1R,EAAsB,OAAS,WAE/D0E,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,uBAA0B3H,EAAauJ,OAC3G7I,EAAgB6I,MAGnB,CACD,IAAI82B,OAAgB,EACpB,GAAe,WAAXx7B,EAAqB,CAarB,GAZAw7B,EAAgB,YACXtf,IACD9e,EAAOS,UAAW,EAClB6G,KAAK6e,mBAAmBnmB,EAAOM,UAAUG,SAAWT,EAAOS,UAE1DzB,oBAAkBiH,KACnBiZ,EAAYjZ,EAAIkZ,uBAAuB,sBAAsB,IAE7DL,IAAY9f,oBAAkBgB,EAAOsH,KAAK9G,sBAC1CR,EAAOsH,KAAK9G,qBAAuBxB,oBAAkBkgB,KACrDA,EAAYjZ,EAAIkZ,uBAAuB,oBAAoB,IAE3DngB,oBAAkBkgB,GAClB,OAECA,EAAUxP,UAAUC,SAAS,qBAC9B+H,YAAUwH,GAAY,oBAE1BvK,eAAauK,GAAY,0BAExB,CAaD,GAZAkf,EAAgB,OACXtf,IAAWrgB,EAAgB6I,QAC5BtH,EAAOS,UAAW,EAClB6G,KAAK6e,mBAAmBnmB,EAAOM,UAAUG,SAAWT,EAAOS,UAE1DzB,oBAAkBiH,KACnBiZ,EAAYjZ,EAAIkZ,uBAAuB,oBAAoB,IAE3DL,IAAY9f,oBAAkBgB,EAAOsH,KAAK9G,uBACzCR,EAAOsH,KAAK9G,qBAAuBxB,oBAAkBkgB,KACtDA,EAAYjZ,EAAIkZ,uBAAuB,sBAAsB,IAE7DngB,oBAAkBkgB,GAClB,OAECA,EAAUxP,UAAUC,SAAS,uBAC9B+H,YAAUwH,GAAY,sBAE1BvK,eAAauK,GAAY,oBAE7B,IAAImf,EAAatf,EAASha,OAAO,SAAU+D,GACvC,OAAOA,EAAE4G,UAAUC,SAAS,uBAAyB3P,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAUlG,GARI1D,EAAauJ,QAAUxG,EAAUwG,MACjCA,KAAKkF,aAAa5J,EAAQqD,EAAKjG,GAGzBvB,EAAgB6I,QAAS1G,EAAa/B,QAAsB,aAAX+D,GACnD0E,KAAKg3B,YAAY17B,EAAQqD,EAAKjG,GAGlCsH,KAAKurB,kBAAoB5sB,EAAIe,MAAM,GAAG0I,UAAUC,SAAS,iBAIzD,IAAK,IAHDujB,EAAY5rB,KAAKnB,UAGZxH,GAFLyQ,EAAO9H,KAAK0X,kBAAkB5P,MAClC8jB,KAAetjB,MAAMvL,KAAK+K,IACHvQ,OAAS,GAAGF,EAAI,EAAGA,IACtC,IAAKiD,EAASsxB,EAAUv0B,IAAK,CACzB,IACI4/B,EADQj3B,KAAK0X,kBACGwe,aAChBgB,EAAel3B,KAAKm0B,aAAa+C,aACrCl3B,KAAKorB,cAAcQ,EAAUv0B,GAAI4/B,GAAWC,GAC5C,MAIZl3B,KAAK6S,OAAO,qBAAuBkkB,WAAYA,EAAYz7B,OAAQw7B,EAAep+B,OAAQA,EAAQiG,IAAKA,IACvGqB,KAAK0rB,aAAajU,QAxElBzX,KAAK6S,OAAOskB,GAAmC77B,OAAQA,EAAQqD,IAAKA,EAAKjG,OAAQA,KA2EzFkmB,EAAS/hB,UAAUg6B,oBAAsB,SAAUpB,GAC/C,IAAIruB,EAAQpH,KACRo3B,EAAO,IAAItL,WAEf2J,EAA2B,cAAI2B,EAAKpL,QACpC,IAAItzB,EAAS+8B,EAAch3B,KAC3BuB,KAAKiJ,QAAQwjB,EAAwBgJ,GACrC2B,EAAKnK,QAAQpX,KAAK,WACd,GAAI4f,EAAc5rB,UAAUtS,OAAQ,CAGhC,IAAK,IAFD6iB,EAAehT,EAAc,SAC7BlN,EAAQ,EACH7C,EAAI,EAAGA,EAAI+iB,EAAY7iB,OAAQF,IACpC,GAAI+iB,EAAY/iB,GAAG+C,WAAa1B,EAAO0B,SAAU,CAC7CF,EAAQ7C,EACR,MAOH,IAJDggC,EAASh5B,WAAS,SAAU+I,EAAMzQ,YAClCkT,EAAYlQ,EAAY87B,EAAc5rB,WACtCytB,EAAW5+B,EAAO0O,EAAMhK,eAAgB1E,EAAO0O,EAAMhK,cAAc7F,OAASsS,EAAUtS,OACtFmB,EAAO0O,EAAMhK,cAAc7F,OAA4BsS,EAAUtS,OACrE,IAASF,EAAI,EAAGA,EAAIigC,EAAUjgC,IACtBqB,EAAO0O,EAAMhK,eACbi6B,EAAO55B,OAAO,SAAUC,EAAGrG,GACnBqG,EAAE0J,EAAMnK,mBAAqBvE,EAAO0O,EAAMlK,YAC1Cm6B,EAAOl6B,OAAO9F,EAAG,KAIzBwS,EAAUxS,IACVwS,EAAUxS,GAAG8C,MAAQzB,EAAOyB,MAAQ,EACpC0P,EAAUxS,GAAG6C,MAAQkd,KAAKC,KAAqB,IAAhBD,KAAKE,UACpCzN,EAAUxS,GAAGyB,WAAasD,YAAW1D,GACrCmR,EAAUxS,GAAG+C,SAAWgC,YAAWyN,EAAUxS,WACtCwS,EAAUxS,GAAGyB,WAAWQ,oBACxBuQ,EAAUxS,GAAG+C,SAAStB,WAC7B+Q,EAAUxS,GAAGiH,eAAiB5F,EAAOM,SACrC6Q,EAAUxS,GAAG2B,SAAWme,SAAO/P,EAAMuM,QAAQC,GAAK,UAClDsC,WAAS,sBAAwBrM,EAAUxS,GAAG2B,SAAU6Q,EAAUxS,GAAI+P,KACjE1P,oBAAkBmS,EAAUxS,GAAG+P,EAAMhK,gBACrCyM,EAAUxS,GAAG+P,EAAMoO,kBAAoBre,EAAgBiQ,MACxDyC,EAAUxS,GAAGgC,iBAAkB,GAEnC+gB,EAAYjd,OAAOjD,EAAQ,EAAI7C,EAAGqB,EAAO0O,EAAMhK,eAAiB1E,EAAO0O,EAAMhK,cAAc/F,GAAK,EAAI,EAAGwS,EAAUxS,KAGjH+iB,EAAYjd,OAAOjD,EAAQ,EAAI7C,EAAG,GAG1C+iB,EAAYlgB,GAAOkN,EAAMhK,cAAgByM,EACzCuQ,EAAYlgB,GAAOZ,aAAeuQ,EAClCuQ,EAAYlgB,GAAOf,UAAW,EAC9B+c,WAAS,sBAAwBkE,EAAYlgB,GAAOlB,SAAUohB,EAAYlgB,GAAQkN,GAClF,IAAK,IAAIrN,EAAI,EAAGA,EAAI07B,EAAc5rB,UAAUtS,OAAQwC,IAChDs9B,EAAO7+B,KAAKi9B,EAAc5rB,UAAU9P,IAG5CqN,EAAMolB,iBAAkB,EACxBplB,EAAMzP,KAAKu2B,UACX9mB,EAAMwuB,4BACNxuB,EAAM6B,QAAQyQ,EAAiB+b,MAGvC7W,EAAS/hB,UAAUqI,aAAe,SAAU5J,EAAQqD,EAAKjG,GACrD,IAAI+e,EAAWzX,KAAKnB,UACpB,GAAImB,KAAKiT,YAAa,CAClB,IAAIskB,EAASv3B,KAAK0X,kBAAkB5P,KACpC2P,KAAcnP,MAAMvL,KAAKw6B,GAE7B,IAAIx0B,GAAStE,KAAM/F,EAAQiG,IAAKA,GAC5BmJ,KAIJ,GAHAA,EAAO2P,EAASha,OAAO,SAAU+D,GAC7B,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAEzE,WAAXmB,EAAqB,CACrB0E,KAAK6S,OAAO+B,GAAuBlc,OAAQA,EAAQoP,KAAMA,EAAMkQ,UAAWrZ,IAC1E,IAAI64B,GAAW74B,IAAKA,EAAKF,KAAM/F,GAC3BoP,EAAKvQ,OAAS,IACdyI,KAAK41B,4BACL51B,KAAKiJ,QAAQyQ,EAAiB8d,SAIlCx3B,KAAKy3B,qBAAsB/+B,OAAQA,EAAQoP,KAAMA,IACjD9H,KAAK41B,4BACL51B,KAAKiJ,QAAQ+sB,EAAkBjzB,IAGvC6b,EAAS/hB,UAAUm6B,YAAc,SAAU17B,EAAQqD,EAAKjG,GACpD,IAAIoP,EACAxO,EAAe0G,KAAK7D,wBAAwBsB,OAAO,SAAUC,GAC7D,OAAOA,EAAEY,iBAAmB5F,EAAOM,WAEnCgH,KAAKurB,iBAAmB5sB,EAAIe,MAAM,GAAG0I,UAAUC,SAAS,kBACxDrI,KAAKorB,cAAczsB,GAAK,GAE5B,IAAI+4B,EACAC,EACAlgB,EAAWzX,KAAKnB,UACpB,GAAImB,KAAKiT,YAAa,CAClB,IAAI2kB,EAAS53B,KAAK0X,kBAAkB5P,KACpC2P,KAAcnP,MAAMvL,KAAK66B,GAE7B,IAAId,EAA4B,WAAXx7B,EAAuB,YAAc,OACtDu8B,EAAkB73B,KAAKzE,0BAA0B,GACrD,GAAIyE,KAAKV,sBAAwBU,KAAK6Q,YAAa,CAC/C/I,KACA,IAAK,IAAIzQ,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IAAK,CAC1C,IAAIqS,EAAW1J,KAAKrI,KAAKmH,wBAAwBxF,EAAajC,GAAGwgC,IACjE/vB,EAAKtP,KAAKwH,KAAKnB,UAAU6K,UAI7B5B,EAAO2P,EAASha,OAAO,SAAU+D,GAC7B,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAG5F,IAAI07B,EAAU71B,KAAKrI,KAAKya,4BAA8B,GAAKpS,KAAKrI,KAAK0a,6BAA+B,GAChGrS,KAAKhB,YAAcgB,KAAKyR,eAAiBzR,KAAKf,oBAAsB42B,KACpE6B,EAAc13B,KAAK83B,iBAAiBr6B,OAAO,SAAU+D,GACjD,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,OAGxF07B,IACA8B,EAAkB33B,KAAK+3B,qBAAqBt6B,OAAO,SAAU+D,GACzD,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,OAG5F,IAAS9C,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IACxBK,oBAAkBoQ,EAAKzQ,MACxByQ,EAAKzQ,GAAGmD,MAAMG,QAAUm8B,GAEvBp/B,oBAAkBggC,KACnBA,EAAYrgC,GAAGmD,MAAMG,QAAUm8B,GAE9Bp/B,oBAAkBigC,KACnBA,EAAgBtgC,GAAGmD,MAAMG,QAAUm8B,GAEvC92B,KAAK6S,OAAO,kBAAoBlU,IAAKmJ,EAAKzQ,KACrCK,oBAAkB4B,EAAajC,GAAGiC,eAA6B,WAAXgC,IACrD5D,oBAAkB4B,EAAajC,GAAG8B,YAAaG,EAAajC,GAAG8B,WAC/D6G,KAAK01B,eAAep6B,EAAQwM,EAAKzQ,GAAIiC,EAAajC,IAAI,GAClD2I,KAAKyR,eAAiBzR,KAAKZ,kBAAoB1H,oBAAkBggC,IACjE13B,KAAK01B,eAAep6B,EAAQo8B,EAAYrgC,GAAIiC,EAAajC,IAAI,KAK7EunB,EAAS/hB,UAAU6uB,aAAe,SAAU5jB,GACxC,GAAI9H,KAAKgoB,eAAiBhoB,KAAKiT,YAE3B,IAAK,IADD+kB,EAAkB,EACb3gC,EAAI,EAAGyQ,GAAQzQ,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAC1C,IAAI4gC,EAAUnwB,EAAKzQ,GACW,SAA1B4gC,EAAQz9B,MAAMG,UACVs9B,EAAQ7vB,UAAUC,SAAS,aAC3BgF,eAAa4qB,GAAU,YAEvBD,EAAkB,GAAM,GAAMC,EAAQ7vB,UAAUC,SAAS,iBAAoB4vB,EAAQ7vB,UAAUC,SAAS,gBACxG+H,YAAU6nB,GAAU,YAEnBA,EAAQ7vB,UAAUC,SAAS,iBAAoB4vB,EAAQ7vB,UAAUC,SAAS,gBAC3E2vB,OAMpBpZ,EAAS/hB,UAAU4wB,sBAAwB,WACvC,GAAIztB,KAAKiT,YAAa,CAClB,IAAInL,EAAO9H,KAAK0X,kBAAkB5P,KAClCA,KAAUQ,MAAMvL,KAAK+K,GACrB,IAAK,IAAIzQ,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAClC,IAAI6gC,EAAQl4B,KAAKrI,KAAK+f,kBAAkB5P,KAAKzQ,GAAGqI,MAAMM,KAAKZ,iBACvDT,EAAMmJ,EAAKzQ,GAEX8gC,GAAQ15B,KADEuB,KAAKrI,KAAKghB,gBAAgBthB,GAAGoH,KAChBE,IAAKA,EAAKc,KAAMy4B,EAAOv4B,OAAQK,KAAKJ,aAAaI,KAAKZ,kBACjFY,KAAKT,aAAaC,WAAW24B,MAIzCvZ,EAAS/hB,UAAU46B,oBAAsB,SAAUlgB,EAAYC,GACtDA,IACDD,EAAW7e,OAAOS,UAAW,GAEjC,IACIwF,EACAgZ,EAFA7P,EAAOyP,EAAWzP,KAGlBswB,KACAC,KACAxC,EAAU71B,KAAKoS,4BAA8B,GAAKpS,KAAKqS,6BAA+B,EACtFwjB,IACAuC,EAAcp4B,KAAK83B,iBAAiBr6B,OAAO,SAAU+D,GACjD,OAAOA,EAAEsJ,cAAc,kBAAoByM,EAAW7e,OAAOwB,MAAQ,SAAWqd,EAAW7e,OAAOyB,MAAQ,MAE9Gk+B,EAAYr4B,KAAK+3B,qBAAqBt6B,OAAO,SAAU+D,GACnD,OAAOA,EAAEsJ,cAAc,kBAAoByM,EAAW7e,OAAOwB,MAAQ,SAAWqd,EAAW7e,OAAOyB,MAAQ,OAGlH,IAAK,IAAI9C,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAClCyQ,EAAKzQ,GAAGmD,MAAMG,QAAU,OACxBgE,EAAMmJ,EAAKzQ,GACX,IAAIihC,EAAexwB,EAAKzQ,GAAGyT,cAAc,sBAgBzC,GAfKpT,oBAAkB4gC,IACnBt4B,KAAKrI,KAAKugB,gBAAgBqgB,SAASD,GAEnCzC,IACAuC,EAAY/gC,GAAGmD,MAAMG,QAAU,OAC/B09B,EAAUhhC,GAAGmD,MAAMG,QAAU,OACxBmN,EAAKzQ,GAAGyT,cAAc,+CACnBstB,EAAY/gC,GAAGyT,cAAc,6CAC7BnM,EAAMy5B,EAAY/gC,GAEbghC,EAAUhhC,GAAGyT,cAAc,+CAChCnM,EAAM05B,EAAUhhC,MAIxBsH,EAAImM,cAAc,6CAA8C,CAChE,IAAI0tB,EAAgB75B,EAAImM,cAAc,6CACtC6M,EAAc3X,KAAKiT,YAAcjT,KAAKrI,KAAKwE,wBAAwB2L,EAAKzQ,GAAGqS,UACvE1J,KAAKrI,KAAKmgB,oBAAoBhQ,EAAKzQ,GAAG8U,aAAa,aAAa1N,MAC/D/G,oBAAkB8gC,IAAkB7gB,EAAYxe,WACjDkU,eAAamrB,GAAgB,oBAC7BpoB,YAAUooB,GAAgB,uBAI9B,IAAK,IAFDC,KACAC,EAAQ14B,KAAKnB,UACR85B,EAAM,EAAGA,EAAMD,EAAMnhC,OAAQohC,IAC9BD,EAAMC,GAAK7tB,cAAc,kBAAoB6M,EAAYzd,MAAQ,SAAWyd,EAAYxd,MAAQ,KAChGs+B,EAAKjgC,KAAKkgC,EAAMC,IAGpBF,EAAKlhC,QAAUogB,EAAYxe,UAC3B6G,KAAKy3B,qBAAsB/+B,OAAQif,EAAa7P,KAAM2wB,IAAQ,MAS9E7Z,EAAS/hB,UAAUiqB,YAAc,WAC7B9mB,KAAKmK,GAAG,gBAAiBnK,KAAK44B,kBAAmB54B,MACjDA,KAAKrI,KAAKwS,GAAG,cAAenK,KAAKsnB,gBAAiBtnB,OAEtD4e,EAAS/hB,UAAU+7B,kBAAoB,SAAUC,GAC7C74B,KAAKwU,YAAcqkB,GAMvBja,EAAS/hB,UAAU8zB,eAAiB,WAC5B3wB,KAAKyK,cAGTzK,KAAK0K,IAAI,gBAAiB1K,KAAK44B,mBAC/B54B,KAAKrI,KAAK+S,IAAI,cAAe1K,KAAKsnB,mBAiBtC1I,EAAS/hB,UAAUi8B,eAAiB,SAAUhH,EAAWiH,EAAgBC,EAAaC,EAAWC,EAAWC,EAAcC,EAAmBC,GACzIr5B,KAAKrI,KAAKmhC,eAAehH,EAAWiH,EAAgBC,EAAaC,EAAWC,EAAWC,EAAcC,EAAmBC,IAO5Hza,EAAS/hB,UAAUy8B,eAAiB,WAChCt5B,KAAKrI,KAAK2hC,kBAUd1a,EAAS/hB,UAAU08B,0BAA4B,SAAU3mB,EAAO4mB,GAC5Dx5B,KAAKrI,KAAK4hC,0BAA0B3mB,EAAO4mB,IAS/C5a,EAAS/hB,UAAUumB,UAAY,SAAUlpB,EAAOu/B,GAC5Cz5B,KAAKrI,KAAKyrB,UAAUlpB,EAAOu/B,IAQ/B7a,EAAS/hB,UAAU68B,WAAa,SAAU9rB,GACtC5N,KAAKrI,KAAK+hC,WAAW9rB,IAOzBgR,EAAS/hB,UAAU0mB,eAAiB,WAChCvjB,KAAKrI,KAAK4rB,kBAQd3E,EAAS/hB,UAAU2M,KAAO,SAAU/B,GAChCzH,KAAKunB,gBAAgB/d,KAAK/B,IAU9BmX,EAAS/hB,UAAU4M,MAAQ,SAAUhL,EAAMiL,EAAUC,GACjD3J,KAAKunB,gBAAgB9d,MAAMhL,EAAMiL,EAAUC,IAS/CiV,EAAS/hB,UAAU88B,WAAa,SAAUtW,EAAWoW,GACjDz5B,KAAKrI,KAAKgiC,WAAWtW,EAAWoW,IAOpC7a,EAAS/hB,UAAU+8B,gBAAkB,WACjC,OAAO55B,KAAKrI,KAAKiiC,mBASrBhb,EAAS/hB,UAAUg9B,wBAA0B,SAAUnwB,EAAUoC,GAC7D,OAAO9L,KAAKrI,KAAKkiC,wBAAwBnwB,EAAUoC,IAOvD8S,EAAS/hB,UAAUsS,mBAAqB,WACpC,OAAOnP,KAAKrI,KAAKwX,sBAQrByP,EAAS/hB,UAAUqC,qBAAuB,SAAUhF,GAChD,OAAO8F,KAAKrI,KAAKuH,qBAAqBhF,IAO1C0kB,EAAS/hB,UAAUi7B,eAAiB,WAChC,OAAO93B,KAAKrI,KAAKmgC,kBAQrBlZ,EAAS/hB,UAAUi9B,yBAA2B,SAAU5/B,GACpD,OAAO8F,KAAKrI,KAAKmiC,yBAAyB5/B,IAO9C0kB,EAAS/hB,UAAUk7B,mBAAqB,WACpC,OAAO/3B,KAAKrI,KAAKogC,sBAOrBnZ,EAAS/hB,UAAUk9B,uBAAyB,WACxC,OAAO/5B,KAAKrI,KAAKoiC,0BASrBnb,EAAS/hB,UAAUm9B,4BAA8B,SAAUtwB,EAAUoC,GACjE,OAAO9L,KAAKrI,KAAKqiC,4BAA4BtwB,EAAUoC,IAQ3D8S,EAAS/hB,UAAUo9B,iCAAmC,SAAU//B,GAC5D,OAAO8F,KAAKrI,KAAKsiC,iCAAiC//B,IAQtD0kB,EAAS/hB,UAAUq9B,kCAAoC,SAAUhgC,GAC7D,OAAO8F,KAAKrI,KAAKuiC,kCAAkChgC,IAQvD0kB,EAAS/hB,UAAUs9B,8BAAgC,SAAUjgC,GACzD,OAAO8F,KAAKrI,KAAKwiC,8BAA8BjgC,IAMnD0kB,EAAS/hB,UAAUu9B,uBAAyB,WACxC,OAAOp6B,KAAKrI,KAAKyiC,0BAMrBxb,EAAS/hB,UAAUuV,0BAA4B,WAC3C,OAAOpS,KAAKrI,KAAKya,6BAMrBwM,EAAS/hB,UAAUwV,2BAA6B,WAC5C,OAAOrS,KAAKrI,KAAK0a,8BAMrBuM,EAAS/hB,UAAU4V,qBAAuB,WAEtC,OADAzS,KAAKkiB,kBAAkBliB,KAAKrI,KAAK8a,wBAC1BzS,KAAK6jB,aAMhBjF,EAAS/hB,UAAU0V,sBAAwB,WAEvC,OADAvS,KAAKkiB,kBAAkBliB,KAAKrI,KAAK4a,yBAC1BvS,KAAK6jB,aAMhBjF,EAAS/hB,UAAUw9B,uBAAyB,WACxC,OAAOr6B,KAAKrI,KAAK0iC,0BAMrBzb,EAAS/hB,UAAUy9B,2BAA6B,WAC5C,OAAOt6B,KAAKrI,KAAK2iC,8BAMrB1b,EAAS/hB,UAAU09B,0BAA4B,WAC3C,OAAOv6B,KAAKrI,KAAK4iC,6BAMrB3b,EAAS/hB,UAAU8V,kBAAoB,WAEnC,OADA3S,KAAKkiB,kBAAkBliB,KAAKrI,KAAKgb,qBAC1B3S,KAAK6jB,aAQhBjF,EAAS/hB,UAAUoC,iBAAmB,WAClC,OAAOe,KAAKw6B,eAAex6B,KAAK1I,QAAS,GAAK0I,KAAKyR,eAEvDmN,EAAS/hB,UAAU29B,eAAiB,SAAU7F,EAAM8F,GAChD,IAAK,IAAI1gC,EAAI,EAAG3B,EAAMu8B,EAAKp9B,OAAQwC,EAAI3B,EAAK2B,IACpC46B,EAAK56B,GAAGzC,QACRmjC,EAAMz6B,KAAKw6B,eAAe7F,EAAK56B,GAAGzC,QAASmjC,GAGvC9F,EAAK56B,GAAG2gC,UACRD,IAIZ,OAAOA,GAOX7b,EAAS/hB,UAAUoL,sBAAwB,WACvC,OAAOjI,KAAKrI,KAAKsQ,yBAOrB2W,EAAS/hB,UAAU89B,0BAA4B,WAC3C,OAAO36B,KAAKrI,KAAKgjC,6BAQrB/b,EAAS/hB,UAAU4L,mBAAqB,WACpC,OAAOzI,KAAKrI,KAAK8Q,sBAOrBmW,EAAS/hB,UAAUub,cAAgB,WAC/B,OAASwiB,WAAY56B,KAAKrI,KAAKygB,gBAAiByiB,WAAY76B,KAAKwmB,aAUrE5H,EAAS/hB,UAAUi+B,YAAc,SAAUC,EAAaC,EAASvJ,GAC7DzxB,KAAKi7B,qBAAqBH,YAAYC,EAAaC,EAASvJ,IAEhE,IAAIjS,EA8XJ,OA7XAte,IACIc,WAAS,IACV4c,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIc,WAAS,IACV4c,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIc,WAAS,aACV4c,EAAS/hB,UAAW,gBAAY,GACnCqE,IACIc,gBACD4c,EAAS/hB,UAAW,eAAW,GAClCqE,IACIc,WAAS,OACV4c,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIc,WAAS,OACV4c,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIc,WAAS,IACV4c,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIc,WAAS,OACV4c,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIc,WAAS,OACV4c,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIc,WAAS,OACV4c,EAAS/hB,UAAW,0BAAsB,GAC7CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,2BAAuB,GAC9CqE,IACIc,gBACD4c,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIc,cACD4c,EAAS/hB,UAAW,aAAS,GAChCqE,IACIc,cACD4c,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIc,WAAS,aACV4c,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIg6B,aAAY94B,IACbwc,EAAS/hB,UAAW,wBAAoB,GAC3CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,0BAAsB,GAC7CqE,IACIg6B,aAAYre,KACb+B,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIg6B,aAAYC,oBACbvc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIc,cACD4c,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIg6B,aAAYxc,KACbE,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIiB,gBAAeoc,KAChBK,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIg6B,aAAY1c,KACbI,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIc,cACD4c,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIg6B,aAAYh5B,IACb0c,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIg6B,aAAY5qB,KACbsO,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIc,cACD4c,EAAS/hB,UAAW,eAAW,GAClCqE,IACIc,cACD4c,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIc,WAAS,YACV4c,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIc,cACD4c,EAAS/hB,UAAW,wBAAoB,GAC3CqE,IACIc,cACD4c,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIc,cACD4c,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIc,WAAS,WACV4c,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIc,WAAS,OACV4c,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,2BAAuB,GAC9CqE,IACIc,WAAS,SACV4c,EAAS/hB,UAAW,cAAU,GACjCqE,IACIc,WAAS,SACV4c,EAAS/hB,UAAW,aAAS,GAChCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,4BAAwB,GAC/CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,kCAA8B,GACrDqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,+BAA2B,GAClDqE,IACIg6B,aAAYvc,KACbC,EAAS/hB,UAAW,8BAA0B,GACjDqE,IACIc,WAAS,QACV4c,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,eAAW,GAClCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,YAAQ,GAC/BqE,IACIk6B,WACDxc,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,gBAAY,GACnCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,gBAAY,GACnCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,gBAAY,GACnCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,gBAAY,GACnCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,iBAAa,GACpCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,gBAAY,GACnCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,qBAAiB,GACxCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,wBAAoB,GAC3CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,kBAAc,GACrCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,mBAAe,GACtCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,eAAW,GAClCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,oBAAgB,GACvCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,0BAAsB,GAC7CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,eAAW,GAClCqE,IACIc,YAAU,IACX4c,EAAS/hB,UAAW,wBAAoB,GAC3CqE,IACIg6B,aAAY3qB,KACbqO,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,wBAAoB,GAC3CqE,IACIc,YAAS,IACV4c,EAAS/hB,UAAW,sBAAkB,GACzCqE,IACIk6B,WACDxc,EAAS/hB,UAAW,wBAAoB,GAC3CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,8BAA0B,GACjDqE,IACIk6B,WACDxc,EAAS/hB,UAAW,0BAAsB,GAC7CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,gCAA4B,GACnDqE,IACIk6B,WACDxc,EAAS/hB,UAAW,yBAAqB,GAC5CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,2BAAuB,GAC9CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,uBAAmB,GAC1CqE,IACIk6B,WACDxc,EAAS/hB,UAAW,yBAAqB,GAC5C+hB,EAAWY,EAAate,IACpBm6B,yBACDzc,IAEL0c,aCthHEC,GAAyB,WAMzB,SAASA,EAAQ7kC,GACb+L,OAAKC,OAAO84B,WACZx7B,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAgDT,OAxCAqxB,EAAQ1+B,UAAU+F,cAAgB,WAC9B,MAAO,WAMX24B,EAAQ1+B,UAAUqN,iBAAmB,WACjClK,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKy7B,cAAez7B,OAEzDu7B,EAAQ1+B,UAAU2N,oBAAsB,WAChCxK,KAAKtJ,OAAO+T,aAGhBzK,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKy7B,gBAQ3CF,EAAQ1+B,UAAU+M,QAAU,WACxB5J,KAAKwK,uBAET+wB,EAAQ1+B,UAAU4+B,cAAgB,WAK9B,IAAK,IAFDC,EADAxoB,EAAalT,KAAKtJ,OAAkB,YAAEsJ,KAAKtJ,OAAO0I,iBAElDu8B,EAAc37B,KAAKtJ,OAAOkJ,aACrBg8B,EAAI,EAAGA,EAAID,EAAYpkC,OAAQqkC,IAAK,CAGzC,GAFsBrjC,YAAU,QAAS2a,KACjB3a,YAAU,QAASojC,EAAYC,IACZ,CACvCF,EAAYE,EACZ,OAGR57B,KAAKtJ,OAAO4nB,eAAgBlf,gBAAiBs8B,IAAa,IAEvDH,KCzDPM,GAAwB,WAMxB,SAASA,EAAOnlC,GACZ+L,OAAKC,OAAOo5B,UACZ97B,KAAKtJ,OAASA,EAgClB,OAxBAmlC,EAAOh/B,UAAUklB,eAAiB,SAAUga,GACxC/7B,KAAKtJ,OAAOiB,KAAKoqB,eAAega,IAQpCF,EAAOh/B,UAAU+F,cAAgB,WAC7B,MAAO,UAQXi5B,EAAOh/B,UAAU+M,QAAU,WACnB5J,KAAKtJ,OAAO+T,aAGhBzK,KAAKtJ,OAAOiB,KAAKsqB,aAAarY,WAE3BiyB,KClCPG,GAAuB,WAMvB,SAASA,EAAMtlC,GAEXsJ,KAAKi8B,SAAU,EAEfj8B,KAAKk8B,oBAAqB,EAE1Bl8B,KAAKm8B,eAAgB,EACrB15B,OAAKC,OAAO05B,SACZp8B,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAqnCT,OAnnCA8xB,EAAMn/B,UAAUw/B,0BAA4B,SAAUzoB,GAWlD,OATI5T,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QAC3CsJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAGvCuE,KAAKtJ,OAAOiB,KAAKhB,YAEV8G,OAAO,SAAUC,GAC7C,OAAOA,EAAE1E,WAAa4a,KAQ9BooB,EAAMn/B,UAAUqN,iBAAmB,WAC/BlK,KAAKtJ,OAAOyT,GAAGwkB,GAAmB3uB,KAAKs8B,WAAYt8B,MACnDA,KAAKtJ,OAAOyT,GAAG0kB,GAAmB7uB,KAAKkH,WAAYlH,MACnDA,KAAKtJ,OAAOyT,GAAGoyB,GAAgBv8B,KAAKw8B,UAAWx8B,MAC/CA,KAAKtJ,OAAOyT,GAAGsyB,GAAmBz8B,KAAK08B,YAAa18B,OAUxDg8B,EAAMn/B,UAAUi+B,YAAc,SAAUC,EAAaC,EAASvJ,GAC1D,IAAIkL,EAAO38B,KAAKtJ,OAChB,GAAIqkC,EAAY,KAAOC,IAA8D,KAAlD,QAAS,QAAS,SAASx8B,QAAQizB,GAAtE,CACqB,UAAbA,IACAzxB,KAAK48B,aAAe,cAEP,UAAbnL,IACAzxB,KAAK48B,aAAe,iBAEP,UAAbnL,IACAzxB,KAAK48B,aAAe,iBAGxB,IAAK,IADDn+B,KACKpH,EAAI,EAAGA,EAAI0jC,EAAYxjC,OAAQF,IACpCoH,EAAKpH,GAAK2I,KAAKtJ,OAAOyF,wBAAwB4+B,EAAY1jC,IAE9D,IACI0L,GACAtE,KAAMA,EACNo+B,UAAW7B,GAUf,GARK7jC,EAAgB6I,KAAKtJ,SACtBsJ,KAAK88B,SAAS/5B,GAND,GASb45B,EAAK5hB,cACL4hB,EAAKn/B,SAAWwC,KAAK+8B,aAAaJ,EAAKn/B,WAE3CwC,KAAKtJ,OAAOiB,KAAKu2B,UACbluB,KAAKtJ,OAAO4I,qBAA6C,kBAAtBU,KAAK48B,aAAkC,CAC1E,IAAI1iC,EAAQ8F,KAAKtJ,OAAO0I,gBAAkB,EACtCT,EAAMqB,KAAKtJ,OAAOmI,UAAUk8B,EAAY,IACxCiC,EAAWj6B,EAAKtE,KAAK,GACrBw+B,KACAn1B,KACJm1B,EAAYzkC,KAAKwkC,GACjBl1B,EAAKtP,KAAKmG,GACV,IACIpB,EAAaxE,EAAciH,KAAKtJ,OAAQqM,EAAKtE,KAAK,GAAiB,gBACnEy+B,EAAYl9B,KAAKtJ,OAAOmI,UAAUm8B,GACtCiC,EAAYzkC,KAAK+E,GACjBuK,EAAKtP,KAAK0kC,GACV,IAAS7lC,EAAI,EAAGA,EAAI4lC,EAAY1lC,OAAQF,IACpC2I,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAMw+B,EAAY5lC,GAAIoI,KAAMqI,EAAKzQ,GAAGqI,MAAMxF,GAC1CyF,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,iBAClDS,YAAa,sBASjCm8B,EAAMn/B,UAAUkgC,aAAe,SAAU3iB,GAUrC,IAAK,IATDxd,EAAU,SAAUvF,GAEpB,GADA+iB,EAAY/iB,GAAG6C,MAAQ7C,GAClBK,oBAAkB0iB,EAAY/iB,GAAGyB,YAAa,CAC/C,IAAIqkC,EAAgB/iB,EAAY3c,OAAO,SAAUgB,GAC7C,OAAOA,EAAKzF,WAAaohB,EAAY/iB,GAAGiH,iBACzC,GACH8b,EAAY/iB,GAAGyB,WAAWoB,MAAQijC,EAAcjjC,QAG/C7C,EAAI,EAAGA,EAAI+iB,EAAY7iB,OAAQF,IACpCuF,EAAQvF,GAEZ,OAAO+iB,GAEX4hB,EAAMn/B,UAAU2/B,UAAY,SAAU9+B,GAGlC,IAAK,IAFD0/B,EACAC,EAAc3/B,EAAExF,QACXb,EAAIqG,EAAExF,QAAQX,OAAS,EAAGF,GAAK,EAAGA,IAEvC,IADA+lC,EAAgBC,EAAYhmC,IACViH,eAAgB,CAC9B,IAAI5F,EAAS2kC,EAAY5/B,OAAO,SAAUgB,GACtC,OAAOA,EAAKzF,WAAaokC,EAAc9+B,iBAE3C,GAAI5F,EAAOnB,OAAQ,CACf,IAAI2C,EAAQxB,EAAO,GAAGY,aAAakF,QAAQ4+B,GACvCvkC,EAAeH,EAAO,IACX,IAAXwB,IACIxC,oBAAkBsI,KAAKtJ,OAAOwG,aAC9BrE,EAAaS,aAAa6D,OAAOjD,EAAO,GACnCrB,EAAaS,aAAa/B,SAC3BsB,EAAaQ,iBAAkB,EAC/BR,EAAamZ,yBAA0B,IAG/ChS,KAAKk8B,oBAAqB,IAK1C,GAAIxkC,oBAAkBsI,KAAKtJ,OAAOC,cAAgBqJ,KAAKtJ,OAAOC,WAAWY,OAAQ,CAKxE,IAHD+lC,EADAX,EAAO38B,KAAKtJ,OAEZ6mC,EAAgB7/B,EAAExF,QAEtB,IAASb,EADQqG,EAAExF,QAAQX,OACD,EAAGF,GAAK,EAAGA,IAAK,CACtCimC,EAAkBC,EAAclmC,IAC3BA,GAAKimC,EAAgBjkC,kBACtBikC,EAAgBljC,SAAS4F,KAAKtJ,OAAOuG,iBAAmB,MAU5D,GAPKvF,oBAAkBilC,EAAK1/B,mBACxB0/B,EAAKv/B,aAAe,MAEnB1F,oBAAkB4lC,EAAgBljC,WAAc1C,oBAAkBilC,EAAKv/B,eACvE/E,OAAOwE,UAAUC,eAAeC,KAAKugC,EAAgBljC,SAAUuiC,EAAKv/B,gBACrEkgC,EAAgBljC,SAASuiC,EAAKv/B,kBAE9B/E,OAAOwE,UAAUC,eAAeC,KAAKugC,EAAiBX,EAAKv/B,eAC1DkgC,EAAgBX,EAAKv/B,cAAe7F,SAAWyI,KAAKk8B,qBACpDxkC,oBAAkBilC,EAAK1/B,iBAExB,IAAK,IADD4M,EAAayzB,EAAgBX,EAAKv/B,cAC7BrD,EAAI,EAAGA,EAAI8P,EAAUtS,OAAQwC,KACW,IAAzCwjC,EAAc/+B,QAAQqL,EAAU9P,MAChCwjC,EAAcpgC,OAAOpD,EAAG,EAAG8P,EAAU9P,IACrC8P,EAAU9P,GAAGK,SAAWgC,YAAWyN,EAAU9P,IAC7C1C,GAAK,GAIbgB,OAAOwE,UAAUC,eAAeC,KAAKugC,EAAiBX,EAAK1/B,kBAA6D,MAAzCqgC,EAAgBX,EAAK1/B,mBAChG+C,KAAKk8B,qBACToB,EAAgBljC,SAASuiC,EAAK1/B,iBAAmB,YAC1CqgC,EAAgBxkC,kBAChBwkC,EAAgBh/B,gBAEvB5G,oBAAkBilC,EAAKhmC,cACvBgmC,EAAKhmC,eAETgmC,EAAKhmC,WAAWwG,OA7BG,EA6BkB,EAAGmgC,EAAgBljC,UAE5DuiC,EAAKre,eAAgB3nB,WAAYgmC,EAAKhmC,aAAc,OAEnD,CACD,IAASU,EAAI,EAAGA,EAAIgmC,EAAY9lC,OAAQF,IACpC6e,WAAS,sBAAwBmnB,EAAYhmC,GAAG2B,SAAUqkC,EAAYhmC,GAAI2I,KAAKtJ,QAEnF,IAAIqM,GAAStE,KAAMf,EAAExF,QAAS2kC,UAAWn/B,EAAEs9B,SACvCh7B,KAAKtJ,OAAOC,sBAAsBC,eAClCoJ,KAAKma,aAAena,KAAKtJ,OAAOC,WAAWA,WAAW8E,KACtDuE,KAAKxE,SAAWwE,KAAKtJ,OAAOC,WAAWA,WAAW8E,OAGlDuE,KAAKma,aAAena,KAAKtJ,OAAOiB,KAAKhB,WACrCqJ,KAAKxE,SAAWwE,KAAKtJ,OAAOC,YAE5Be,oBAAkBsI,KAAK48B,gBACvB58B,KAAK48B,aAAe,gBACpB75B,EAAK85B,UAAY78B,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,EAAIyI,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,EAC3GwL,EAAK85B,UACT95B,EAAKtE,KAAOsE,EAAKtE,KAAKN,IAAI,SAAU9G,GAChC,OAAIA,EAAEgC,iBAAmB3B,oBAAkBL,EAAEyB,aACzCzB,EAAE8C,MAAQ,EACH9C,WAGAA,EAAEyB,kBACFzB,EAAEiH,eACTjH,EAAE8C,MAAQ,EACH9C,MAInB2I,KAAK88B,SAAS/5B,KAGtBi5B,EAAMn/B,UAAU6/B,YAAc,SAAUh/B,GACpC,IAAK,IAAIrG,EAAI,EAAGA,EAAIqG,EAAExF,QAAQX,OAAQF,IAClC2I,KAAKo9B,cAAgB1/B,EAAExF,QAAQb,IAC3B2I,KAAKo9B,cAAc/jC,iBAAmB2G,KAAKo9B,cAActkC,aAE8B,IADvFkH,KAAKtJ,OAAOiB,KAAKhB,WACb6H,QAAQwB,KAAKq8B,0BAA0Br8B,KAAKo9B,cAAc9+B,gBAAgB,KACjD,IAA7B0B,KAAKo9B,cAAcjjC,QACnB6F,KAAKw9B,iBAIjBxB,EAAMn/B,UAAU4gC,sBAAwB,WACpC,IAGIC,EACAC,EAJAP,EAAgBp9B,KAAKo9B,cACrBQ,EAAgB59B,KAAK49B,cACrBC,EAAQ79B,KAAKtJ,OAUjB,KANIgnC,EADA19B,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QAC/CmnC,EAAMlnC,WAAWA,WAAW8E,KAG5BoiC,EAAMlnC,aAGHe,oBAAkBkmC,IAAmBA,EAAc9kC,YAAgBpB,oBAAkBkmC,EAAcxjC,WAiBtH,IAAK4F,KAAKtJ,OAAOuG,kBAAqBvF,oBAAkBkmC,IAAkBA,EAAc9kC,aAC/D,eAAtBkH,KAAK48B,cAAuD,kBAAtB58B,KAAK48B,cAGtC,CAAA,IADDtjC,EADS0G,KAAKq8B,0BAA0BuB,EAAct/B,gBAAgB,GAChDhF,aAC1B,IAASjC,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IACrCumC,EAAc9kC,WAAWsB,SAAS4F,KAAKtJ,OAAO0G,cAAc/F,GAAKiC,EAAajC,GAAG+C,cAtByC,CAClI,IAAK,IAAI/C,EAAI,EAAGA,EAAIgB,OAAOC,KAAKolC,GAAgBnmC,OAAQF,IAChDqmC,EAAermC,GAAG2I,KAAKtJ,OAAO0G,gBAAkBwgC,EAAcxjC,SAAS4F,KAAKtJ,OAAO0G,gBACnFugC,EAAMtmC,GAGY,eAAtB2I,KAAK48B,aACA58B,KAAKtJ,OAAOwG,WACbwgC,EAAevgC,OAAOwgC,EAAK,EAAGP,EAAchjC,UAGrB,kBAAtB4F,KAAK48B,eACL58B,KAAKtJ,OAAOwG,WACbwgC,EAAevgC,OAAOwgC,EAAM,EAAG,EAAGP,EAAchjC,WAaxD4F,KAAKtJ,OAAOuG,kBACRmgC,EAActkC,WACY,eAAtBkH,KAAK48B,cAAuD,kBAAtB58B,KAAK48B,cAC3CQ,EAAcp9B,KAAKtJ,OAAOuG,iBAAmB2gC,EAAc59B,KAAKtJ,OAAOuG,iBACvEmgC,EAAchjC,SAAS4F,KAAKtJ,OAAOuG,iBAAmB2gC,EAAc59B,KAAKtJ,OAAOuG,mBAGhFmgC,EAAcp9B,KAAKtJ,OAAOuG,iBAAmB2gC,EAAc59B,KAAKtJ,OAAOwG,WACvEkgC,EAAchjC,SAAS4F,KAAKtJ,OAAOuG,iBAAmB2gC,EAAc59B,KAAKtJ,OAAOwG,aAIpFkgC,EAAchjC,SAAS4F,KAAKtJ,OAAOuG,iBAAmB,KACtDmgC,EAAcp9B,KAAKtJ,OAAOuG,iBAAmB,QAIzD++B,EAAMn/B,UAAUihC,qBAAuB,SAAUnqB,GAC7C,IAAIoqB,EAAkC,kBAAtB/9B,KAAK48B,aACjB58B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqBtgB,OAAS,GAAKoc,IACxD,IAArBA,EAAQjK,UAAkBq0B,IAC3B/9B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqB,GAAGuO,UAG3E4V,EAAMn/B,UAAUmhC,oBAAsB,SAAUrqB,GAC5C,IAAIsqB,EAAatqB,IAAYA,EAAQvL,UAAUC,SAAS,eAAiBsL,EAAQvL,UAAUC,SAAS,mBAC7FsL,EAAQvL,UAAUC,SAAS,gBAC9B61B,EAAiBvqB,IAAYsqB,GAC7Bj+B,KAAKtJ,OAAOkI,cAAcoB,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAG4U,aAAa,cACnFwH,EAAQxH,aAAa,YACzB4xB,EAAYG,GAAwC,eAAtBl+B,KAAK48B,aACnC58B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoBtgB,OAAS,GAAKoc,IAAYuqB,GAAkBH,IAC3G/9B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoB,GAAGuO,UAG1E4V,EAAMn/B,UAAUshC,WAAa,SAAUx/B,EAAKzE,EAAO6I,GAC/C,IAAIq7B,EAASr7B,EAAK3B,OAAS2J,UAAQhI,EAAK3B,OAAQ,MAAQ,KACxDpB,KAAK48B,kBAAehf,EACpB,IAAIygB,EAAoB,EACxBr+B,KAAK89B,qBAAqBM,GAC1Bp+B,KAAKg+B,oBAAoBI,GACzB,IAAK,IAAI/mC,EAAI,EAAGA,EAAI0L,EAAK+E,KAAKvQ,OAAQF,KAC7BK,oBAAkB0mC,IAAWA,EAAOjyB,aAAa,cAAgBpJ,EAAK+E,KAAKzQ,GAAG8U,aAAa,cACxFtB,eAAa9H,EAAK3B,OAAQ,mBAC9BpB,KAAK48B,aAAe,UACpB58B,KAAKs+B,gBAIb,IAAI3B,EAAO38B,KAAKtJ,OACZ6nC,EAAS,EAETC,EAAa7B,EAAKtX,SAAWsX,EAAKtX,QAAQ9tB,OAC1CknC,SAASC,eAAe/B,EAAKhpB,QAAQC,GAAK,6BAA6B+qB,aAAe,EAEtFC,EAAiB5+B,KAAK6+B,UAAUlC,EAAKhpB,SAErCmrB,EAAgBnC,EAAKzwB,mBAAmByyB,aAAeC,EAAeG,IAAMP,EAC5ErI,EAAYwG,EAAKxI,aAAa8B,kBAAkBE,UAC/Cz+B,oBAAkB0mC,KACnBC,EAAoBD,EAAOY,UAAY7I,GAI3C,IAEI8I,IAHJV,EAASF,EAAoBS,EAZd,GAaUngC,EAAI,GAAGggC,aACHJ,GACH,EACtBW,EAAgBX,EAASU,EACzBE,EAAmBD,EAAgBD,EACnCG,EAAmBD,EAAmBF,EACtCI,EAAa9mC,YAAU,sBAAuBwK,GAC9Cu8B,EAAa/mC,YAAU,sBAAuBwK,GAC9Cw8B,EAA4B,cAApBF,EAAWr8B,KAAwBq8B,EAAWG,MAAW9nC,oBAAkB4nC,IAClF5nC,oBAAkB4nC,EAAWG,gBAAwD,KAArCH,EAAWG,eAAe,GAAGD,MAC9EE,EAAeH,GAAQL,EACvBS,EAAsBJ,EAAOL,GAAiBK,GAAQJ,EACtDS,EAAsBL,EAAOJ,GAAoBI,GAAQH,EAC7D,GAAIM,GAAgBC,GAAsBC,EAAoB,CAU1D,GATIF,GAAsC,YAAtB1/B,KAAK48B,eACrB58B,KAAK6/B,oBACL7/B,KAAK48B,aAAe,aACpB58B,KAAK8/B,0BACL9/B,KAAK+/B,kBAAkB3B,GACvBp+B,KAAKggC,kBACLhgC,KAAKg+B,oBAAoBI,GACzBp+B,KAAKigC,kBAAkBl9B,EAAK3B,SAE5Bu+B,GAA4C,YAAtB3/B,KAAK48B,aAA4B,CACvD58B,KAAK8/B,0BACL,IAAIv0B,KACAoI,EAAU5I,UAAQhI,EAAK3B,OAAQ,OACnCmK,KAAgBjD,MAAMvL,KAAK4W,EAAQpL,iBAAiB,oDACrChR,OAAS,GACpByI,KAAKkgC,iBAAiB30B,GAAY,EAAM,iBAE5CvL,KAAKmgC,iBAAiB/B,GACtBp+B,KAAK+/B,kBAAkB3B,GACvBp+B,KAAK48B,aAAe,gBAEpBgD,GAA4C,YAAtB5/B,KAAK48B,eAC3B58B,KAAKggC,kBACLhgC,KAAK8/B,0BACL9/B,KAAK6/B,oBACL7/B,KAAK48B,aAAe,gBACpB58B,KAAKmgC,iBAAiB/B,GACtBp+B,KAAK89B,qBAAqBM,GAC1Bp+B,KAAKigC,kBAAkBl9B,EAAK3B,SAGpC,OAAOpB,KAAK48B,cAEhBZ,EAAMn/B,UAAUgjC,kBAAoB,WAChC,IAAIO,MACJA,KAAgB93B,MAAMvL,KAAKiD,KAAKtJ,OAAOid,QAAQpL,iBAAiB,oBACjDhR,OAAS,GACpByI,KAAKkgC,iBAAiBE,GAAY,EAAO,kBAGjDpE,EAAMn/B,UAAUkjC,kBAAoB,SAAUM,GAC1C,IAAIC,EAAOtgC,KAAKtJ,OAAOid,QACnBgpB,EAAO38B,KAAKtJ,OAChB,GAAI2pC,GAAoC,IAAvBA,EAAU32B,WAAmB22B,EAAUj4B,UAAUC,SAAS,cAAe,CACtF,IAAIk4B,EAAMvgC,KAAKtJ,OAAO4V,cAAc,OAASC,UAAW,sBACpDi0B,EAAgBxgC,KAAKtJ,OAAOwV,mBAC5Bu0B,EAAgB,EAChB9D,EAAKtX,UACLob,EAAgB9D,EAAKxK,cAAcuO,aAAa/B,cAEpD,IAAIgC,GAAgBjpC,oBAAkBsI,KAAKtJ,OAAOkwB,gBAAgBC,UAC9D8Z,IACAJ,EAAI/lC,MAAMukC,IAAM/+B,KAAKtJ,OAAOiB,KAAKgc,QAAQkE,uBAAuB,gBAAgB,GAAG8mB,aAC7E8B,EAAgB,MAE1BF,EAAI/lC,MAAM2S,MAAQwzB,EAAeL,EAAKM,YAAc,KAChDN,EAAKM,YAAc5gC,KAAK6gC,iBAAmB,KAC1CL,EAAcj4B,iBAAiB,sBAAsBhR,QACtDipC,EAAc7yB,YAAY4yB,KAItCvE,EAAMn/B,UAAUsjC,iBAAmB,SAAUW,GACzC,IAAI7C,EAAa6C,IAAcA,EAAU14B,UAAUC,SAAS,eACxDy4B,EAAU14B,UAAUC,SAAS,mBAAqBy4B,EAAU14B,UAAUC,SAAS,gBACnF,GAAIy4B,IAAc7C,GAAcj+B,KAAKtJ,OAAOkI,cAAcoB,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAG4U,aAAa,cACnH20B,EAAU30B,aAAa,YAAa,CACpC,IAAI40B,EAAe/gC,KAAKtJ,OAAO4V,cAAc,OAASC,UAAW,qBAC7Dy0B,EAAiBhhC,KAAKtJ,OAAOy9B,aACjC4M,EAAavmC,MAAM2S,MAAQnN,KAAKtJ,OAAOid,QAAQitB,YAAc5gC,KAAK6gC,iBAAmB,KAChFG,EAAez4B,iBAAiB,qBAAqBhR,SACtDypC,EAAe54B,UAAUuE,IAAI,uBAC7Bq0B,EAAerzB,YAAYozB,GAC3BA,EAAavmC,MAAMymC,OAASjhC,KAAK6gC,iBAAmB,QAIhE7E,EAAMn/B,UAAUgkC,eAAiB,WAC7B,IAAIK,EAAalhC,KAAKtJ,OAAOy9B,aAAa8B,kBAC1C,OAAOiL,EAAWC,YAAcD,EAAWN,YAAcQ,SAAOC,oBAAsB,GAE1FrF,EAAMn/B,UAAUyhC,aAAe,WAC3B,IAAIgD,EAAW7C,SAAS5mB,uBAAuB,qBAAqB,GAEpE,IADgBypB,EAAS/4B,iBAAiB,gBAAgBhR,SACvCyI,KAAKtJ,OAAOkwB,gBAAgBC,SAAU,CACrD,IAAI0a,EAAM9C,SAASnyB,cAAc,OACjClE,YAAUm5B,GAAM,wBAChBn5B,YAAUm5B,GAAM,UAAW,mBAC3B,IAAIC,EAAWF,EAASx2B,cAAc,eAClC22B,EAAUH,EAASx2B,cAAc,cAAc2C,UAC/C+zB,IACAC,EAAUD,EAAS/zB,UACnB+zB,EAASE,WAAWC,YAAYH,IAEpCF,EAASx2B,cAAc,cAAc2C,UAAY,GACjD,IAAIm0B,EAAcnD,SAASnyB,cAAc,QACzCs1B,EAAYr1B,UAAY,aACxBq1B,EAAYpnC,MAAMqnC,YAAc,OAChCD,EAAYn0B,UAAYg0B,EACxBH,EAASx2B,cAAc,cAAc6C,YAAY4zB,GACjDD,EAASx2B,cAAc,cAAc6C,YAAYi0B,KAGzD5F,EAAMn/B,UAAUmjC,gBAAkB,WAC9B,IAAI8B,EAAYrD,SAAS3zB,cAAc,gBACnCg3B,GACAA,EAAU1b,UAGlB4V,EAAMn/B,UAAUojC,kBAAoB,SAAU7+B,GAC1C,IAAImK,KACAoI,EAAU5I,UAAQ3J,EAAQ,OAC9BmK,EAAaoI,KAAarL,MAAMvL,KAAK4W,EAAQpL,iBAAiB,uDAC/ChR,SACe,eAAtByI,KAAK48B,eACL58B,KAAKkgC,iBAAiB30B,GAAY,EAAM,aACpCvL,KAAKtJ,OAAOid,QAAQkE,uBAAuB,wBAAwBtgB,OAAS,GAC5EyI,KAAKtJ,OAAOid,QAAQkE,uBAAuB,wBAAwB,GAAGuO,UAGpD,kBAAtBpmB,KAAK48B,cACL58B,KAAKkgC,iBAAiB30B,GAAY,EAAM,kBAIpDywB,EAAMn/B,UAAUijC,wBAA0B,WACtC,IAAIiC,MACJA,KAAYz5B,MAAMvL,KAAKiD,KAAKtJ,OAAOid,QAAQpL,iBAAiB,+BACjDhR,SACPyI,KAAKkgC,iBAAiB6B,GAAQ,EAAO,gBACrC/hC,KAAKkgC,iBAAiB6B,GAAQ,EAAO,eAG7C/F,EAAMn/B,UAAUqjC,iBAAmB,SAAUxgC,EAAOiN,EAAKJ,GACrD,IAAK,IAAIlV,EAAI,EAAGe,EAAMsH,EAAMnI,OAAQF,EAAIe,EAAKf,IACrCsV,EACAjN,EAAMrI,GAAG+Q,UAAUuE,IAAIJ,GAGvB7M,EAAMrI,GAAG+Q,UAAUge,OAAO7Z,IAItCyvB,EAAMn/B,UAAUgiC,UAAY,SAAUlrB,GAClC,IAAIquB,EAAMruB,EAAQsuB,wBACdC,EAAOzD,SAASyD,KAChBC,EAAU1D,SAAS2D,gBACnBjM,EAAY17B,OAAO4nC,aAAeF,EAAQhM,WAAa+L,EAAK/L,UAC5DmM,EAAa7nC,OAAO8nC,aAAeJ,EAAQG,YAAcJ,EAAKI,WAC9DE,EAAYL,EAAQK,WAAaN,EAAKM,WAAa,EACnDC,EAAaN,EAAQM,YAAcP,EAAKO,YAAc,EACtD1D,EAAMiD,EAAIjD,IAAM5I,EAAYqM,EAC5BE,EAAOV,EAAIU,KAAOJ,EAAaG,EACnC,OAAS1D,IAAK3nB,KAAKurB,MAAM5D,GAAM2D,KAAMtrB,KAAKurB,MAAMD,KAEpD1G,EAAMn/B,UAAUy/B,WAAa,SAAUv5B,GACnC,IAAI45B,EAAO38B,KAAKtJ,OACZksC,EAAe5iC,KAAKtJ,OAAOid,QAAQ7I,cAAc,sBACrD83B,EAAapoC,MAAMqoC,OAAS,GAC5B,IAAIzE,EAASr7B,EAAK3B,OAAS2J,UAAQhI,EAAK3B,OAAQ,MAAQ,KACpD0hC,EAAS1E,EAASA,EAAO10B,UAAY,EACrC2zB,KACAO,EAAgBjB,EAAKxgC,wBAAwB2mC,GAmBjD,GAlBA9iC,KAAKggC,kBACLhgC,KAAKi8B,SAAU,EACVl5B,EAAKtE,KAAK,GAIX4+B,EAAct6B,EAAKtE,KAHnB4+B,EAAY7kC,KAAKuK,EAAKtE,OAKV,IAAZqkC,EACA9iC,KAAK+iC,mBAAmB1F,EAAaO,IAGrC59B,KAAKi8B,SAAU,EACfj8B,KAAKs+B,iBAEJ3B,EAAK/V,gBAAgBC,UAAY7mB,KAAKi8B,SACvCU,EAAK1B,qBAAqBkD,WAAWp7B,EAAK+E,KAAMg7B,EAAQ//B,GAExD45B,EAAK/V,gBAAgBC,SAAU,CAE/B,IADImc,EAAcn4B,eAAa9H,EAAK3B,OAAQ,gBACzB4hC,EAAYpvB,KAAO5T,KAAKtJ,OAAOkwB,gBAAgBC,SAAU,CACvDmc,EAAYC,cAAc,GAChChI,qBAAqBkD,WAAWp7B,EAAK+E,KAAMg7B,EAAQ//B,IAGtE,GAAIA,EAAK3B,QAAU2J,UAAQhI,EAAK3B,OAAQ,IAAMu7B,EAAK/V,gBAAgBC,UAAW,CAC1E,IAAImc,GAAAA,EAAcn4B,eAAa9H,EAAK3B,OAAQ,iBAExCwhC,EAAapoC,MAAMqoC,OAAS,aAIxC7G,EAAMn/B,UAAUqK,WAAa,SAAUnE,GACnC,IAAI45B,EAAO38B,KAAKtJ,OA6ChB,GA3CKimC,EAAK/V,gBAAgBC,UAuBlB9jB,EAAK3B,QAAU2J,UAAQhI,EAAK3B,OAAQ,IAAMu7B,EAAK/V,gBAAgBC,WAAahc,eAAa9H,EAAK3B,OAAQ,eACtGyJ,eAAa9H,EAAK3B,OAAQ,cAAcwS,KAAO+oB,EAAK/V,gBAAgBC,YACpE3Q,WAAS,eAAgBlW,KAAK48B,aAAc75B,GAC5C45B,EAAK1zB,QjBldA,UiBkdwBlG,IACxBA,EAAKiG,QAAU2zB,EAAK/V,gBAAgBC,WACrC7mB,KAAKkjC,aAAangC,GACd45B,EAAK5hB,cACL4hB,EAAKn/B,SAAWwC,KAAK+8B,aAAaJ,EAAKn/B,aA7B/CqN,eAAa9H,EAAK3B,OAAQ,eACtBpB,KAAKtJ,OAAOid,QAAQ7I,cAAc,kBAClC9K,KAAK48B,aAAe,WAExB1mB,WAAS,eAAgBlW,KAAK48B,aAAc75B,GAC5CA,EAAK85B,UAAY95B,EAAK85B,YAAc95B,EAAKogC,UAAYnjC,KAAKojC,aAAargC,EAAK3B,OAAO8hB,eAAiBngB,EAAK85B,UACzGF,EAAK1zB,QjB/bA,UiB+bwBlG,GACxBA,EAAKiG,SACD7R,EAAgB6I,KAAKtJ,SACtBsJ,KAAK88B,SAAS/5B,GAEd45B,EAAK5hB,cACL4hB,EAAKn/B,SAAWwC,KAAK+8B,aAAaJ,EAAKn/B,WAE3Cm/B,EAAKhlC,KAAKu2B,UACLx2B,oBAAkBilC,EAAKzwB,mBAAmBpB,cAAc,wBACzD6xB,EAAKzwB,mBAAmBpB,cAAc,sBAAsBsb,WAkB5EpmB,KAAK8/B,0BACL9/B,KAAK6/B,oBACAnoC,oBAAkBsI,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqB,IAG7EngB,oBAAkBsI,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoB,KACvF7X,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoB,GAAGuO,SAHlEpmB,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqB,GAAGuO,SAKnEpmB,KAAKtJ,OAAO4I,sBAAwBU,KAAKtJ,OAAOma,cAAgBnZ,oBAAkBqL,EAAKtE,KAAK,GAAa,YAAI,CAC7G,IAAIvE,EAAQ8F,KAAKtJ,OAAO0I,gBACxBlF,GAAgB,EAChB,IAAI29B,EAAkB73B,KAAKtJ,OAAO6E,0BAA0B,GACxDmO,EAAW1J,KAAKtJ,OAAOiB,KAAKmH,wBAAwBiE,EAAKtE,KAAK,GAAGo5B,IACjEl5B,EAAMqB,KAAKtJ,OAAOmI,UAAU6K,GAC5BjL,EAAOsE,EAAKtE,KAAK,GACrB,GAA0B,kBAAtBuB,KAAK48B,aAAkC,CACvC,IAAIlkC,KACAoP,KACJpP,EAAOF,KAAKiG,GACZqJ,EAAKtP,KAAKmG,GAEVF,EAAO1F,EAAciH,KAAKtJ,OAAQqM,EAAKtE,KAAK,GAAiB,gBAC7DiL,EAAW1J,KAAKtJ,OAAOiB,KAAKmH,wBAAwBL,EAAKo5B,IACzD,IAAIqF,EAAYl9B,KAAKtJ,OAAOmI,UAAU6K,GACtChR,EAAOF,KAAKiG,GACZqJ,EAAKtP,KAAK0kC,GACV,IAAK,IAAI7lC,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAC/B2I,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAM/F,EAAOrB,GAAIoI,KAAMqI,EAAKzQ,GAAGqI,MAAMxF,GACrCyF,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,iBAClDS,YAAa,mBAGrB,IAAI+X,EAAYslB,EAAUrlB,uBAAuB,sBAAsB,GAClEngB,oBAAkBkgB,KACnBvK,eAAauK,GAAY,sBACzBxH,YAAUwH,GAAY,0BAI1B5X,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAMA,EAAMgB,KAAMd,EAAIe,MAAMxF,GAC5ByF,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,iBAClDS,YAAa,qBAK7Bm8B,EAAMn/B,UAAUqmC,aAAe,SAAUngC,GACrC,IAIIsgC,EAJA1G,EAAO38B,KAAKtJ,OACZ2pC,EAAYt1B,UAAQhI,EAAK3B,OAAQ,MACjCkiC,EAAcC,MAAMvjC,KAAKojC,aAAa/C,IAAc,EAAIrgC,KAAKojC,aAAa/C,GAC1E2C,EAAcn4B,eAAa9H,EAAK3B,OAAQ,cAE5C,GAAI4hC,GAAeA,EAAYpvB,KAAO5T,KAAKtJ,OAAOkwB,gBAAgBC,WAAapwB,EAAauJ,KAAKtJ,UACzFS,EAAgB6I,KAAKtJ,QAAS,CAClC2sC,EAAaL,EAAYC,cAAc,GAGvC,IAAK,IAFD/qC,EAAUykC,EAAKl0B,qBACfusB,KACK39B,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC29B,EAAQ39B,GAAKa,EAAQb,GAAG6C,MAE5B,IAAIuE,EAAO4kC,EAAW1sC,WACtB,GAA6B,MAAzBqJ,KAAKtJ,OAAOwG,YAAsBxF,oBAAkBsI,KAAK48B,eAAuC,kBAAtB58B,KAAK48B,cAA0D,YAAtB58B,KAAK48B,gBAAiCn+B,EAAW,OAAG,CAElK,IADD+kC,KACJ,IAASnsC,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC,GAAIa,EAAQb,GAAGgC,gBAAiB,CAC5BmqC,EAAWhrC,KAAKN,EAAQb,IAExB,IAAK,IADD2G,EAAQ5E,EAAoBlB,EAAQb,IAC/BshC,EAAM,EAAGA,EAAM36B,EAAMzG,OAAQohC,IAClC6K,EAAWhrC,KAAKwF,EAAM26B,IAI9B6K,EAAWjsC,SACXW,EAAUsrC,GAGlB7G,EAAK9pB,OAAO4pB,IAAqBzH,QAASA,EAAS98B,QAASA,IAC5DmrC,EAAWxwB,OAAO0pB,IAAkBvB,QAASsI,EAAaprC,QAASA,IACnE,IAAIurC,EAAqBJ,EAAWpI,qBAAqB9gB,aACzD,IAAKziB,oBAAkB+rC,GACnB,IAASpsC,EAAI,EAAGA,EAAIosC,EAAmBlsC,OAAQF,IAE3C,GADAosC,EAAmBpsC,GAAG6C,MAAQ7C,GACzBK,oBAAkB+rC,EAAmBpsC,GAAGyB,YAAa,CACtD,IAAI4qC,EAAcrlC,WAAS,sBAAwBolC,EAAmBpsC,GAAGiH,eAAiB,SAAU+kC,GACpGI,EAAmBpsC,GAAGyB,WAAWoB,MAAQwpC,EAIrD/G,EAAKhlC,KAAKu2B,UACVmV,EAAW1rC,KAAKu2B,UACZmV,EAAW1rC,KAAKhB,WAAWY,OAAS,IACpC8rC,EAAW1rC,KAAKu2B,UACXx2B,oBAAkB2rC,EAAWn3B,mBAAmBpB,cAAc,wBAC/Du4B,EAAWn3B,mBAAmBpB,cAAc,sBAAsBsb,SAEjE1uB,oBAAkB2rC,EAAWlP,aAAarpB,cAAc,uBACzDu4B,EAAWlP,aAAarpB,cAAc,qBAAqBsb,UAInEjvB,EAAgB6I,KAAKtJ,UACrB2sC,EAAaL,EAAYC,cAAc,GACvCtG,EAAKhlC,KAAKu2B,UACVmV,EAAW1rC,KAAKu2B,YAGxB8N,EAAMn/B,UAAUumC,aAAe,SAAU/C,GACrC,OAAOA,EAAYttB,SAASstB,EAAUl0B,aAAa,iBAAkB,IAAM,GAE/E6vB,EAAMn/B,UAAU9D,cAAgB,SAAUL,GACtC,IAAII,EAAaJ,EAAOI,WACxB,GAA0B,kBAAtBkH,KAAK48B,aAAkC,CACvC,IAAI+G,EAAiB3jC,KAAKtJ,OAAO+R,qBAAqB,GACtDzI,KAAK49B,cAAgB7kC,EAAciH,KAAKtJ,OAAQitC,EAAe7qC,WAAWE,UAE9E,GAA0B,kBAAtBgH,KAAK48B,aAAkC,CAC3B58B,KAAKtJ,OAAO+R,qBAAqB,GAAGtO,QAClCrB,EAAWqB,MACrB6F,KAAK49B,cAAgB7kC,EAAciH,KAAKtJ,OAAQoC,EAAWE,UAG3DgH,KAAKjH,cAAcD,KAI/BkjC,EAAMn/B,UAAUigC,SAAW,SAAU/5B,EAAM6gC,GACvC,GAA0B,YAAtB5jC,KAAK48B,eAA+BnmC,EAAauJ,KAAKtJ,QAAS,CAC/D,IACImtC,EADAlH,EAAO38B,KAAKtJ,OAEZknC,OAAgB,EACpB,GAAIlmC,oBAAkBqL,EAAK85B,WAAY,CACnC,IAAInzB,EAAWizB,EAAK10B,wBAAwB,GAAK,EAC7CvP,EAASikC,EAAKxgC,wBAAwBuN,GAC1C1J,KAAKjH,cAAcL,QAGnBqK,EAAK85B,UAAY95B,EAAK85B,YAAc95B,EAAKogC,UAAYnjC,KAAKojC,aAAargC,EAAK3B,OAAO8hB,eAAiBngB,EAAK85B,UACzG78B,KAAK49B,cAAgBjB,EAAKxgC,wBAAwB4G,EAAK85B,WAE3D,IAAIQ,KACJO,EAAgB59B,KAAK49B,cAChB76B,EAAKtE,KAAK,GAIX4+B,EAAct6B,EAAKtE,KAHnB4+B,EAAY7kC,KAAKuK,EAAKtE,MAK1B,IAAI4P,EAAQ,EACRsyB,EAAe3gC,KAAKtJ,OAAOkwB,gBAAgBC,SAC/C7mB,KAAK8jC,eAAiBnD,EACjBA,EAID3gC,KAAKm8B,cAAgBwE,GAAgB3gC,KAAKk8B,mBAH1Cl8B,KAAK+iC,mBAAmB1F,EAAaO,GAKzC,IAAImG,EAAa1G,EAAY9lC,OACxBG,oBAAkBsI,KAAKtJ,OAAOwG,YAC/BmgC,EAAY2G,UAuFhB,IAAK,IArFDC,EAAU,SAAU5sC,GAGpB,GAFAwsC,EAAkBxG,EAAYhmC,GAC9B6sC,EAAO9G,cAAgByG,EACK,YAAxBK,EAAOtH,aAA4B,CAInC,GAHKD,EAAK/V,gBAAgBC,WAAY+c,GAClCM,EAAO1G,gBAEP0G,EAAO9G,gBAAkB8G,EAAOtG,cAAe,CAC/C,IAAIuG,EAAeD,EAAOd,aAAargC,EAAK3B,OAAOgjC,aAAalhB,eAC5DqgB,MAAMY,KACNA,EAAeD,EAAOd,aAAargC,EAAK3B,OAAO8hB,gBAEnDngB,EAAK85B,UAAYsH,EACjBvG,EAAgBsG,EAAOtG,cAAgBsG,EAAOxtC,OAAOyF,wBAAwB4G,EAAK85B,WAEtF,GAAIe,EAAc9kC,YAAsC,kBAAxBorC,EAAOtH,aAAkC,EAG7C,KADpByH,GADAnqB,EAAgByiB,EAAKp/B,YACUiB,QAAQ0lC,EAAO9G,iBAE9CljB,EAAc/c,OAAOknC,EAAgB,GAG7C,IAAIC,EAAeJ,EAAO/pB,aAAa3b,QAAQo/B,GAE/C,GADAsG,EAAOK,UAAUD,GACW,kBAAxBJ,EAAOtH,aAAkC,CAqBzC,GApBKgB,EAAcvkC,iBAOfgV,EAAQ61B,EAAOM,cAAc5G,EAAe,GACxCsG,EAAOxtC,OAAOuG,iBACdinC,EAAO1oC,SAAS2B,OAAOmnC,EAAej2B,EAAQ,EAAG,EAAG61B,EAAO9G,cAAchjC,UAE7E8pC,EAAO/pB,aAAahd,OAAOmnC,EAAej2B,EAAQ,EAAG,EAAG61B,EAAO9G,iBAV3D8G,EAAOxtC,OAAOuG,iBACdinC,EAAO1oC,SAAS2B,OAAOmnC,EAAe,EAAG,EAAGJ,EAAO9G,cAAchjC,UAErE8pC,EAAO/pB,aAAahd,OAAOmnC,EAAe,EAAG,EAAGJ,EAAO9G,gBASvD1lC,oBAAkBkmC,EAAc9kC,qBACzB+qC,EAAgB/qC,WACvB+qC,EAAgB1pC,MAAQ,EACpB+pC,EAAOxtC,OAAOuG,kBACd4mC,EAAgBK,EAAOxtC,OAAOuG,iBAAmB,OAGrD2gC,EAAc9kC,WAAY,CAC1B,IACIQ,EADM4qC,EAAO7H,0BAA0BuB,EAAct/B,gBAClC,GAAGhF,aACtBmrC,EAAqBnrC,EAAakF,QAAQo/B,GAAiB,EAC/DtkC,EAAa6D,OAAOsnC,EAAoB,EAAGZ,GAC3CA,EAAgB/qC,WAAa8kC,EAAc9kC,WAC3C+qC,EAAgBvlC,eAAiBs/B,EAAct/B,eAC3C4lC,EAAOxtC,OAAOuG,kBACd4mC,EAAgBK,EAAOxtC,OAAOuG,iBAAmB2gC,EAAcsG,EAAOxtC,OAAOuG,iBAC7E4mC,EAAgB/qC,WAAa8kC,EAAc9kC,WAC3C+qC,EAAgB1pC,MAAQyjC,EAAczjC,OAG9C,GAAI0pC,EAAgBxqC,gBAAiB,CAEjC6qC,EAAOQ,uBAAuBb,EADlB,GAEZK,EAAOS,kBAAkBd,EAAiBS,EAAej2B,EAAQ,IAGzE61B,EAAOU,WAAWN,GAEtB,GAAI5sC,oBAAkBmsC,EAAgB/qC,YAAa,CAC/C,IAAIohB,EACAmqB,GADAnqB,EAAgByiB,EAAKp/B,YACUiB,QAAQ0lC,EAAOtG,eAC9CiH,EAAc,EAClB3qB,EAAczc,OAAO,SAAUC,GACvBmmC,EAAgB7qC,WAAa0E,EAAE1E,UAC/B6rC,MAGoB,kBAAxBX,EAAOtH,cAAoD,IAAhBiI,EAC3C3qB,EAAc/c,OAAOknC,EAAiB,EAAG,EAAGR,GAEf,eAAxBK,EAAOtH,cAAiD,IAAhBiI,GAC7C3qB,EAAc/c,OAAOknC,EAAgB,EAAGR,GAGhDlH,EAAK1B,qBAAqBwC,yBAE1ByG,EAASlkC,KACJ3I,EAAI,EAAGA,EAAI0sC,EAAY1sC,IAC5B4sC,EAAQ5sC,KAIpB2kC,EAAMn/B,UAAU+nC,WAAa,SAAU71B,GACnC,IAAI4tB,EAAO38B,KAAKtJ,OACZ4C,EAAeF,EAAoB4G,KAAK49B,eACxCkH,EAAsBptC,oBAAkB4B,IAChB,IAAxBA,EAAa/B,OAAgBwX,EAAc,EAC3CzV,EAAa/B,OAASwX,EAAc,EACd,kBAAtB/O,KAAK48B,eACDD,EAAK1/B,iBACL+C,KAAKxE,SAAS2B,OAAO2nC,EAAoB,EAAG9kC,KAAKo9B,cAAchjC,UAC/D4F,KAAKma,aAAahd,OAAO2nC,EAAoB,EAAG9kC,KAAKo9B,gBAGrDp9B,KAAKma,aAAahd,OAAO2nC,EAAoB,EAAG9kC,KAAKo9B,eAEzDp9B,KAAK+kC,cACD/kC,KAAKo9B,cAAc/jC,iBACnB2G,KAAK2kC,kBAAkB3kC,KAAKo9B,cAAe0H,KAIvD9I,EAAMn/B,UAAU0nC,UAAY,SAAUD,GAClC,IAAI3H,EAAO38B,KAAKtJ,OAChB,GAA0B,eAAtBsJ,KAAK48B,aAA+B,CAQpC,GAPID,EAAK1/B,iBACL+C,KAAKxE,SAAS2B,OAAOmnC,EAAc,EAAGtkC,KAAKo9B,cAAchjC,UAE7D4F,KAAKo9B,cAActkC,WAAakH,KAAKma,aAAamqB,GAAcxrC,WAChEkH,KAAKo9B,cAAc9+B,eAAiB0B,KAAKma,aAAamqB,GAAchmC,eACpE0B,KAAKo9B,cAAcjjC,MAAQ6F,KAAKma,aAAamqB,GAAcnqC,MAC3D6F,KAAKma,aAAahd,OAAOmnC,EAAc,EAAGtkC,KAAKo9B,eAC3Cp9B,KAAKo9B,cAAc/jC,gBAAiB,CAEpC2G,KAAK2kC,kBAAkB3kC,KAAKo9B,cAAekH,GAC3CtkC,KAAK0kC,uBAAuB1kC,KAAKo9B,cAFrB,GAIhB,GAAIp9B,KAAK49B,cAAc9kC,WAAY,CAC/B,IACIQ,EADM0G,KAAKq8B,0BAA0Br8B,KAAK49B,cAAct/B,gBACrC,GAAGhF,aACtBmrC,EAAqBnrC,EAAakF,QAAQwB,KAAK49B,eACnDtkC,EAAa6D,OAAOsnC,EAAoB,EAAGzkC,KAAKo9B,kBAI5DpB,EAAMn/B,UAAUkoC,YAAc,WAC1B,IAAIpI,EAAO38B,KAAKtJ,OACZ0mC,EAAgBp9B,KAAKo9B,cACrBQ,EAAgB59B,KAAK49B,cACrBoH,EAAYrI,EAAKv/B,aAWrB,GAVKwgC,EAAcvkC,kBACfukC,EAAcvkC,iBAAkB,EAChCukC,EAAc5rB,yBAA0B,GACpCta,oBAAkBkmC,EAActkC,eAAuD,IAAtCskC,EAActkC,aAAa/B,UAC5EqmC,EAActkC,iBACTqjC,EAAK1/B,iBAAmBvF,oBAAkBkmC,EAAcxjC,SAAS4qC,MAClEpH,EAAcxjC,SAAS4qC,SAIT,kBAAtBhlC,KAAK48B,aAAkC,CACvC,IAAI9jC,EAAasD,YAAWwhC,UACrB9kC,EAAWQ,aAClB8jC,EAActkC,WAAaA,EAC3BskC,EAAc9+B,eAAiBs/B,EAAc5kC,SAC7C4kC,EAActkC,aAAa6D,OAAOygC,EAActkC,aAAa/B,OAAQ,EAAG6lC,GASxE,GAPIT,EAAoB,kBACpBiB,EAAcjB,EAAKv/B,iBACnBwgC,EAAcjB,EAAKv/B,cAAcD,OAAOygC,EAAcjB,EAAKv/B,cAAc7F,OAAQ,EAAG6lC,IAEnF1lC,oBAAkB0lC,IAAmBT,EAAK1/B,iBAAoBvF,oBAAkBkmC,EAAcxjC,SAAS4qC,KACxGpH,EAAcxjC,SAASuiC,EAAKv/B,cAAcD,OAAOygC,EAActkC,aAAa/B,OAAQ,EAAG6lC,EAAchjC,UAEpGgjC,EAAc/jC,gBAGd,CAED+jC,EAAcjjC,MAAQyjC,EAAczjC,MAAQ,EAC5C6F,KAAK0kC,uBAAuBtH,EAFhB,QAHZA,EAAcjjC,MAAQyjC,EAAczjC,MAAQ,EAOhDyjC,EAAczkC,UAAW,IAGjC6iC,EAAMn/B,UAAU2gC,cAAgB,WACxBx9B,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,SAChEsJ,KAAKma,aAAena,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAC3DuE,KAAKxE,SAAWwE,KAAKtJ,OAAOC,WAAWA,WAAW8E,OAGlDuE,KAAKma,aAAena,KAAKtJ,OAAOiB,KAAKhB,WACrCqJ,KAAKxE,SAAWwE,KAAKtJ,OAAOC,YAEhC,IAAIsuC,EAAalsC,EAAciH,KAAKtJ,OAAQsJ,KAAKo9B,cAAcpkC,WAC1DtB,oBAAkButC,EAAW3rC,eAAiB2rC,EAAW3rC,aAAa/B,SACvE0tC,EAAW5rC,iBAAkB,GAEjC2G,KAAKklC,cAAcD,IAEvBjJ,EAAMn/B,UAAU8nC,kBAAoB,SAAUjsC,EAAQ2V,GAClD,IAAIQ,EACA8tB,EAAO38B,KAAKtJ,OACZa,EAAS,EACb,IAAKmB,EAAOW,gBACR,OAAO,EAEX9B,EAASmB,EAAOY,aAAa/B,OAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IACxBwX,EAAgBxQ,WAAS,sBAAwB3F,EAAOY,aAAajC,GAAG2B,SAAU2jC,GAClFtuB,IACAsuB,EAAKn/B,SAASL,OAAOkR,EAAO,EAAGQ,GAC/BqH,WAAS,sBAAwBrH,EAAc7V,SAAU6V,EAAe7O,KAAKtJ,QACzEimC,EAAK1/B,iBACL+C,KAAKxE,SAAS2B,OAAOkR,EAAO,EAAGQ,EAAczU,UAE7CyU,EAAcxV,kBACdgV,EAAQrO,KAAK2kC,kBAAkB91B,EAAeR,IAGtD,OAAOA,GAEX2tB,EAAMn/B,UAAU6nC,uBAAyB,SAAUhsC,EAAQyB,GACvD,IACI0U,EADAtX,EAAS,EAGb,GADA4C,KACKzB,EAAOW,gBACR,OAAO,EAEX9B,EAASmB,EAAOY,aAAa/B,OAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IAAK,CAC7BwX,EAAgBxQ,WAAS,sBAAwB3F,EAAOY,aAAajC,GAAG2B,SAAUgH,KAAKtJ,QACvF,IAAI6G,OAAa,EACb7E,EAAOI,aACPyE,EAAaxE,EAAciH,KAAKtJ,OAAQgC,EAAOI,WAAWE,WAE1DtB,oBAAkB6F,KAAgB7F,oBAAkBgB,EAAOI,cAC3DyE,EAAa7E,EAAOI,YAExB+V,EAAc1U,MAAQzB,EAAOI,WAAayE,EAAWpD,MAAQA,EAAQzB,EAAOyB,MAAQ,EAChF0U,EAAcxV,kBACdc,IACAA,EAAQ6F,KAAK0kC,uBAAuB71B,EAAe1U,IAG3D,OAAOA,GAEX6hC,EAAMn/B,UAAUqoC,cAAgB,SAAUxsC,GACtC,IACI/B,EADAgmC,EAAO38B,KAAKtJ,OAGZC,EADAqJ,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QACnDsJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KAGlCuE,KAAKtJ,OAAOC,WAE7B,IAAIsuC,EAAavsC,EACbsC,GAAmBtD,oBAAkBilC,EAAK1/B,iBAC1CkoC,EAAiBnlC,KAAKq8B,0BAA0B4I,EAAW3mC,gBAAgB,GAC/E,GAAI2mC,EAAY,CACZ,GAAIA,EAAWnsC,WAAY,CACvB,IAAIQ,EAAe6rC,EAAiBA,EAAe7rC,gBAC/C8rC,EAAa,EACb9rC,GAAgBA,EAAa/B,OAAS,IACtC6tC,EAAa9rC,EAAakF,QAAQymC,GAClCE,EAAe7rC,aAAa6D,OAAOioC,EAAY,GAC1CplC,KAAKtJ,OAAOuG,iBACbpC,GAAaZ,MAAOgrC,EAAY3pC,OAAQ,UAAY0E,KAAKtJ,OAAQsE,EAAiBiqC,EAAW/qC,MAAO+qC,EAAW/qC,QAI3H,GAAIyiC,EAAK1/B,gBAAiB,CAClBgoC,EAAW5rC,iBAAmB4rC,EAAW3rC,aAAa/B,OAAS,GAC/DyI,KAAKqlC,gBAAgBJ,GAKzB,IAAK,IAHDtH,OAAM,EACN2H,OAAM,EACNnrB,EAAexjB,EACVU,EAAI,EAAGA,EAAI8iB,EAAa5iB,OAAQF,IACjC8iB,EAAa9iB,GAAG2I,KAAKtJ,OAAOwG,aAAe+nC,EAAW7qC,SAAS4F,KAAKtJ,OAAOwG,aAC3EygC,EAAMtmC,GAGd,IAASA,EAAI,EAAGA,EAAI2I,KAAKma,aAAa5iB,OAAQF,IACtC2I,KAAKma,aAAa9iB,GAAG2I,KAAKtJ,OAAOwG,aAAe+nC,EAAW7qC,SAAS4F,KAAKtJ,OAAOwG,aAChFooC,EAAMjuC,IAGD,IAATsmC,GAAejmC,oBAAkBimC,IACjChnC,EAAWwG,OAAOwgC,EAAK,IAEd,IAAT2H,GAAe5tC,oBAAkB4tC,IACjCtlC,KAAKma,aAAahd,OAAOmoC,EAAK,GAGtC,IAAIv2B,EAAc/O,KAAKma,aAAa3b,QAAQymC,GAC5C,IAAKtI,EAAK1/B,gBAAiB,CACvB,IAAIsoC,EAAcvlC,KAAKtJ,OAAO6G,WAAWiB,QAAQymC,IAC5B,IAAjBM,IACA5I,EAAKp/B,WAAWJ,OAAOooC,EAAa,GACpC5uC,EAAWwG,OAAOooC,EAAa,IAGvC,IAAqB,IAAjBx2B,IAAuB4tB,EAAK1/B,gBAE5B,IAAK,IADD46B,EAAkB8E,EAAKphC,0BAA0B,GAC5CxB,EAAI,EAAGA,EAAIiG,KAAKma,aAAa5iB,OAAQwC,IACtCiG,KAAKma,aAAapgB,GAAG89B,KAAqBoN,EAAWpN,KACrD9oB,EAAchV,GAI1B,IAAK4iC,EAAK1/B,gBAAiB,CACvB,IAAIuoC,EAAqBxlC,KAAKwkC,cAAcS,EAAY,GACxDjlC,KAAKma,aAAahd,OAAO4R,EAAay2B,EAAqB,GAE3DP,EAAWnsC,YAAcqsC,GAAkBA,EAAe7rC,eAAiB6rC,EAAe7rC,aAAa/B,SACvG4tC,EAAehsC,UAAW,EAC1BgsC,EAAe9rC,iBAAkB,EACjC8rC,EAAenzB,yBAA0B,KAIrDgqB,EAAMn/B,UAAUwoC,gBAAkB,SAAU3sC,GACxC,IAAImW,EACA8uB,EACA2H,EACA3uC,EAEAA,EADAqJ,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QACnDsJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KAGlCuE,KAAKtJ,OAAOC,WAE7B,IAAK,IAAIU,EAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAAK,CACjDwX,EAAgBnW,EAAOY,aAAajC,IAC/BK,oBAAkBmX,EAAcvV,eAAiBuV,EAAcvV,aAAa/B,SAC7EsX,EAAcxV,iBAAkB,GAEpC,IAAI8gB,OAAe,EAEfA,EADAna,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QACjDsJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KAGlCuE,KAAKtJ,OAAOC,WAE/B,IAAK,IAAI8uC,EAAM,EAAGA,EAAMtrB,EAAa5iB,OAAQkuC,IACrCtrB,EAAasrB,GAAKzlC,KAAKtJ,OAAOwG,aAAe2R,EAAczU,SAAS4F,KAAKtJ,OAAOwG,aAChFygC,EAAM8H,GAGd,IAAK,IAAIC,EAAM,EAAGA,EAAM1lC,KAAKma,aAAa5iB,OAAQmuC,IAC9C,GAAI1lC,KAAKma,aAAaurB,GAAK1lC,KAAKtJ,OAAOwG,aAAe2R,EAAczU,SAAS4F,KAAKtJ,OAAOwG,WAAY,CACjGooC,EAAMI,EACN,OAGK,IAAT/H,GAAejmC,oBAAkBimC,IACjChnC,EAAWwG,OAAOwgC,EAAK,IAEd,IAAT2H,GAAe5tC,oBAAkB4tC,IACjCtlC,KAAKma,aAAahd,OAAOmoC,EAAK,GAE9Bz2B,EAAcxV,iBACd2G,KAAKqlC,gBAAgBx2B,KAIjCmtB,EAAMn/B,UAAU2nC,cAAgB,SAAU9rC,EAAQ2V,GAC9C,IAAIQ,EACJ,IAAKnW,EAAOW,gBACR,OAAO,EAEX,IAAK,IAAIhC,EAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAE5CgX,KADAQ,EAAgBnW,EAAOY,aAAajC,IAElBgC,kBACdgV,EAAQrO,KAAKwkC,cAAc31B,EAAeR,IAGlD,OAAOA,GAEX2tB,EAAMn/B,UAAUkmC,mBAAqB,SAAU4C,EAAgB92B,GAC3D,IAAIzH,EAAQpH,KACZ2lC,EAAeloC,OAAO,SAAUC,GAC5B,GAAIA,EAAErE,kBAAoB3B,oBAAkBgG,EAAEpE,cAAe,CAEzD,IAAe,IADHoE,EAAEpE,aAAakF,QAAQqQ,GAQ/B,OAHAzH,EAAMw1B,aAAe,UACrBx1B,EAAMk3B,oBACNl3B,EAAM60B,SAAU,GALhB70B,EAAM27B,mBAAmBrlC,EAAEpE,aAAcuV,OAWzDmtB,EAAMn/B,UAAU+M,QAAU,WACtB5J,KAAKwK,uBAMTwxB,EAAMn/B,UAAU2N,oBAAsB,WAC9BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIikB,GAAmB3uB,KAAKs8B,YACxCt8B,KAAKtJ,OAAOgU,IAAImkB,GAAmB7uB,KAAKkH,YACxClH,KAAKtJ,OAAOgU,IAAI6xB,GAAgBv8B,KAAKw8B,WACrCx8B,KAAKtJ,OAAOgU,IAAI+xB,GAAmBz8B,KAAK08B,eAW5CV,EAAMn/B,UAAU+F,cAAgB,WAC5B,MAAO,kBAEJo5B,KChpCPv7B,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5D25B,GAAiC,SAAUr5B,GAE3C,SAASq5B,IACL,OAAkB,OAAXr5B,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAK/D,OAPAS,GAAU06B,EAAiBr5B,GAI3BZ,IACIc,cACDm5B,EAAgBt+B,UAAW,gBAAY,GACnCs+B,GACTl5B,iBChCExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAuBxC6kC,GAA8C,SAAU9jC,GAExD,SAAS8jC,EAA6BlvC,GAClC,IAAI0Q,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,IAAWsJ,KAEzC,OADAoH,EAAM8C,mBACC9C,EA8DX,OAlEA3G,GAAUmlC,EAA8B9jC,GAMxC8jC,EAA6B/oC,UAAUqN,iBAAmB,WACtDlK,KAAKtJ,OAAOyT,GAAG07B,GAAqB7lC,KAAK8lC,SAAU9lC,OAEvD4lC,EAA6B/oC,UAAUipC,SAAW,SAAU/iC,GACxD/C,KAAK+lC,WAAahjC,EAAKtE,MAE3BmnC,EAA6B/oC,UAAUmpC,YAAc,WACjD,OAAOlkC,EAAOjF,UAAUopC,QAAQlpC,KAAKiD,OAEzC4lC,EAA6B/oC,UAAUqpC,aAAe,SAAUznC,EAAM+a,GAClE,IAAI2sB,EAAOnmC,KAAKgmC,cAShB,GARKtuC,oBAAkB8hB,EAAW4sB,eACW,UAArC5sB,EAAW4sB,YAAYtqB,WAA8D,SAArCtC,EAAW4sB,YAAYtqB,UACvEtC,EAAW4sB,YAAYC,aAAeF,EAAKE,aAG3C7sB,EAAW4sB,YAAYC,aAAermC,KAAKsmC,gBAAgB9sB,EAAW4sB,YAAYnsB,OAGrFja,KAAKtJ,OAAOC,sBAAsBC,oBAAyDgnB,IAA1C5d,KAAKtJ,OAAOC,WAAWA,WAAW4vC,MAChFvmC,KAAKtJ,OAAOC,WAAWA,WAAW4tB,SAAqD,KAA1CvkB,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAAepvC,EAAgB6I,KAAKtJ,QACvH,OAAOoL,EAAOjF,UAAUqpC,aAAanpC,KAAKiD,KAAMvB,EAAM+a,GAGjD9hB,oBAAkB8hB,EAAW3Z,cAAsD,gBAAtC2Z,EAAW3Z,YAAY+H,aACrE4R,EAAW3Z,YAAc,WAG7B,IAAK,IADDiI,EAAOhG,EAAOjF,UAAUqpC,aAAanpC,KAAKiD,KAAMvB,EAAM+a,GACjDhY,EAAI,EAAGA,EAAIsG,EAAKvQ,OAAQiK,IAC7BsG,EAAKtG,GAAGtH,MAAS8F,KAAe,WAAExB,QAAQsJ,EAAKtG,GAAG/C,MAEtD,OAAOqJ,GAGf89B,EAA6B/oC,UAAU2pC,mBAAqB,SAAUlrC,GAClE,IAAImrC,GAAS,SAAU,UAAW,UAAW,YAAa,YAAa,UACnE,OAAQ,UAAUzgB,KAAK,SAAU/rB,GAAS,OAAOqB,IAAWrB,IAChE,GAAK+F,KAAKtJ,OAAOC,sBAAsBC,oBAAyDgnB,IAA1C5d,KAAKtJ,OAAOC,WAAWA,WAAW4vC,MAChFvmC,KAAKtJ,OAAOC,WAAWA,WAAW4tB,SAAqD,KAA1CvkB,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAAepvC,EAAgB6I,KAAKtJ,QAAS,CAChI,IACIqjB,EAAc/Z,KAAU,MAAE+Z,YAC1B0sB,GACAzmC,KAAK0mC,SACL1mC,KAAKvB,QACLuB,KAAK2mC,WAEW,kBAAXrrC,GAA8B0E,KAAK0mC,MAAM3sB,IAC9C/Z,KAAK0mC,MAAM3sB,GAAaxiB,OAAUyI,KAAKtJ,OAAoB,cAAEkwC,uBACtD5mC,KAAK0mC,MAAM3sB,QAIlB0sB,GAAoB,kBAAXnrC,KACT0E,KAAK0mC,SACL1mC,KAAKvB,QACLuB,KAAK2mC,WAGb,OAAOF,GAEJb,GACTiB,4BCnFEC,GAAwB,WAMxB,SAASA,EAAOpwC,GACZ+L,OAAKC,OAAOqkC,UACZ/mC,KAAKtJ,OAASA,EACdsJ,KAAKgnC,mBAAoB,EACzBhnC,KAAKmO,kBACLnO,KAAKinC,oBACLjnC,KAAKknC,sBACLlnC,KAAKkK,mBAiNT,OAzMA48B,EAAOjqC,UAAU+F,cAAgB,WAC7B,MAAO,UAQXkkC,EAAOjqC,UAAU+M,QAAU,WACvB5J,KAAKwK,uBAMTs8B,EAAOjqC,UAAUqN,iBAAmB,WAChClK,KAAKtJ,OAAOyT,GAAG,mBAAoBnK,KAAKmnC,sBAAuBnnC,MAC/DA,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAKonC,iBAAkBpnC,OAM1D8mC,EAAOjqC,UAAU2N,oBAAsB,WAC/BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,mBAAoB1K,KAAKmnC,uBACzCnnC,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAKonC,oBAUzCN,EAAOjqC,UAAUsqC,sBAAwB,SAAUE,GAC/CnxB,WAAS,8BAAgClW,KAAKtJ,QAC9CsJ,KAAKinC,iBAAmBI,EAAY5oC,KACpCuB,KAAKknC,sBACLlnC,KAAKmO,kBACLnO,KAAKgnC,mBAAoB,EACzB,IAAK,IAAIpL,EAAI,EAAGA,EAAI57B,KAAKinC,iBAAiB1vC,OAAQqkC,IAAK,CACnD,IAAIhtB,EAAM5O,KAAKinC,iBAAiBrL,GAChC57B,KAAKsnC,gBAAgB14B,GACrB,IAAI9W,EAAwD,KAAxCkI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAamI,KAAKtJ,OAAOsB,eAAeF,cACtFkI,KAAKtJ,OAAOkB,eAAeE,cACT,UAAlBA,GAA+C,SAAlBA,GACqB,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,MACzFmI,KAAKgnC,mBAAoB,GAE7B,IAAIO,EAAUhvC,YAAU,eAAgBqW,IACnClX,oBAAkB6vC,IAAYA,EAAQhwC,QACvC2e,WAAS,0BAA2BlW,KAAKwnC,iBAAiB54B,GAAMA,GAEpE,IAAI64B,EAAWlvC,YAAU,aAAcqW,GACvC,IAAKlX,oBAAkB+vC,GAAW,CAC9B,IAAIC,EAAY3uC,EAAciH,KAAKtJ,OAAQkY,EAAI9V,WAAWE,UAAU,GAGpEkd,WAAS,2BAA2B,EAAMwxB,GACtCA,GAAaA,EAAU5uC,YACvBkH,KAAK2nC,2BAA2BD,IAIxC1nC,KAAKinC,iBAAiB1vC,OAAS,GAAKyI,KAAKgnC,mBACzChnC,KAAK4nC,oBAET5nC,KAAKtJ,OAAOmc,OAAO,gBAAkBkB,OAAQ/T,KAAKmO,kBAEtD24B,EAAOjqC,UAAU8qC,2BAA6B,SAAUjvC,GACpD,IAAIgvC,EAAY3uC,EAAciH,KAAKtJ,OAAQgC,EAAOI,WAAWE,UAAU,GACnE6uC,EAAgBxpC,WAAS,2BAA4B2B,KAAKtJ,QAC1DgxC,GAAarvC,OAAOwE,UAAUC,eAAeC,KAAK8qC,EAAeH,EAAU1uC,WAC3Ekd,WAAS,2BAA2B,EAAMwxB,GAE1CA,GAAaA,EAAU5uC,YACvBkH,KAAK2nC,2BAA2BD,IAGxCZ,EAAOjqC,UAAUyqC,gBAAkB,SAAU5uC,GACzC,IAAIhC,EAASqC,EAAciH,KAAKtJ,OAAQgC,EAAO4F,gBAI/C,GAAsB,UAFsC,KAAxC0B,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAamI,KAAKtJ,OAAOsB,eAAeF,cACtFkI,KAAKtJ,OAAOkB,eAAeE,gBACmD,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1B,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IA2BlC,CACD,IAAKH,oBAAkBhB,GAAS,CAGJ,WAFsC,KAAxCsJ,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAClDmI,KAAKtJ,OAAOsB,eAAeF,cAAgBkI,KAAKtJ,OAAOkB,eAAeE,gBACa,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC7B,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAMnCmI,KAAKsnC,gBAAgB5wC,IAL0B,IAA3CsJ,KAAKinC,iBAAiBzoC,QAAQ9H,IAC9BsJ,KAAKsnC,gBAAgB5wC,IAOY,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9F,KAC5BsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,cA1CzE,GAAIgB,oBAAkBhB,IAClB,IAA+C,IAA3CsJ,KAAKinC,iBAAiBzoC,QAAQ9F,GAM9B,aAL6C,IAAzCsH,KAAKmO,eAAe3P,QAAQ9F,KAC5BsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,QACrEgC,EAAOsZ,yBAA0B,SAMzChS,KAAKsnC,gBAAgB5wC,IAC0B,IAA3CsJ,KAAKinC,iBAAiBzoC,QAAQ9H,KAA2D,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9H,IAC/B,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9F,KAC5BsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,UAI5B,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9F,KAA6D,IAA3CsH,KAAKinC,iBAAiBzoC,QAAQ9F,KAC5EsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,UAyBzFowC,EAAOjqC,UAAU2qC,iBAAmB,SAAUtvC,GAG1C,IAAK,IAFD4vC,EAAWvvC,YAAU,eAAgBL,GACrC6vC,GAAU,EACL15B,EAAQ,EAAGA,EAAQy5B,EAASvwC,OAAQ8W,IAAS,CAClD,IAAIk5B,EAAUO,EAASz5B,GAAO/U,aAC1BxB,EAAwD,KAAxCkI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAChDmI,KAAKtJ,OAAOsB,eAAeF,cAAgBkI,KAAKtJ,OAAOkB,eAAeE,cAC1E,KAAwB,UAAlBA,GAA+C,SAAlBA,GAAiF,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1D,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,KAAc,CACjD,IAAIgwC,EAAgBxpC,WAAS,2BAA4B2B,KAAKtJ,QACzD2B,OAAOwE,UAAUC,eAAeC,KAAK8qC,EAAeC,EAASz5B,GAAOrV,YACrEgH,KAAKmO,eAAe3V,KAAKsvC,EAASz5B,IAClC6H,WAAS,4BAA8B4xB,EAASz5B,GAAOrV,SAAU8uC,EAASz5B,GAAQrO,KAAKtJ,QACvFqxC,GAAU,GAGlB,GAAuB,SAAlBjwC,IACsD,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,OACpC,IAApDmI,KAAKinC,iBAAiBzoC,QAAQspC,EAASz5B,IAAgB,CACvD05B,GAAU,EACV,OAGHrwC,oBAAkB6vC,IAAYA,EAAQhwC,SACvCwwC,EAAU/nC,KAAKwnC,iBAAiBM,EAASz5B,KAEtB,UAAlBvW,GAA+C,SAAlBA,IAA6BgwC,EAASvwC,SACpEwwC,GAAU,GAGlB,OAAOA,GAEXjB,EAAOjqC,UAAU+qC,kBAAoB,WAGjC,IAAK,IAFDlvC,EAASsH,KAAKmO,eACd/V,EAAM4H,KAAKmO,eAAe5W,OACrB+J,EAAI,EAAGA,EAAIlJ,EAAKkJ,IAAK,CAC1B,IAAI0mC,EAAWjvC,EAAciH,KAAKtJ,OAAQgC,EAAO4I,GAAGhD,gBAEpD,IAD2C,IAA9B5F,EAAO8F,QAAQwpC,GAChB,CACR,IAAIC,EAAWlvC,EAAciH,KAAKtJ,OAAQgC,EAAO4I,GAAGhD,gBAAgB,GACpE5F,EAAO4I,GAAG+P,YAAc42B,EAAS52B,YAAc,OAG/C3Y,EAAO4I,GAAG+P,YAAc,EACxBrR,KAAKknC,mBAAmB1uC,KAAKE,EAAO4I,MAIhDwlC,EAAOjqC,UAAUuqC,iBAAmB,SAAU3oC,GAK1C,IAJA,IAGIoQ,EAHAR,EAAQ,EACR7Q,EAAWiB,EAAKjB,SAChBpF,EAAMoF,EAASjG,OAEP8W,EAAQjW,EAAKiW,IAAS,CAE9B,IAAI65B,GADJr5B,EAAgBrR,EAAS6Q,IACEgD,aACvB62B,GAAqB,IAAXA,GAAiBxwC,oBAAkBmX,EAAcmD,2BAC3DnD,EAAcmD,wBAA0B,KACxCnD,EAAcwC,YAAc,MAGpCrR,KAAKmO,kBACLnO,KAAKtJ,OAAOmc,OAAO,iBAAmBkB,OAAQvW,EAAU6Q,MAAO7Q,EAASjG,UAErEuvC,KC5NPqB,GAA6B,WAM7B,SAASA,EAAYzxC,GACjBsJ,KAAKsc,yBAA0B,EAC/B7Z,OAAKC,OAAO0lC,eACZpoC,KAAKtJ,OAASA,EACdsJ,KAAKwU,eACLxU,KAAKkK,mBAiLT,OAzKAi+B,EAAYtrC,UAAU+F,cAAgB,WAClC,MAAO,eAMXulC,EAAYtrC,UAAUqN,iBAAmB,WACrClK,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAKqoC,uBAAwBroC,MAC7DA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAKopB,mBAAoBppB,MACzDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,sBAAuBnK,KAAKsoC,mBAAoBtoC,MACpEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,iBAAkBnK,KAAKuoC,eAAgBvoC,OAQ/DmoC,EAAYtrC,UAAU+M,QAAU,WAC5B5J,KAAKwK,uBAMT29B,EAAYtrC,UAAU2N,oBAAsB,WACpCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAKqoC,wBACtCroC,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAKopB,oBACtCppB,KAAKtJ,OAAOiB,KAAK+S,IAAI,sBAAuB1K,KAAKsoC,oBACjDtoC,KAAKtJ,OAAOiB,KAAK+S,IAAI,iBAAkB1K,KAAKuoC,kBAEhDJ,EAAYtrC,UAAUwrC,uBAAyB,SAAUxP,GACrD74B,KAAKwU,YAAcqkB,GAEvBsP,EAAYtrC,UAAUqjB,IAAM,SAAUL,EAEtCC,EAAkBC,EAAUC,EAAQwoB,GAChC,IAAIphC,EAAQpH,KACRrJ,EAAaqJ,KAAKtJ,OAAOC,WACzBunB,EAAW7lB,SAMf,OALA6d,WAAS,QAASsyB,EAAOtqB,GACzBhI,WAAS,UAAU,EAAOgI,GACrBxmB,oBAAkBmoB,KACnB7f,KAAKsc,wBAA0BuD,EAAsBvD,yBAElD,IAAImsB,QAAQ,SAAUzc,GACzB,IAAIvyB,GAAK2N,EAAMshC,WAAe/xC,aAAsBC,cAC9CwQ,EAAM1Q,OAAOC,WADgD,IAAIC,cAAYD,GAE/Ese,EAAQ,IAAIC,QAMhB,GALK9N,EAAMshC,YACPzzB,EAAQ7N,EAAMiR,cAAcpD,GAC5BiB,WAAS,QAASjB,EAAOiJ,IAE7B9W,EAAM1Q,OAAOuS,QAAQ0/B,EAAyBvsC,SAAO8hB,EAAU2B,IAC3DtnB,YAAU,SAAU2lB,GACpB,OAAO,KAEXzkB,EAAGmc,aAAaX,GAAOY,KAAK,SAAUnY,GAClC,IAAIkrC,EAAa,KAKjB,OAJKlxC,oBAAkBmoB,IAA2BnoB,oBAAkBmoB,EAAsBlpB,cACtFiyC,EAAa/oB,EAAsBlpB,YAEvCkpB,EAAwBzY,EAAMyhC,2BAA2BhpB,EAAuBlpB,EAAY+G,GACrF0J,EAAM1Q,OAAOiB,KAAKsoB,kBAAkBC,IAAI9Y,EAAM1Q,OAAOiB,KAAMkoB,EAAuBC,EAAkBC,EAAUyoB,EAAOxoB,GAAQnK,KAAK,SAAUizB,GAC7H,MAAdF,EACA/oB,EAAsBlpB,WAAaiyC,SAG5B/oB,EAAsBlpB,WAEjCq1B,EAAQ8c,UAKxBX,EAAYtrC,UAAUwb,cAAgB,SAAUpD,EAAOiJ,GAQnD,OAPKxmB,oBAAkBwmB,IAAqC,gBAAxBA,EAAS1D,YACtCxa,KAAKtJ,OAAOma,cACfqN,EAAS1D,WAAa,WACtBvF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAAS,MAClDgY,EAAQ1c,YAAU,mCAAoCyH,KAAKtJ,OAAnD6B,CAA2D0c,IAEhEA,GAEXkzB,EAAYtrC,UAAUgsC,2BAA6B,SAAU3qB,EAAU6qB,EAAOC,GAE1E,IAAIjmC,EAAO1K,SAkBX,GAjBA6d,WAAS,QAASlW,KAAKtJ,OAAOiB,KAAKygB,gBAAgBC,eAAc,GAAOtV,GACxEmT,WAAS,YAAY,EAAMnT,GACtBrL,oBAAkBwmB,IAAcxmB,oBAAkBwmB,EAAS1D,aAC5DtE,WAAS,aAAcgI,EAAS1D,WAAYzX,GAE3C/C,KAAK0oC,YACN1oC,KAAKtJ,OAAO6G,cACZyC,KAAKtJ,OAAO8vB,WAAWxR,kBAAkBzc,YAAU,SAAUywC,IAC7D9yB,WAAS,aAAclW,KAAKtJ,OAAO8G,SAAUuF,IAEjD/C,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GAEpCA,EAAO/C,KAAKwU,YACZu0B,EAAQrxC,oBAAkBqL,EAAKgR,QAAU/T,KAAKtJ,OAAO8G,SAAS8K,MAAM,GAAKvF,EAAKgR,OACzE/T,KAAK0oC,YACN1oC,KAAKtJ,OAAO8G,aAEZ0gB,GAAYA,EAASvnB,YAAcqJ,KAAK0oC,UAAW,CACnD,IAAIO,EAAYjpC,KAAKtJ,OAAO8G,SACxB0rC,EAAUhrB,EAASvnB,sBAAsBC,cAAcsnB,EAASvnB,WAAWA,WAAW8E,KAAOyiB,EAASvnB,WAC1GqJ,KAAKtJ,OAAO8vB,WAAWxR,kBAAkBk0B,GACzCH,EAAQ/oC,KAAKtJ,OAAO8G,SACpBwC,KAAKtJ,OAAO8G,SAAWyrC,EAI3B,OAFA/qB,EAAWxmB,oBAAkBwmB,GAAY7lB,SAAW6lB,EACpDA,EAASvnB,WAAa,IAAIC,eAAc6E,KAAMstC,IACvC7qB,GASXiqB,EAAYtrC,UAAUusB,mBAAqB,SAAUrmB,GACjD,GAAI/C,KAAKtJ,OAAOiB,KAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAAiB,CACvF,IAAI5E,KACAiE,EAAOsE,EAAKtE,KAEZ2S,EADc1Z,oBAAkB+G,EAAK4S,aACjB5S,EAAKtE,MAAQsE,EAAK4S,YAC1C7W,EAAM2uC,OAAS/3B,EACfrO,EAAKvI,MAAQA,EAEjBwF,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GACpC/C,KAAKtJ,OAAOuS,QAAQ,qBAAsBlG,IAE9ColC,EAAYtrC,UAAUyrC,mBAAqB,SAAUc,GACjD,GAAsB,UAAlBA,EAASpmC,KAAkB,CAC3B,IAAIqmC,EAAcD,EAASE,OAAO7qC,KAC9B8qC,EAAqBvpC,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OACjE,GAAI8xC,EAAYvwC,YAAcC,EAAciH,KAAKtJ,OAAQ2yC,EAAYvwC,WAAWE,SAAUwwC,QAAQD,IAAsB,CACpH,IAAIE,EAAYL,EAASM,UAAUnyC,OAC/BoyC,EAAWN,EAAYlvC,MACvByvC,GAAiB,EACjBC,GAAgB,EAChBC,EAAQrxC,EAAgBuH,KAAKtJ,OAAQ2yC,EAAarpC,KAAKtJ,OAAO6G,aAC9DyC,KAAKsc,yBAA6BwtB,GAAU9pC,KAAKtJ,OAAOqkB,cACxD6uB,GAAiB,EACjBC,GAAgBR,EAAYlwC,UAEhCiwC,EAASM,UAAUD,EAAY,GAAGM,UAAaC,aAAcL,EAAUM,YAAaJ,EAChFvvC,SAAUsvC,MAK1BzB,EAAYtrC,UAAU0rC,eAAiB,SAAUxoB,GAC7C,IAAK,IAAI1oB,EAAI,EAAGA,EAAI0oB,EAASmqB,WAAW3yC,OAAQF,IACxC0oB,EAASmqB,WAAW7yC,GAAGyQ,OACvBiY,EAASmqB,WAAW7yC,GAAG8yC,WAAcC,mBAAmB,KAIpEjC,EAAYtrC,UAAU6rC,QAAU,WAC5B,OAAQjyC,EAAauJ,KAAKtJ,SAAW8C,EAAUwG,KAAKtJ,SAEjDyxC,KC5LPkC,GAA2B,WAM3B,SAASA,EAAU3zC,GACf+L,OAAKC,OAAO4nC,aACZtqC,KAAKtJ,OAASA,EACdsJ,KAAKwU,eACLxU,KAAKkK,mBA+IT,OAvIAmgC,EAAUxtC,UAAU+F,cAAgB,WAChC,MAAO,aAMXynC,EAAUxtC,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG,cAAenK,KAAKqpB,iBAAkBrpB,MACrDA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAKuqC,qBAAsBvqC,OAM/DqqC,EAAUxtC,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAKqpB,kBACpCrpB,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAKuqC,wBAQ1CF,EAAUxtC,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAET6/B,EAAUxtC,UAAU0tC,qBAAuB,SAAU1R,GACjD74B,KAAKwU,YAAcqkB,GAEvBwR,EAAUxtC,UAAUqjB,IAAM,SAAUG,EAAqBP,EAAkBQ,EAAQN,GAC/E,IAAI5Y,EAAQpH,KACR+oC,EAAQ/oC,KAAKtJ,OAAOC,WACpB0nB,EAAOhmB,SACPqwC,GAAWjyC,EAAauJ,KAAKtJ,SAAW8C,EAAUwG,KAAKtJ,QAE3D,OADAwf,WAAS,UAAU,EAAOmI,GACnB,IAAIoqB,QAAQ,SAAUzc,GACzB,IAAIvyB,GAAKivC,GAAaK,aAAiBnyC,cACjCwQ,EAAM1Q,OAAOC,WADmC,IAAIC,cAAYmyC,GAElE9zB,EAAQ,IAAIC,QAMhB,GALKwzB,IACDzzB,EAAQ7N,EAAMiR,cAAcpD,GAC5BiB,WAAS,QAASjB,EAAOoJ,IAE7BjX,EAAM1Q,OAAOuS,QAAQuhC,EAAuBpuC,SAAOiiB,EAAMgC,IACrD9nB,YAAU,SAAU8lB,GACpB,OAAO,KAEX5kB,EAAGmc,aAAaX,GAAOY,KAAK,SAAUnY,GAClC,IAAI+sC,EAAc,KAKlB,OAJK/yC,oBAAkB2oB,IAAyB3oB,oBAAkB2oB,EAAoB1pB,cAClF8zC,EAAcpqB,EAAoB1pB,YAEtC0pB,EAAsBjZ,EAAMsjC,wBAAwBrqB,EAAqB0oB,EAAOrrC,GACzE0J,EAAM1Q,OAAOiB,KAAK4oB,gBAAgBL,IAAI9Y,EAAM1Q,OAAOiB,KAAM0oB,EAAqBP,EAAkBQ,EAAQN,GAAQnK,KAAK,SAAU4oB,GAC/G,MAAfgM,EACApqB,EAAoB1pB,WAAa8zC,SAG1BpqB,EAAoB1pB,WAE/Bq1B,EAAQyS,UAKxB4L,EAAUxtC,UAAUwb,cAAgB,SAAUpD,EAAOoJ,GAQjD,OAPK3mB,oBAAkB2mB,IAA6B,gBAApBA,EAAK7D,YAC9Bxa,KAAKtJ,OAAOma,cACfwN,EAAK7D,WAAa,WAClBvF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAAS,MAClDgY,EAAQ1c,YAAU,mCAAoCyH,KAAKtJ,OAAnD6B,CAA2D0c,IAEhEA,GAEXo1B,EAAUxtC,UAAU6tC,wBAA0B,SAAUrsB,EAAM0qB,EAAOC,GACjE,IAAIjmC,KAEA2lC,GAAWjyC,EAAauJ,KAAKtJ,SAAW8C,EAAUwG,KAAKtJ,QAsB3D,GArBAwf,WAAS,QAASlW,KAAKtJ,OAAOiB,KAAKygB,gBAAgBC,eAAc,GAAOtV,GACxEmT,WAAS,YAAY,EAAMnT,GAC3BmT,WAAS,eAAe,EAAMnT,GACzBrL,oBAAkB2mB,IAAU3mB,oBAAkB2mB,EAAK/B,0BACpDpG,WAAS,0BAA2BmI,EAAK/B,wBAAyBvZ,GAEjErL,oBAAkB2mB,IAAU3mB,oBAAkB2mB,EAAK7D,aACpDtE,WAAS,aAAcmI,EAAK7D,WAAYzX,GAEvC2lC,IACD1oC,KAAKtJ,OAAO6G,cACZyC,KAAKtJ,OAAO8vB,WAAWxR,kBAAkB3W,WAAS,SAAU2qC,IAC5D9yB,WAAS,aAAclW,KAAKtJ,OAAO8G,SAAUuF,IAEjD/C,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GAEpCA,EAAO/C,KAAKwU,YACZu0B,EAAQrxC,oBAAkBqL,EAAKgR,QAAU/T,KAAKtJ,OAAO8G,SAAS8K,MAAM,GAAKvF,EAAKgR,OACzE20B,IACD1oC,KAAKtJ,OAAO8G,aAEZ6gB,GAAQA,EAAK1nB,YAAc+xC,EAAS,CACpC,IAAIiC,EAAY3qC,KAAKtJ,OAAO8G,SACxB0rC,EAAU7qB,EAAK1nB,sBAAsBC,cAAcynB,EAAK1nB,WAAWA,WAAW8E,KAAO4iB,EAAK1nB,WAC9FqJ,KAAKtJ,OAAO8vB,WAAWxR,kBAAkBk0B,GACzCH,EAAQ/oC,KAAKtJ,OAAO8G,SACpBwC,KAAKtJ,OAAO8G,SAAWmtC,EAI3B,OAFAtsB,EAAO3mB,oBAAkB2mB,MAAaA,EACtCA,EAAK1nB,WAAa,IAAIC,eAAc6E,KAAMstC,IACnC1qB,GASXgsB,EAAUxtC,UAAUwsB,iBAAmB,SAAUtmB,GAC7C,GAAI/C,KAAKtJ,OAAOiB,KAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAAiB,CACvF,IAAI5E,KACAiE,EAAOlG,YAAU,OAAQwK,GAEzBqO,EADc1Z,oBAAkB+G,EAAK4S,aACjB5S,EAAKtE,MAAQsE,EAAK4S,YAC1C7W,EAAMowC,gBAAwB,EAANx5B,EACxBrO,EAAKvI,MAAQA,EAEjBwF,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GACpC/C,KAAKtJ,OAAOuS,QAAQ,mBAAoBlG,IAErCsnC,KCxJPQ,GAAsB,WACtB,SAASA,EAAKn0C,GACV+L,OAAKC,OAAOooC,QACZ9qC,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAoLT,OA9KA2gC,EAAKhuC,UAAUqN,iBAAmB,WAC9BlK,KAAKtJ,OAAOyT,GAAGgtB,EAAiCn3B,KAAK+qC,0BAA2B/qC,MAChFA,KAAKtJ,OAAOyT,GAAGkS,EAAsBrc,KAAKgrC,WAAYhrC,OAM1D6qC,EAAKhuC,UAAU2N,oBAAsB,WAC7BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIysB,EAAiCn3B,KAAK+qC,2BACtD/qC,KAAKtJ,OAAOgU,IAAI2R,EAAsBrc,KAAKgrC,cAQ/CH,EAAKhuC,UAAU+F,cAAgB,WAC3B,MAAO,SAOXioC,EAAKhuC,UAAUqxB,QAAU,WACrBluB,KAAKtJ,OAAOiB,KAAKo7B,YAAY7E,WAQjC2c,EAAKhuC,UAAU+M,QAAU,WACrB5J,KAAKwK,uBAQTqgC,EAAKhuC,UAAUg2B,SAAW,SAAUC,GAChC9yB,KAAKtJ,OAAOiB,KAAKo7B,YAAYF,SAASC,IAQ1C+X,EAAKhuC,UAAUm2B,sBAAwB,SAAU1vB,GAC7CtD,KAAKtJ,OAAOiB,KAAKo7B,YAAYC,sBAAsB1vB,IAWvDunC,EAAKhuC,UAAUkuC,0BAA4B,SAAUxzB,GAEjD,GADAA,EAAW7e,OAAOS,SAAiC,aAAtBoe,EAAWjc,OACpC0E,KAAKtJ,OAAO4I,oBAAqB,CACjC,IAAI2rC,EAAoBjrC,KAAKtJ,OAAO6E,0BAA0B,GAC1D7C,EAASsH,KAAKtJ,OAAO8G,SAASC,OAAO,SAAUC,GAC/C,OAAOA,EAAEutC,KAAuB1zB,EAAW7e,OAAOuyC,KAElDvyC,EAAOnB,SACPmB,EAAO,GAAGS,SAAWoe,EAAW7e,OAAOS,UAG/C,IAAI+xC,GACAn3B,OAAQ/T,KAAKtJ,OAAO8G,SACpBmB,IAAK4Y,EAAW5Y,IAChBrD,OAAQic,EAAWjc,OACnB5C,OAAQ6e,EAAW7e,OACnB2V,MAAOrO,KAAKtJ,OAAO8G,SAASjG,QAGhC,GADA8G,WAAS,oBAAqB2B,KAAKtJ,QAAQ0f,mBAAmB80B,GAC1DlrC,KAAKtJ,OAAO4I,oBAAqB,CACjC,IAEIsY,OAAY,EACI,aAAhBszB,EAAU,QACVtzB,EAAYszB,EAAO,IAAErzB,uBAAuB,oBAAoB,GAC3DngB,oBAAkBkgB,KACnBvK,eAAauK,GAAY,oBACzBxH,YAAUwH,GAAY,wBAGL,WAAhBszB,EAAU,SACftzB,EAAYszB,EAAO,IAAErzB,uBAAuB,sBAAsB,GAC7DngB,oBAAkBkgB,KACnBvK,eAAauK,GAAY,sBACzBxH,YAAUwH,GAAY,wBAKtCizB,EAAKhuC,UAAUsuC,SAAW,SAAUC,EAAcnvB,EAAMlI,GAapD,IAAK,IAZDs3B,EAAa3zC,oBAAkBqc,MAAeA,EAC9CnX,EAAU,SAAU0uC,GACpBD,EAAW7yC,KAAKyjB,EAAKqvB,IACrB,IAAIC,KACAtvB,EAAKqvB,GAAGjyC,kBACRkyC,EAAMH,EAAa3tC,OAAO,SAAUC,GAChC,OAAOue,EAAKqvB,GAAGtyC,WAAa0E,EAAEY,iBAElC+sC,EAAanH,EAAOiH,SAASC,EAAcG,EAAKF,KAGpDnH,EAASlkC,KACJsrC,EAAI,EAAGA,EAAIrvB,EAAK1kB,OAAQ+zC,IAC7B1uC,EAAQ0uC,GAEZ,OAAOD,GAEXR,EAAKhuC,UAAUmuC,WAAa,SAAUQ,GAClC,IAAIpkC,EAAQpH,KACRvG,EAAK,IAAI7C,cAAY40C,EAAez3B,QACxC,GAA8C,SAA1C/T,KAAKtJ,OAAOoa,aAAaC,aAAyB,CAClD,IAAIkL,KACAwvB,EAAYzrC,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,IACf,UAA7CyI,KAAKtJ,OAAOsB,eAAeF,eAA0E,SAA7CkI,KAAKtJ,OAAOsB,eAAeF,eACpF,cAAgB,QAChBmd,GAAQ,IAAIC,SAAQI,MAAMm2B,EAAU,QAAS,GACjDxvB,EAAOxiB,EAAGid,aAAazB,GACvBu2B,EAAen9B,MAAQ4N,EAAK1kB,OAC5B,IAEIm0C,GAFAC,EAAO3rC,KAAKtJ,OAAOiB,KAAKmZ,aAAa86B,YACrCzsB,EAAUnf,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,aACf,GAC7B9E,EAAQA,EAAMy2B,KAAKA,GAAMG,KAAKF,GAC9B1vB,EAAOxiB,EAAGid,aAAazB,GACvB,IAAIo2B,EAAarrC,KAAKmrC,SAASK,EAAez3B,OAAQkI,GACtDuvB,EAAez3B,OAASs3B,MAEvB,CACD,IAAIS,EAAO,IAAIl1C,cAAY40C,EAAez3B,QACtC5a,EAAW,IAAI0I,YAAU,WAAY,WAAY,MAAMkqC,GAAG,WAAY,gBAAYnuB,GAClFouB,EAAYF,EAAKp1B,cAAa,IAAIxB,SAAQI,MAAMnc,IAChD4sC,OAAa,EAMbA,GALAtuC,EAAuBuI,KAAKtJ,SAAasJ,KAAKtJ,OAAOkB,eAAeC,MAAQmI,KAAKtJ,OAAOiB,KAAKC,eAAeC,KAC3GmI,KAAKtJ,OAAOsB,eAAeV,QAAQC,SAAWyI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAI1Ey0C,EAAUvuC,OAAO,SAAUC,GACpC,OAAOjF,EAAgB2O,EAAM1Q,OAAQgH,EAAGsuC,KAJ/BA,EAOjBR,EAAen9B,MAAQ03B,EAAWxuC,OAC9B0d,EAAQ,IAAIC,QAAhB,IACIy2B,EAAO3rC,KAAKtJ,OAAOiB,KAAKmZ,aAAa86B,SACrCzsB,EAAUnf,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YACxCgsB,EAAWxuC,OAAU4nB,EAAUwsB,IAE/BxsB,GADAA,EAAW/H,KAAK60B,MAAMlG,EAAWxuC,OAASo0C,IAAW5F,EAAWxuC,OAASo0C,EAAQ,EAAI,KACvD,EAC9B3rC,KAAKtJ,OAAOiB,KAAK2mB,eAAgBxN,cAAgBiJ,YAAaoF,KAAa,IAE3EusB,EAAOC,GAAQxsB,EAAU,GAC7BlK,EAAQA,EAAMy2B,KAAKA,GAAMG,KAAKF,GAC9BG,EAAKn1C,WAAW8E,KAAOsqC,EACvByF,EAAez3B,OAAS+3B,EAAKp1B,aAAazB,GAE9CjV,KAAKtJ,OAAOmc,OAAO,eAAgB24B,IAEhCX,KC3LPqB,GAAyB,WACzB,SAASA,EAAQx1C,GACb+L,OAAKC,OAAOypC,WACZnsC,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAkIT,OA1HAgiC,EAAQrvC,UAAU+F,cAAgB,WAC9B,MAAO,WAMXspC,EAAQrvC,UAAUqN,iBAAmB,WACjClK,KAAKtJ,OAAOyT,GAAG8e,EAAoBjpB,KAAKosC,eAAgBpsC,MACxDA,KAAKtJ,OAAOyT,GAAG+hB,EAAqBlsB,KAAKqsC,oBAAqBrsC,OAMlEksC,EAAQrvC,UAAU2N,oBAAsB,WAChCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIue,EAAoBjpB,KAAKosC,gBACzCpsC,KAAKtJ,OAAOgU,IAAIwhB,EAAqBlsB,KAAKqsC,uBAE9CH,EAAQrvC,UAAUuvC,eAAiB,SAAUrpC,GACzC,IAAI45B,EAAO38B,KAAKtJ,OACU,IAAtBqM,EAAKpE,IAAI+K,UAAkBizB,EAAKl0B,qBAAqBlR,OAAS,EAC9DyI,KAAKoyB,aAAauK,EAAKhpB,QAAQC,GAAK,sBAAuB+oB,EAAKhpB,QAAQC,GAAK,yBAAyB,GAGjGlc,oBAAkBilC,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,cACpDhS,oBAAkBilC,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,YACxDizB,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,MAC7CwiC,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,SAAW,GAAGvP,MACxD6F,KAAKoyB,aAAauK,EAAKhpB,QAAQC,GAAK,wBAAwB,GAG5D5T,KAAKoyB,aAAauK,EAAKhpB,QAAQC,GAAK,wBAAwB,GAE5D+oB,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,QAChDwiC,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,SAAW,GAAGvP,OACpD6F,KAAKoyB,aAAauK,EAAKhpB,QAAQC,GAAK,wBAAwB,GAEF,IAA1D+oB,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,OAChD6F,KAAKoyB,aAAauK,EAAKhpB,QAAQC,GAAK,yBAAyB,GAEH,IAA1D+oB,EAAKxgC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,OAChD6F,KAAKoyB,aAAauK,EAAKhpB,QAAQC,GAAK,yBAAyB,IAI/C,IAAtB7Q,EAAKpE,IAAI+K,UAAmBhS,oBAAkBqL,EAAKtE,KAAK3F,aACxDkH,KAAKoyB,aAAauK,EAAKhpB,QAAQC,GAAK,yBAAyB,IAGrEs4B,EAAQrvC,UAAUwvC,oBAAsB,SAAUtpC,GAC9C,IAAI45B,EAAO38B,KAAKtJ,OAYhB,GAXsC,SAAlCsJ,KAAKtJ,OAAOmF,aAAaC,MAA0D,UAAvCkE,KAAKtJ,OAAOiB,KAAKkE,aAAaC,MAC1EiH,EAAKE,KAAK2Q,KAAO5T,KAAKtJ,OAAOiB,KAAKgc,QAAQC,GAAK,YAC/C7Q,EAAKiG,QAAS,EACdhJ,KAAKtJ,OAAOiB,KAAKoE,WAAW21B,YAE5B3uB,EAAKE,KAAK2Q,KAAO5T,KAAKtJ,OAAOiB,KAAKgc,QAAQC,GAAK,cAC/C5T,KAAKtJ,OAAOqsB,YAEZhgB,EAAKE,KAAK2Q,KAAO5T,KAAKtJ,OAAOiB,KAAKgc,QAAQC,GAAK,gBAC/C5T,KAAKtJ,OAAOssB,cAEZjgB,EAAKE,KAAK2Q,KAAO+oB,EAAKhlC,KAAKgc,QAAQC,GAAK,WAAa+oB,EAAKl0B,qBAAqBlR,OAAQ,CACvF,IAAImB,EAASikC,EAAKxgC,wBAAwBwgC,EAAK10B,wBAAwB,GAAK,GACxE40B,OAAY,EAChB,GAAInkC,EAAOyB,MAAQwiC,EAAKl0B,qBAAqB,GAAGtO,MAC5C,IAAK,IAAI9C,EAAI,EAAGA,EAAIslC,EAAKxgC,wBAAwB5E,OAAQF,IACjDslC,EAAKxgC,wBAAwB9E,GAAG+C,WAAa1B,EAAOI,WAAWsB,WAC/DyiC,EAAYxlC,QAKpBwlC,EAAYF,EAAK10B,wBAAwB,GAAK,EAElD00B,EAAK7B,aAAa6B,EAAK10B,wBAAwB,IAAK40B,EAAW,SAEnE,GAAI95B,EAAKE,KAAK2Q,KAAO+oB,EAAKhlC,KAAKgc,QAAQC,GAAK,YAAc+oB,EAAKl0B,qBAAqBlR,OAAQ,CAInF,IAHD2C,EAAQyiC,EAAK10B,wBAAwB,GAErCnP,GADA+jC,OAAY,EACCF,EAAKl0B,qBAAqB,GAAG3P,YAC9C,IAASzB,EAAI,EAAGA,EAAIslC,EAAKxgC,wBAAwB5E,OAAQF,IACjDslC,EAAKxgC,wBAAwB9E,GAAG+C,WAAatB,EAAWsB,WACxDyiC,EAAYxlC,GAGpBslC,EAAK7B,aAAa5gC,GAAQ2iC,EAAW,WAS7CqP,EAAQrvC,UAAU6jC,WAAa,WAC3B,OAAO1gC,KAAKtJ,OAAOiB,KAAKw6B,cAAcuO,cAU1CwL,EAAQrvC,UAAUu1B,YAAc,SAAUvb,EAAOqb,GAC7ClyB,KAAKtJ,OAAOiB,KAAKw6B,cAAcC,YAAYvb,EAAOqb,IAQtDga,EAAQrvC,UAAU+M,QAAU,WACxB5J,KAAKwK,uBAEF0hC,KCrIPI,GAA2B,WAM3B,SAASA,EAAU51C,GACf+L,OAAKC,OAAO6pC,aACZvsC,KAAKtJ,OAASA,EACdsJ,KAAKwsC,oBACLxsC,KAAKiZ,gBAoOT,OA5NAqzB,EAAUzvC,UAAU+F,cAAgB,WAChC,MAAO,WAEX0pC,EAAUzvC,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,aAapB6hC,EAAUzvC,UAAUuc,sBAAwB,SAAUH,EAAcqC,EAAcmxB,GAC9EzsC,KAAKiZ,aAAeA,EAIpB,IAAK,IAHDpgB,EAEA0E,KACKI,EAAI,EAAGvF,EAFOC,OAAOC,KAAKgjB,GAAc/jB,OAEToG,EAAIvF,EAAKuF,IAAK,CACjCpF,YAAU,eAAgB+iB,EAAa3d,KAEpDJ,EAAW/E,KAAK8iB,EAAa3d,IAGrC,IAIImnC,EAJA5qB,EAAgBjiB,EAAkBsF,GAClCmvC,EAAcnvC,EAAW+K,QACzBqkC,EAAgBt0C,OAAOC,KAAK0H,KAAKtJ,OAAOoiB,YAAYvhB,OACpDq1C,EAAav0C,OAAOC,KAAK4hB,GAAe3iB,OAExCD,EAAU0I,KAAKtJ,OAAOkJ,aAC1B,GAAII,KAAKtJ,OAAOoiB,WAAWrb,OAAO,SAAU80B,GAAK,OAAOA,EAAEtE,mBAAqB12B,OACtE,CAAA,IAAIF,EAAI,EAAb,IAAgBe,EAAMw0C,EAAYv1C,EAAIe,EAAKf,IAGvC,GAFAwB,EAAeqhB,EAAc7iB,GAC7BytC,EAAqB9kC,KAAK6sC,sBAAsBh0C,EAAc6zC,GACtC,CAwCpB,IAAK,IAvCD9vC,EAAU,SAAUkwC,EAAiBC,GACrC,IAAI9pC,OAAO,EACXA,KACA,IAAK,IAAI01B,EAAM,EAAGA,EAAMrhC,EAAQC,OAAQohC,IAAO,CAG3C11B,EAFavL,oBAAkBa,YAAU,QAASjB,EAAQqhC,KACtDrhC,EAAQqhC,GAAOpgC,YAAU,QAAUjB,EAAQqhC,KACjC,KAGlB,GADA11B,EAAOihC,EAAO8I,kBAAkB/pC,EAAMihC,EAAOxtC,OAAOoiB,WAAWg0B,EAAkB,KAC7E5I,EAAOxtC,OAAOoiB,WAAWg0B,EAAkB,GAAG7e,iBA0B9C,MAAO,WAzBP,IAAIgf,EACJP,EAAYvuC,IAAI,SAAUT,EAAGrG,GACrBqG,EAAE1E,WAAaH,EAAaG,WAC5Bi0C,EAAQ51C,KAIhB,IAAI61C,EAAeD,EAAQnI,EAAqBgI,EAC5CK,EAAgB/wC,YAAWvD,UACxBs0C,EAAc7zC,oBACd6zC,EAAcjJ,EAAOxtC,OAAO0G,cACnC8Y,WAAS,aAAci3B,EAAelqC,GACtC,IAAI9I,EAAQ5B,YAAU,QAAS40C,GAI/B,GAHAj3B,WAAS,QAAS/b,EAAQ,EAAG8I,GAC7BiT,WAAS,gBAAgB,EAAMjT,GAC/BiT,WAAS,iBAAkBi3B,EAAcn0C,SAAUiK,GAC/CwpC,EAAQ,CACR,IAAInzC,EAAef,YAAU,eAAgBM,GACzCS,EAAa/B,QACb+B,EAAad,KAAKyK,GAG1BypC,EAAYvvC,OAAO+vC,EAAc,EAAGjqC,IAMxCihC,EAASlkC,KACJ8sC,EAAkB,EAAGC,EAAQJ,EAAeG,GAAmBC,EAAOD,IAC3ElwC,EAAQkwC,GAEZ9sC,KAAKwsC,yBAIZ,CAED,IAAK,IADD31B,KACK/K,EAAc,EAAGwrB,EAAWhgC,EAAQC,OAAQuU,EAAcwrB,EAAUxrB,IAAe,CAGxF+K,EAFanf,oBAAkBa,YAAU,QAASjB,EAAQwU,KACtDxU,EAAQwU,GAAevT,YAAU,QAASjB,EAAQwU,KACtC,KAEXghC,EAAkB,EAA3B,IAAK,IAAyBM,EAAWT,EAAeG,GAAmBM,EAAUN,IACjF9sC,KAAKgtC,kBAAkBn2B,EAAO7W,KAAKtJ,OAAOoiB,WAAWg0B,EAAkB,IAG/E,OAAOJ,GAEXJ,EAAUzvC,UAAUgwC,sBAAwB,SAAUtvC,EAAYC,GAG9D,IAAK,IADD9E,EACKrB,EAAI,EAAGe,EAFGC,OAAOC,KAAKkF,GAAUjG,OAELF,EAAIe,EAAKf,IAAK,CAC9CqB,EAAS8E,EAASnG,GAGlB,GAAIkG,KAFW7F,oBAAkBgB,EAAOI,YAAc,KAClD0E,EAASC,OAAO,SAAUC,GAAK,OAAOA,EAAE1E,WAAaN,EAAOI,WAAWE,WAAa,IAC3D,CACzBgH,KAAKwsC,iBAAiBh0C,KAAKE,GAE3B,IADeH,YAAU,kBAAmBG,GAKxC,SAHAsH,KAAK6sC,sBAAsBn0C,EAAQ8E,IAO/C,OAAOwC,KAAKwsC,iBAAiBj1C,QAEjC+0C,EAAUzvC,UAAUmwC,kBAAoB,SAAUK,EAAUC,GAExD,IAAK,IAAIj2C,EAAI,EAAGe,EADUC,OAAOC,KAAKg1C,EAAQh2C,SAASC,OACZF,EAAIe,EAAKf,IAIhD,IAAK,IAHDk2C,EAAgB71C,oBAAkB41C,EAAQh2C,QAAQD,GAAG8D,YAAcmyC,EAAQh2C,QAAQD,GAAGub,MACtF06B,EAAQh2C,QAAQD,GAAG8D,WAEd00B,EAAK,EAAG2d,EADNn1C,OAAOC,KAAK+0C,GACSxd,EAAK2d,EAAOj2C,OAAQs4B,IAAM,CACtD,IAAIh4B,EAAM21C,EAAO3d,GACjB,GAAIh4B,IAAQ01C,EACR,GAAIvtC,KAAKwsC,iBAAiBj1C,OACtB81C,EAASx1C,GAAOmI,KAAKytC,iBAAiBH,EAAQh2C,QAAQD,GAAI2I,KAAKwsC,uBAE9D,GAAIxsC,KAAKtJ,OAAOqkB,YAAa,CAC9B,IAAItc,EAAOuB,KAAKtJ,OAAOC,sBAAsBC,cAAcoJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KACvFuE,KAAKtJ,OAAO8G,SAClB6vC,EAASx1C,GAAOmI,KAAKytC,iBAAiBH,EAAQh2C,QAAQD,GAAIoH,IAQ1E,OAAO4uC,GAEXf,EAAUzvC,UAAU4wC,iBAAmB,SAAUC,EAAe16B,GAC5D,IAAIyC,EAAM,IAAIP,QACVy4B,KACAhwB,KACA3a,EAAQtL,oBAAkBg2C,EAAc96B,YACiBgL,EAAzD5d,KAAKtJ,OAAOglB,iBAAiBgyB,EAAc96B,OAAO5P,KACtD0qC,EAActvB,qBAAsBjB,OAAQnd,KAAK4tC,kBAAkBF,EAAcvwB,OAAQna,KACzF0qC,EAAczwB,aAAajd,KAAKtJ,OAAOiB,KAAK2pB,QAC5C,IAAIjE,EAAWqwB,EAAcjwB,gBAAwC,SAAUtV,GAAK,OAAOA,GAC3FulC,EAAchwB,YAAYC,GAC1B,IAAIkwB,EAAUH,EAAcvvB,YAAY,GACxC1I,EAAIE,QAAU3V,KAAKiZ,aACnBxD,EAAIq4B,gBACJ,IAEIC,EAFAC,EAAU,IAAIp3C,cAAYoc,GAAa0D,aAAajB,GACpD3S,EAAQ4qC,EAAc1qC,KAE1BF,GAAS4qC,EAAc1qC,MACvB,IAAK,IAAI3L,EAAI,EAAGA,EAAIyL,EAAMvL,OAAQF,IAAK,CACnC02C,EAAajrC,EAAMzL,GACnB,IAAIQ,EAAM61C,EAAc96B,MAAQ,MAAQ9P,EAAMzL,GAAG42C,cAC7CC,EAAmB,WAAbprC,EAAMzL,GAAkBkB,YAAU,aAAcy1C,GACtDG,qBAAmBrrC,EAAMzL,GAAI22C,EAASN,EAAe1tC,KAAKtJ,QAC1D03C,EAAOV,EAAcvyC,WACrBkzC,EAAuB,WAAbvrC,EAAMzL,GAAkB62C,EAAIr2C,GAAOq2C,EACjDP,EAAOS,GAAQT,EAAOS,OACtBT,EAAOS,GAAMv2C,GAAOw2C,EACpBV,EAAOS,GAAMtrC,EAAMzL,IAAOK,oBAAkBw2C,GAA2B,IAApB7wB,EAASgxB,GAEhE1wB,EAAOR,OAASuwB,EAAcjwB,eAC9B,IAAItM,EAAc7E,gBAAc,MAC5BC,UAAW,cAEf,GAAIvM,KAAKtJ,OAAOod,QAAS,CAErB+5B,EAAQt1B,GAAGo1B,EAAOD,EAAcvyC,YAAa6E,KAAKtJ,OAAQm3C,EAAQ3vB,SAAU,GAAI,KAAM,KAAM/M,GAC5FnR,KAAKtJ,OAA2B,4BAGhC8c,iBAAerC,EAAa08B,EAAQt1B,GAAGo1B,EAAOD,EAAcvyC,YAAa6E,KAAKtJ,OAAQm3C,EAAQ3vB,WAElG,IAAIjkB,EAAQ0zC,EAAOD,EAAcvyC,YAAY4yC,GAE7C,OAA8C,IAA1C58B,EAAY1D,UAAUjP,QAAQvE,GACfkX,EAAY1D,UAAYxT,EAIhCkX,EAAY1D,WAG3B6+B,EAAUzvC,UAAU+wC,kBAAoB,SAAUU,EAAetrC,GAC7D,GAAItL,oBAAkBsL,IAAkC,iBAAlBsrC,EAClC,OAAOA,EAEX,IAAIz0C,EACJ,OAAQmJ,GACJ,IAAK,SACDnJ,GAAQsjB,OAAQmxB,GAChB,MACJ,IAAK,WACDz0C,GAAQmJ,KAAM,WAAYoa,SAAUkxB,GACpC,MACJ,IAAK,OACDz0C,GAAQmJ,KAAMA,EAAMoa,SAAUkxB,GAGtC,OAAOz0C,GAQXyyC,EAAUzvC,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAEF8hC,KC9OPiC,GAAsB,WACtB,SAASA,EAAK52C,GACV8K,OAAKC,OAAO8rC,QACZxuC,KAAKtJ,OAASiB,EACdqI,KAAKmU,WACLnU,KAAKyuC,kBACLzuC,KAAKqU,aAAe,EACpBrU,KAAKhF,iBAAmBtD,oBAAkBsI,KAAKtJ,OAAOuG,iBACtD+C,KAAKkK,mBAgGT,OAxFAqkC,EAAK1xC,UAAU+F,cAAgB,WAC3B,MAAO,QAKX2rC,EAAK1xC,UAAUqN,iBAAmB,WAC9BlK,KAAKtJ,OAAOyT,GAAG,cAAenK,KAAK0uC,YAAa1uC,MAChDA,KAAKtJ,OAAOyT,GAAG,aAAcnK,KAAK2uC,qBAAsB3uC,OAM5DuuC,EAAK1xC,UAAU2N,oBAAsB,WAC7BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAK0uC,aACpC1uC,KAAKtJ,OAAOgU,IAAI,aAAc1K,KAAK2uC,wBAEvCJ,EAAK1xC,UAAU8xC,qBAAuB,SAAUC,GAC5C,IAAInwC,EAAOmwC,EAAWlzC,aAClB8f,EAASozB,EAAWpzB,OACxBxb,KAAK6uC,YAAYpwC,EAAM+c,GACvBxb,KAAKqU,aAAe,EACpBu6B,EAAWlzC,aAAesE,KAAKyuC,eAC/BzuC,KAAKyuC,mBAETF,EAAK1xC,UAAUgyC,YAAc,SAAUpwC,EAAM+c,GACzC,IAAK,IAAI7a,EAAI,EAAGA,EAAIlC,EAAKlH,OAAQoJ,IAW7B,GAVIX,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,GAA6C,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IACjFH,oBAAkBqB,EAAciH,KAAKtJ,OAAQ+H,EAAKkC,GAAG3H,UAAU,MAChEgH,KAAKqU,cACLrU,KAAKyuC,eAAezuC,KAAKqU,aAAe5V,EAAKkC,KAIjDX,KAAKqU,cACLrU,KAAKyuC,eAAezuC,KAAKqU,aAAe5V,EAAKkC,IAE7ClC,EAAKkC,GAAGtH,gBAAiB,CACzB,IAAIy1C,EAAa,IAAIl4C,cAAY6H,EAAKkC,GAAGrH,cAAcod,aAAa8E,GACpExb,KAAK6uC,YAAYC,EAAWtzB,KAYxC+yB,EAAK1xC,UAAU6kB,WAAa,SAAUvmB,EAAY2gB,EAAW0F,GACzDxhB,KAAKtJ,OAAOiB,KAAK+pB,WAAWvmB,EAAY2gB,EAAW0F,IAEvD+sB,EAAK1xC,UAAU+kB,iBAAmB,SAAUhP,GACxC5S,KAAKtJ,OAAOiB,KAAKiqB,iBAAiBhP,IAQtC27B,EAAK1xC,UAAU6xC,YAAc,WACzB1uC,KAAKtJ,OAAO4nB,eAAgB/f,aAAcspB,sBAAoB7nB,KAAKtJ,OAAOiB,KAAK4G,gBAAiB,IAOpGgwC,EAAK1xC,UAAU8kB,aAAe,WAC1B3hB,KAAKtJ,OAAOiB,KAAKgqB,eACjB3hB,KAAK0uC,eAQTH,EAAK1xC,UAAU+M,QAAU,WACrB5J,KAAKwK,uBAEF+jC,KC3GPQ,GAA4B,WAM5B,SAASA,EAAWr4C,GAChB+L,OAAKC,OAAOssC,cACZhvC,KAAKtJ,OAASA,EAiBlB,OAfAq4C,EAAWlyC,UAAUoyC,cAAgB,WACjC,OAAOjvC,KAAKtJ,OAAOiB,KAAKu3C,iBAAiBD,iBAE7CF,EAAWlyC,UAAU+M,QAAU,aAS/BmlC,EAAWlyC,UAAU+F,cAAgB,WACjC,MAAO,cAEJmsC,KCxBPI,GAA6B,WAC7B,SAASA,EAAYz4C,GACjB+L,OAAKC,OAAO0sC,eACZpvC,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAsET,OAhEAilC,EAAYtyC,UAAUqN,iBAAmB,WACrClK,KAAKtJ,OAAOyT,GAAG,kBAAmBnK,KAAKsF,gBAAiBtF,MACxDA,KAAKtJ,OAAOyT,GAAG,mBAAoBnK,KAAKuF,iBAAkBvF,OAM9DmvC,EAAYtyC,UAAU2N,oBAAsB,WACpCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,kBAAmB1K,KAAKsF,iBACxCtF,KAAKtJ,OAAOgU,IAAI,mBAAoB1K,KAAKuF,oBAE7C4pC,EAAYtyC,UAAUyI,gBAAkB,SAAUvC,GAC9C,IAAIssC,EAAS/lC,SAAO,IAAMtJ,KAAKtJ,OAAOid,QAAQC,GAAK,4BAA6B7Q,EAAK4Q,SACjF27B,EAAahmC,SAAO,IAAMtJ,KAAKtJ,OAAOid,QAAQC,GAAK,0BAA2B7Q,EAAK4Q,SACnF07B,KACkD,IAA9CrvC,KAAKtJ,OAAOiB,KAAKkE,aAAa+pB,YAC9BypB,EAAO70C,MAAMG,QAAU,OAGvB00C,EAAO70C,MAAMG,QAAU,SAGQ,SAAlCqF,KAAKtJ,OAAOmF,aAAaC,MAAqD,UAAlCkE,KAAKtJ,OAAOmF,aAAaC,MACjEpE,oBAAkB43C,IAAkBA,EAAWlnC,UAAUC,SAAS,iBACvEinC,EAAW90C,MAAMG,QAAU,SAGnCw0C,EAAYtyC,UAAU0I,iBAAmB,SAAUxC,GAC1B,UAAjBA,EAAKE,KAAK2Q,IAAmC,UAAjB7Q,EAAKE,KAAK2Q,IAAmC,UAAjB7Q,EAAKE,KAAK2Q,KAClE5T,KAAKtJ,OAAOmc,OAAO,0BAA2B9P,GAC9C/C,KAAKtJ,OAAO4nB,eAAgBziB,cAAgBQ,eAAgB0G,EAAKE,KAAK2Q,MAAQ,GAC9E5T,KAAKtJ,OAAO86B,cASpB2d,EAAYtyC,UAAU+F,cAAgB,WAClC,MAAO,eAQXusC,EAAYtyC,UAAU+M,QAAU,WAC5B5J,KAAKwK,uBAOT2kC,EAAYtyC,UAAU4rB,eAAiB,WACnC,OAAOzoB,KAAKtJ,OAAOiB,KAAKi1B,kBAAkBnE,kBAEvC0mB,KCtEPI,GAA2B,WAC3B,SAASA,EAAU74C,GACfsJ,KAAKwvC,gBAAkB,EACvBxvC,KAAKiU,aAAe,eACpBjU,KAAKgf,eAAiB,iBACtBhf,KAAKyvC,qBACLzvC,KAAK0vC,uBACL1vC,KAAK2vC,qBACL3vC,KAAKtJ,OAASA,EACdsJ,KAAKhF,iBAAmBtD,oBAAkBhB,EAAOuG,iBACjD+C,KAAK4vC,gBACL5vC,KAAK9D,sBACL8D,KAAK6vC,OAAQ,EACb7vC,KAAKkK,mBAojBT,OAljBAqlC,EAAU1yC,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG6iB,GAAkBhtB,KAAK6F,UAAW7F,MACjDA,KAAKtJ,OAAOyT,GAAGgjB,GAAiBntB,KAAKiG,SAAUjG,MAC/CA,KAAKtJ,OAAOyT,GAAGkjB,GAAuBrtB,KAAKmG,eAAgBnG,MAC3DA,KAAKtJ,OAAOyT,GAAGuS,GAAkB1c,KAAKqG,UAAWrG,MACjDA,KAAKtJ,OAAOyT,GAAGojB,GAA0BvtB,KAAKkG,kBAAmBlG,MACjEA,KAAKtJ,OAAOyT,GAAGijB,GAAwBptB,KAAKoG,gBAAiBpG,MAC7DA,KAAKtJ,OAAOyT,GAAG,kBAAmBnK,KAAK8vC,gBAAiB9vC,MACxDA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAK+vC,kBAAmB/vC,MAC5DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,yBAA0BnK,KAAKgwC,qBAAsBhwC,MACzEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,kBAAmBnK,KAAKiwC,cAAejwC,OAM/DuvC,EAAU1yC,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIsiB,GAAkBhtB,KAAK6F,WACvC7F,KAAKtJ,OAAOgU,IAAIyiB,GAAiBntB,KAAKiG,UACtCjG,KAAKtJ,OAAOgU,IAAIgS,GAAkB1c,KAAKqG,WACvCrG,KAAKtJ,OAAOgU,IAAI2iB,GAAuBrtB,KAAKmG,gBAC5CnG,KAAKtJ,OAAOgU,IAAI6iB,GAA0BvtB,KAAKkG,mBAC/ClG,KAAKtJ,OAAOgU,IAAI0iB,GAAwBptB,KAAKoG,iBAC7CpG,KAAKtJ,OAAOgU,IAAI,kBAAmB1K,KAAK8vC,iBACxC9vC,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAK+vC,mBAC1C/vC,KAAKtJ,OAAOiB,KAAK+S,IAAI,yBAA0B1K,KAAKgwC,sBACpDhwC,KAAKtJ,OAAOiB,KAAK+S,IAAI,kBAAmB1K,KAAKiwC,iBAQjDV,EAAU1yC,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAMT+kC,EAAU1yC,UAAUqzC,gBAAkB,WAClC,OAAOlwC,KAAK4vC,cAMhBL,EAAU1yC,UAAUszC,eAAiB,WACjC,OAAOnwC,KAAK/E,aAMhBs0C,EAAU1yC,UAAUuzC,iBAAmB,WACnC,OAAOpwC,KAAK9E,eAMhBq0C,EAAU1yC,UAAUwzC,mBAAqB,WACrC,OAAOrwC,KAAKwvC,iBAEhBD,EAAU1yC,UAAUizC,gBAAkB,WAClC,IAGI51C,EAHAuE,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/Di8B,EAAa5yB,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAE5D,IAAK7D,oBAAkBsI,KAAKyvC,oBAAsBzvC,KAAKyvC,kBAAkBl4C,OACrE,IAAK,IAAIF,EAAI,EAAGA,EAAI2I,KAAKyvC,kBAAkBl4C,OAAQF,IAC/C6C,EAAQuE,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEk1B,KAAgBp0B,QAAQwB,KAAKyvC,kBAAkBp4C,GAAGu7B,IAC3Fn0B,EAAKtB,OAAOjD,EAAO,GAG3B8F,KAAKyvC,kBAAoBzvC,KAAK4vC,aAAe5vC,KAAK2vC,kBAAoB3vC,KAAK0vC,oBAAsB1vC,KAAK9D,uBAE1GqzC,EAAU1yC,UAAUgJ,UAAY,SAAU9C,GACtC,IAAIutC,EAAkBvtC,EAAKtD,KAAK4jB,UAC5BktB,EAAavwC,KAAKtJ,OAAO+a,eAAiBzR,KAAKtJ,OAAOuI,mBACtDsxC,GAAcxtC,EAAKytC,aAAat2C,MAAQq2C,IACxCD,GAAoCC,GAIxC,GAFcvwC,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EACnC,CACOrS,KAAKtJ,OAAO0b,4BAA8Bk+B,IACxCtwC,KAAKtJ,OAAO0I,iBACzBY,KAAKtJ,OAAO6I,aAAaC,YAAaf,KAAMsE,EAAK0I,QAAShM,KAAMsD,EAAKtD,KACjEE,OAAQK,KAAKtJ,OAAOiB,KAAK84C,iBAAiB1tC,EAAKtD,KAAK4jB,kBAIvDitB,IAAoBtwC,KAAKtJ,OAAO0I,iBACrCY,KAAKtJ,OAAO6I,aAAaC,YAAaf,KAAMsE,EAAK0I,QAAShM,KAAMsD,EAAKtD,KACjEE,OAAQK,KAAKtJ,OAAOiB,KAAK84C,iBAAiB1tC,EAAKtD,KAAK4jB,aAG5D,GAAIrjB,KAAK6vC,OAA2C,UAAlC7vC,KAAKtJ,OAAOmF,aAAaC,MAAgE,WAA5CkE,KAAKtJ,OAAOmF,aAAaQ,eAA6B,CACjH,IAAIoC,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/D+5C,OAAQ,EAERC,EAAe3wC,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAC1Dq1C,OAAmB,EACnBC,OAAa,EACb/3C,EAAa,aAEbD,EAAemH,KAAK9E,eAAiB,EAAI8E,KAAK4vC,aAAa5vC,KAAK/E,aAAanC,GAAc,KAC3FoE,OAAY,EACZoB,OAAiB,EACjBrB,OAAkB,EAClB6zC,EAA6D,QAA5C9wC,KAAKtJ,OAAOmF,aAAaQ,iBAAoD,IAAxB2D,KAAK9E,cAAuB,EACtD,UAA5C8E,KAAKtJ,OAAOmF,aAAaQ,eAA6B2D,KAAK/E,YACrD+E,KAAK/E,YAAc,EAE7B,GADA61C,EAAiB9wC,KAAK+wC,wBAAwBD,GAC1C9wC,KAAKgxC,iBAAkB,CAcvB,GAbIhxC,KAAK4vC,aAAar4C,SAClB2F,EAAY8C,KAAK4vC,aAAa5vC,KAAK/E,aAAa+E,KAAKtJ,OAAOwG,WAC5DD,EAAkB+C,KAAK4vC,aAAa5vC,KAAK/E,aAAa+E,KAAKtJ,OAAOuG,iBAC9D+C,KAAK4vC,aAAa5vC,KAAK/E,aAAanC,KACpCwF,EAAiB0B,KAAK4vC,aAAa5vC,KAAK/E,aAAanC,GAAoB,WAGjFkH,KAAKyvC,kBAAoB91C,EAAYqG,KAAKyvC,mBAC1CzvC,KAAK2vC,kBAAoBh2C,EAAYqG,KAAK2vC,mBAC1C3vC,KAAK2vC,kBAAkBn3C,KAAKwH,KAAK4vC,aAAa5vC,KAAK/E,cACnDy1C,EAAQ1wC,KAAKtJ,OAAOiB,KAAKghB,gBAAgBm4B,GAAgBG,QACzDP,EAAM13C,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACjDsC,WAAS,sBAAwBw6B,EAAM13C,SAAU03C,EAAO1wC,KAAKtJ,SACxD2B,OAAOwE,UAAUC,eAAeC,KAAK2zC,EAAO,SAAU,CAEvD,GADA1wC,KAAKkxC,YAAqC,IAAxBlxC,KAAK9E,cAAuB,EAAI8E,KAAKkxC,WACP,UAA5ClxC,KAAKtJ,OAAOmF,aAAaQ,gBAEzB,GADAq0C,EAAMS,cAAgBt4C,EAClBmH,KAAK9E,eAAiB,EAAG,CACzBw1C,EAAM53C,WAAasD,YAAW4D,KAAK4vC,aAAa5vC,KAAK/E,cACrDy1C,EAAMpyC,eAAiBoyC,EAAM53C,WAAWE,gBACjC03C,EAAM53C,WAAWQ,oBACjBo3C,EAAM53C,WAAWkH,KAAKtJ,OAAO0G,cACpCszC,EAAMv2C,MAAQu2C,EAAM53C,WAAWqB,MAAQ,EACvCu2C,EAAMx2C,MAAQ8F,KAAKkxC,WACnB,IAAIE,EAAmBh4C,EAAoB4G,KAAK4vC,aAAa5vC,KAAK/E,cAAc1D,OAC5EmB,EAASU,EAAoB4G,KAAK4vC,aAAa5vC,KAAK/E,cAAcm2C,EAAmB,GACzF14C,EAAShB,oBAAkBgB,GAAUsH,KAAK4vC,aAAa5vC,KAAK/E,aAAevC,EAC3Ek4C,EAAmBnyC,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEizC,KAAkBnyC,QAAQ9F,EAAOi4C,IACjF3wC,KAAKhF,kBACL01C,EAAM1wC,KAAKtJ,OAAOuG,iBAAmBC,GAEzCG,EAAgBszC,EAAcD,EAAM53C,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiB01C,SAG7F,IAAiD,UAA5C1wC,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAClF3E,oBAAkBsI,KAAK4vC,aAAa5vC,KAAK/E,cAAe,CAS5D,GARAy1C,EAAMv2C,MAAQ6F,KAAK4vC,aAAa5vC,KAAK/E,aAAkB,MACnDy1C,EAAMv2C,OAAS6F,KAAK9E,eAAiB,IACrCw1C,EAAM53C,WAAaD,EACnB63C,EAAMpyC,eAAiBA,SAChBoyC,EAAM53C,WAAWQ,oBACjBo3C,EAAM53C,WAAWkH,KAAKtJ,OAAO0G,eAExCszC,EAAMx2C,MAAoD,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,eAA6B2D,KAAKkxC,WAAalxC,KAAKkxC,WAAa,EACxD,UAA5ClxC,KAAKtJ,OAAOmF,aAAaQ,gBAA8B2D,KAAK9E,eAAiB,EAAG,CAC5Ek2C,EAAmBh4C,EAAoB4G,KAAK4vC,aAAa5vC,KAAK/E,cAAc1D,OAC5EmB,EAASU,EAAoB4G,KAAK4vC,aAAa5vC,KAAK/E,cAAcm2C,EAAmB,GACzF14C,EAAShB,oBAAkBgB,GAAUsH,KAAK4vC,aAAa5vC,KAAK/E,aAAevC,EAC3Ek4C,EAAmBnyC,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEizC,KAAkBnyC,QAAQ9F,EAAOi4C,IAEzF,GAAgD,UAA5C3wC,KAAKtJ,OAAOmF,aAAaQ,gBAA8B2D,KAAK9E,eAAiB,EAAG,CAC5ExC,EAASsH,KAAK4vC,aAAa5vC,KAAK/E,aACpC21C,EAAmBnyC,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEizC,KAAkBnyC,QAAQ9F,EAAOi4C,IAErF3wC,KAAKhF,kBACL01C,EAAM1wC,KAAKtJ,OAAOuG,iBAAmBA,GAG7CyzC,EAAMx2C,OAAyB,IAAjBw2C,EAAMx2C,MAAe,EAAIw2C,EAAMx2C,MAC7Cw2C,EAAMr3C,iBAAkB,EACxBq3C,EAAMp3C,gBACN0G,KAAK4vC,aAAazyC,OAAOuzC,EAAMx2C,MAAO,EAAGw2C,GACzC1wC,KAAK9D,mBAAmBiB,OAAOuzC,EAAMx2C,MAAO,EAAGw2C,GAE3CG,EADAD,GAIaF,EAAMx2C,MAEyB,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,iBACzBw0C,EAA6B,IAAhBH,EAAMx2C,MAAc22C,EAAaA,EAAa,GAE/DpyC,EAAKtB,OAAO0zC,EAAY,EAAGH,GAC3B1wC,KAAKyvC,kBAAkBj3C,KAAKk4C,GAEhC1wC,KAAKtJ,OAAOiB,KAAKghB,gBAAgBm4B,GAAgBryC,KAAOiyC,EACxD1wC,KAAKgxC,kBAAmB,GAExBhxC,KAAKtJ,OAAO+a,eAAiBzR,KAAKtJ,OAAOuI,oBACoB,QAA1De,KAAKtJ,OAAOiB,KAAKghB,gBAAgBm4B,GAAgB5wC,OACpDM,QAAMR,KAAK9D,mBAAmB40C,GAAiB9wC,KAAKtJ,OAAOiB,KAAKghB,gBAAgBm4B,GAAgBG,WAI5G1B,EAAU1yC,UAAUsJ,eAAiB,SAAUzI,GAE3C,GAAsC,SAAlCsC,KAAKtJ,OAAOmF,aAAaC,MAAmBkE,KAAKtJ,OAAOqF,WAAuB,aAG/E,OAFA2B,EAAEsL,QAAS,OACXhJ,KAAKtJ,OAAOqF,WAAuB,cAAI,GAG3CiE,KAAK9E,cAAgB8E,KAAKtJ,OAAOiB,KAAK6wB,iBACtCxoB,KAAK/E,YAAc+E,KAAKtJ,OAAOiB,KAAK6wB,kBAAoB,EAAIxoB,KAAKtJ,OAAOiB,KAAK6wB,iBAAmB,EAChGxoB,KAAK5E,aAAe4E,KAAKtJ,OAAO+R,qBAAqB,IAEzD8mC,EAAU1yC,UAAUoJ,SAAW,SAAUvI,GACrC,GAAgD,WAA5CsC,KAAKtJ,OAAOmF,aAAaQ,eAA6B,CACtD2D,KAAK6vC,OAAQ,EACb7vC,KAAKgxC,kBAAmB,EACxB,IAAItN,EAAc,EAMlB,GALK1jC,KAAK4vC,aAAar4C,SACnByI,KAAKyvC,qBACLzvC,KAAK4vC,aAAej2C,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACjD6D,KAAK9D,mBAAqBvC,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,0BAEX,QAA5C6D,KAAKtJ,OAAOmF,aAAaQ,eAA0B,CACnD,IAAInE,EAAU8H,KAAKtJ,OAAOiB,KAAKwE,wBACO,UAAlC6D,KAAKtJ,OAAOmF,aAAaC,OAAqBkE,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACrGyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAKgf,gBAAgBznB,UACtDW,EAAU8H,KAAK4vC,cAEnB5vC,KAAKqxC,iBAAiBn5C,GACtB8H,KAAKtJ,OAAOmc,OAAOkb,OACnB/tB,KAAKwvC,gBAAkB,EAE3BxvC,KAAKsxC,iBAEL,IAAIC,EAAclzC,WAAS,cAAe2B,KAAKtJ,OAAOiB,MAClD65C,EAAQxxC,KAAKtJ,OAAOghB,kBACpB1X,KAAKtJ,OAAOsF,kBAAkBgE,KAAKgf,gBAAgBznB,QAAsD,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,gBACtFqnC,EAAchmC,EAAEiB,IAAI+K,SACpB6nC,EAAYpd,aAAasd,OAAOA,OAASzxC,KAAKyxC,QAG9C/N,EAAc8N,EAAM35B,uBAAuB,cAAc,GAAGnO,SAKhE6nC,EAAYpd,aAAasd,OAAOtyB,SAAWukB,EAAa6N,EAAYpd,aAAasd,OAAOtyB,QAAQ,MAGxGowB,EAAU1yC,UAAUqJ,kBAAoB,WAC/BlG,KAAK4vC,aAAar4C,SACnByI,KAAK4vC,aAAej2C,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACjD6D,KAAK9D,mBAAqBvC,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,0BAE3D,IAAIo1C,EAAclzC,WAAS,cAAe2B,KAAKtJ,OAAOiB,MACtDqI,KAAKyxC,OAASF,EAAYpd,aAAasd,OAAOA,OAC9C,IAAI9yC,KACAzG,KACAw5C,EAAa1xC,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GACxDkD,EAAOuB,KAAKtJ,OAAOiB,KAAK8Q,qBAAqBzI,KAAKtJ,OAAOiB,KAAK8Q,qBAAqBlR,OAAS,GAC5Fo6C,EAASv4C,EAAoBqF,GAC7BuN,EAAMhM,KAAKtJ,OAAOkjC,kBAAkB,GAAGztB,aAAa,YACpDylC,EAAiB7+B,SAAS/S,KAAKtJ,OAAOiB,KAAKk6C,mBAAmB7lC,GAAKG,aAAa,iBAAkB,IACtG,GAAIwlC,EAAOp6C,OAGP,IAAK,IAFDu6C,EAAaF,EAAiBD,EAAOp6C,OAEhCF,EADau6C,EAAiB,EACTv6C,GAAKy6C,EAAYz6C,IAC3CsH,EAAInG,KAAKwH,KAAKtJ,OAAOiB,KAAK28B,cAAcj9B,KACpC2I,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAO+a,eAAiBzR,KAAKtJ,OAAOuI,qBACnEN,EAAInG,KAAKwH,KAAKtJ,OAAOiB,KAAKmgC,iBAAiBzgC,IAIvD,IAAKK,oBAAkB+G,EAAK3F,YAAa,CACrC,IAAIA,EAAaC,EAAciH,KAAKtJ,OAAQ+H,EAAK3F,WAAWE,UAC5D,IAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,IAAI+rC,EAAatsC,EAAWQ,aAAakF,QAAQC,GACjD3F,EAAWQ,aAAa6D,OAAOioC,EAAY,GAE/CplC,KAAK0vC,oBAAsB/1C,EAAYqG,KAAK0vC,qBAC5C1vC,KAAK0vC,oBAAoBl3C,KAAKiG,GAElCkzC,EAAOn5C,KAAKiG,GACZvG,EAAUy5C,EACV,IAASt6C,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAAK,CACrC,IAAIw5C,EAAa7wC,KAAK4vC,aAAazxC,IAAI,SAAUT,GAAK,OAAOA,EAAEg0C,KAAgBlzC,QAAQtG,EAAQb,GAAGq6C,KAC9E,IAAhBb,GACA7wC,KAAK4vC,aAAazyC,OAAO0zC,EAAY,GAG7C,IAASx5C,EAAI,EAAGA,EAAIsH,EAAIpH,OAAQF,IACvBK,oBAAkBiH,EAAItH,KACvB2I,KAAKtJ,OAAOiB,KAAKk9B,gBAAgBkd,gBAAgBv5C,KAAKmG,EAAItH,KAItEk4C,EAAU1yC,UAAUy0C,eAAiB,WAEjC,IAAK,IADDxpC,EAAO9H,KAAKtJ,OAAOiB,KAAK28B,cACnBj9B,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAC7ByQ,EAAKzQ,GAAG2V,aAAa,gBAAiB3V,EAAEuQ,YAE5C,IAAIiuB,EAAU71B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAC/C,GAAIrS,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,oBAAsBe,KAAKtJ,OAAO+a,eAAiBokB,EAGpF,CAAA,IAFDmc,EAAQhyC,KAAKtJ,OAAOiB,KAAKwX,qBACzBwoB,EAAkB33B,KAAKtJ,OAAOiB,KAAKoiC,yBACvC,IAAS1iC,EAAI,EAAGA,EAAI26C,EAAMz6C,OAAQF,IAC9B26C,EAAM36C,GAAG2V,aAAa,gBAAiB3V,EAAEuQ,YACrCiuB,GACA8B,EAAgBtgC,GAAG2V,aAAa,gBAAiB3V,EAAEuQ,cAKnE2nC,EAAU1yC,UAAUw0C,iBAAmB,SAAUn5C,GAI7C,IAAK,IAHD06B,EAAa5yB,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GACxD0Y,EAAe,eACfnb,EAAyD,UAA5CkH,KAAKtJ,OAAOmF,aAAaQ,eAA6B,gBAAkB,aAChFhF,EAAI,EAAGA,EAAI2I,KAAKtJ,OAAOsF,kBAAkBiY,GAAc1c,OAAQF,IAC/DK,oBAAkBsI,KAAKtJ,OAAOsF,kBAAkBiY,GAAc5c,GAAGyB,KAC9DkH,KAAKtJ,OAAOsF,kBAAkBiY,GAAc5c,GAAGyB,GAAY85B,KAAgB16B,EAAQ8H,KAAK/E,aAAa23B,KACrG5yB,KAAKwvC,gBAAkBxvC,KAAKwvC,gBAAkB,IAK9DD,EAAU1yC,UAAUuJ,gBAAkB,SAAU1I,GAC5C,IACIu0C,EAAgB,iBAChBlzB,EAAiBrhB,EAAErC,aAA0B,eACjD,GAAIqC,EAAErC,aAA0B,eAAE9D,OAE9B,IAAK,IAAIF,EAAI,EAAGA,EAAI0nB,EAAexnB,OAAQF,IACvCwD,GAAaZ,MAAO8kB,EAAe1nB,GAAIiE,OAAQ,QAAU0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,mBAFtG,GAKrB,GAAIwC,EAAErC,aAAa42C,GAAe16C,OAGzB,CAAA,IADDmB,EADiBgF,EAAErC,aAAa42C,GAEpC,IAAS56C,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAAK,CACpC2I,KAAKkyC,eAAex5C,EAAOrB,GAAG2B,UAE9B,IAAK,IADD24C,EAASv4C,EAAoBV,EAAOrB,IAC/BiK,EAAI,EAAGA,EAAIqwC,EAAOp6C,OAAQ+J,IAC/BtB,KAAKkyC,eAAeP,EAAOrwC,GAAGtI,UAElC0E,EAAErC,aAAa42C,GAAiBv0C,EAAErC,aAAa42C,GAAe14C,OAAOo4C,IAG7E3xC,KAAK6vC,OAAQ,GAEjBN,EAAU1yC,UAAUq1C,eAAiB,SAAUj4C,UAEpC+F,KAAKtJ,OAAe,yBAAEuD,UAEtB+F,KAAKtJ,OAAS,mBAAEuD,IAE3Bs1C,EAAU1yC,UAAUkzC,kBAAoB,WACpC,IACI71C,EADAk7B,EAAgB,gBAEhBt8B,EAAa,aAEboD,EAAqB8D,KAAKtJ,OAAOiB,KAAKwE,wBACtC7C,EAAe,eACfmF,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/Di8B,EAAa5yB,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAC5D,IAAK7D,oBAAkBsI,KAAKtJ,OAAO0+B,IAAiB,CAChD,IAAIz2B,EAAMqB,KAAKtJ,OAAO0+B,GAAerqB,QAAQ,MAC7C/K,KAAKtJ,OAAO4+B,YAAY32B,GACxBqB,KAAKtJ,OAAO0+B,GAAiB,KAEjC,IAAK19B,oBAAkBsI,KAAKyvC,mBACxB,IAAK,IAAIp4C,EAAI,EAAGA,EAAI2I,KAAKyvC,kBAAkBl4C,OAAQF,IAG/C,GAFA6C,EAAQuE,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEk1B,KAAgBp0B,QAAQwB,KAAKyvC,kBAAkBp4C,GAAGu7B,IAC3Fn0B,EAAKtB,OAAOjD,EAAO,GAC6B,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,iBACzBnC,EAAQgC,EAAmBiC,IAAI,SAAUT,GAAK,OAAOA,EAAEk1B,KAClDp0B,QAAQwB,KAAKyvC,kBAAkBp4C,GAAGyB,GAAckH,KAAKyvC,kBAAkBp4C,GAAGyB,GAAY85B,GACrF5yB,KAAKyvC,kBAAkBp4C,GAAGu7B,KAC3Bl7B,oBAAkBwE,EAAmBhC,KAEtC,IAAK,IADDuZ,EAAWvX,EAAmBhC,GAAOZ,GAChCS,EAAI,EAAG0Z,GAAY1Z,EAAI0Z,EAASlc,OAAQwC,IACzC0Z,EAAS1Z,GAAG64B,KAAgB5yB,KAAKyvC,kBAAkBp4C,GAAGu7B,IACtD12B,EAAmBhC,GAAOZ,GAAc6D,OAAOpD,EAAG,GAO1E,IAAKrC,oBAAkBsI,KAAK0vC,qBACxB,IAASr4C,EAAI,EAAGA,EAAI2I,KAAK0vC,oBAAoBn4C,OAAQF,IACjD,IAAKK,oBAAkBsI,KAAK0vC,oBAAoBr4C,GAAGyB,IAAc,CAC7DoB,EAAQgC,EAAmBiC,IAAI,SAAUT,GAAK,OAAOA,EAAEk1B,KAClDp0B,QAAQwB,KAAK0vC,oBAAoBr4C,GAAGyB,GAAY85B,IACrD,IAAIuf,EAA4D,IAA5CnyC,KAAK0vC,oBAAoBr4C,GAAa,MAAU2I,KAAK0vC,oBAAoBr4C,GAAa,MACtG2I,KAAK0vC,oBAAoBr4C,GAAa,MAAI,EACzCK,oBAAkBwE,EAAmBhC,KACtCgC,EAAmBhC,GAAOZ,GAAc6D,OAAOg1C,EAAe,EAAGnyC,KAAK0vC,oBAAoBr4C,IAK1G2I,KAAKyvC,kBAAoBzvC,KAAK4vC,aAAe5vC,KAAK2vC,kBAAoB3vC,KAAK9D,sBAC3E8D,KAAK4vC,aAAej2C,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACjD6D,KAAKkxC,WAAa,EAClBlxC,KAAK9D,mBAAqBvC,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACvD6D,KAAK0vC,uBACL1vC,KAAKtJ,OAAOiB,KAAK4H,aAAa2uB,WAElCqhB,EAAU1yC,UAAUwJ,UAAY,SAAUtD,GACtC,GAAsC,UAAlC/C,KAAKtJ,OAAOmF,aAAaC,KAAkB,CAC3C,IAAIzE,OAAI,EACJgE,EAAehD,OAAOyE,eAAeC,KAAKgG,EAAM,kBAAoBA,EAAKqvC,eAAiBpyC,KAAKtJ,OAAOsF,kBACtGgjB,EAAiB,iBAIjBvgB,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/DuF,EAAqB8D,KAAKtJ,OAAOiB,KAAKwE,wBACtCk2C,EAAeryC,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAE1D+2C,EAAaj3C,EAAyB,aAEtCH,OAAgB,EAChBD,OAAc,EAEdG,OAAe,EAKnB,GAHIk3C,EAAW/6C,OAAS,GAAiD,WAA5CyI,KAAKtJ,OAAOmF,aAAaQ,gBAClDi2C,EAAWtO,UAEiC,WAA5ChkC,KAAKtJ,OAAOmF,aAAaQ,iBAAgChE,OAAOyE,eAAeC,KAAKgG,EAAM,kBAE1F,GADAtE,EAAKtB,OAAOsB,EAAKlH,OAAS+6C,EAAW/6C,OAAQ+6C,EAAW/6C,QACnDyI,KAAKtJ,OAAOma,aAAepS,EAAKlH,SAAW2E,EAAmB3E,OAK9D,CACD,IAAIg7C,EAAe54C,EAAY8E,GAC/B,GAAI8zC,EAAah7C,OAAQ,CACrB,IAAIm/B,EAAa6b,EAAap0C,IAAI,SAAUT,GAAK,OAAOA,EAAE20C,KACrD7zC,QAAQtC,EAAmB,GAAGm2C,IAC/BG,EAAW9b,EAAa12B,KAAKtJ,OAAOiB,KAAKmZ,aAAa86B,SAC1D1vC,EAAqBq2C,EAAap1C,OAAOu5B,EAAY8b,SAVrDt2C,EAAmB3E,OAAS+6C,EAAW/6C,QACvC2E,EAAmBiB,OAAOjB,EAAmB3E,OAAS+6C,EAAW/6C,OAAQ+6C,EAAW/6C,QAgBhG,IAHsC,IAAlCyI,KAAK2vC,kBAAkBp4C,QACvByI,KAAK2vC,kBAAkBn3C,KAAKwH,KAAKtJ,OAAO8G,SAASuF,EAAK7I,QAErD7C,EAAI,EAAGA,EAAIi7C,EAAW/6C,OAAQF,IAAK,CACpC,IAAI+C,EAAWgC,YAAWk2C,EAAWj7C,IAgCrC,UA/BO+C,EAAStB,kBACTsB,EAASpB,gBACToB,EAASF,aACTE,EAASD,aACTC,EAASf,uBACTe,EAASd,oBACTc,EAASkE,eACX5G,oBAAkB0C,EAAS+2C,uBACrB/2C,EAAS+2C,cAEpBmB,EAAWj7C,GAAG+C,SAAWA,EACzBgB,EAAe4E,KAAK2vC,kBAAkBt4C,GAClCK,oBAAkB0D,KAClBA,EAAe4E,KAAK2vC,kBAAkBt4C,EAAI,IAE1C2I,KAAKhF,kBACAtD,oBAAkB46C,EAAWj7C,GAAGyB,aACjCuE,EAAgBg1C,EAAcC,EAAWj7C,GAAGyB,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBs3C,EAAWj7C,KAGhHK,oBAAkB0D,KACnBH,EAAcG,EAAalB,OAEiB,QAA5C8F,KAAKtJ,OAAOmF,aAAaQ,gBAAwE,WAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAC1E3E,oBAAkB46C,EAAWj7C,GAAGyB,cAAuC,IAAxBkH,KAAK9E,gBACpDA,GAAiB,EACjBE,EAAe,MAGvBP,GAAaZ,MAAOq4C,EAAWj7C,GAAIiE,OAAQ,OAAS0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBC,EAAaC,OAzDvF,EAyDkHE,GAC/HF,EAAgB,KACgC,UAA5C8E,KAAKtJ,OAAOmF,aAAaQ,iBAA+B3E,oBAAkB46C,EAAWj7C,GAAa,YAIlG,IAAK,IAHDo7C,EAAav2C,EAAmBiC,IAAI,SAAUT,GAAK,OAAOA,EAAE20C,KAC3D7zC,QAAQ8zC,EAAWj7C,GAAa,WAAEg7C,IACnC5+B,EAAWvX,EAAmBu2C,GAAwB,aACjD14C,EAAI,EAAGA,EAAI0Z,EAASlc,OAAQwC,IAC7B0Z,EAAS1Z,GAAGs4C,KAAkBC,EAAWj7C,GAAGg7C,IAC5Cn2C,EAAmBu2C,GAAwB,aAAEt1C,OAAOpD,EAAG,GAKvE,GAAIsB,EAAa2jB,GAAgBznB,OAC7B,IAAKF,EAAI,EAAGA,EAAIgE,EAAa2jB,GAAgBznB,OAAQF,IACjDwD,GAAaZ,MAAOoB,EAAa2jB,GAAgB3nB,GAAIiE,OAAQ,UAAY0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBC,EAAaC,OAxEhH,EAwE2IE,GAG5J4E,KAAKtJ,OAAO6G,cACZ,IAAK,IAAIo7B,EAAM,EAAGA,EAAMl6B,EAAKlH,OAAQohC,IACjCl6B,EAAKk6B,GAAU,MAAIA,EACnBziB,WAAS,sBAAwBzX,EAAKk6B,GAAa,SAAI,SAAUA,EAAK34B,KAAKtJ,QACtE+H,EAAKk6B,GAAU,OAChB34B,KAAKtJ,OAAO6G,WAAW/E,KAAKiG,EAAKk6B,IAI7C34B,KAAK2vC,kBAAoB3vC,KAAKyvC,kBAAoBzvC,KAAK4vC,aAAe5vC,KAAK0vC,oBAAsB1vC,KAAK9D,uBAE1GqzC,EAAU1yC,UAAUk0C,wBAA0B,SAAU72C,GACpD,IAAI4N,EAAO9H,KAAKtJ,OAAOiB,KAAK28B,cAC5B,IAAiD,UAA5Ct0B,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,iBAC9E2D,KAAK9E,eAAiB,EAAG,CAC5B,IAAKxD,oBAAkBsI,KAAK4vC,aAAa5vC,KAAK/E,eAAiB+E,KAAK4vC,aAAa5vC,KAAK/E,aAAa9B,SAC/F,GAAI6G,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACvDyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAKgf,gBAAgBznB,QAEtD,GADA2C,GAASd,EAAoB4G,KAAK4vC,aAAa5vC,KAAK/E,cAAc1D,OAClB,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAErDnC,GADsB8F,KAAKqwC,2BAK/Bn2C,GAASd,EAAoB4G,KAAK4vC,aAAa5vC,KAAK/E,cAAc1D,OAGtE2C,GAAS4N,EAAKvQ,SACd2C,EAAQ4N,EAAKvQ,OAAS,GAE1ByI,KAAKqxC,iBAAiBrxC,KAAKtJ,OAAOiB,KAAKwE,yBACnC6D,KAAKwvC,kBACLt1C,GAAS8F,KAAKwvC,iBAElBxvC,KAAKwvC,gBAAkB,EAE3B,OAAOt1C,GAEXq1C,EAAU1yC,UAAUmzC,qBAAuB,SAAUtyC,GACjDA,EAAEqF,KAAKiG,QAAS,EAChB,IAAIioC,EAAUjxC,KAAKtJ,OAAOiB,KAAKqE,kBAC3BiY,KAEA5b,OAAOC,KAAK24C,GAAS15C,SACrB0c,EAAeg9B,EAAQh9B,cAE3B,IAAK,IAAI5c,EAAI,EAAGA,EAAI4c,EAAa1c,OAAQF,IACrCqG,EAAEoK,KAAK3K,OAAO8W,EAAa5c,GAAQ,MAAG,IAG9Ck4C,EAAU1yC,UAAUozC,cAAgB,SAAUltC,GAG1CA,EAAU,MAAI/C,KAAKtJ,OAAOkjC,kBAAkB,GAAW,UAEpD2V,KChkBPmD,GAAsB,WAMtB,SAASA,EAAKh8C,GACVsJ,KAAKiU,aAAe,eACpBjU,KAAKgf,eAAiB,iBACtBhf,KAAK2yC,iBAAmB,KACxB3yC,KAAK4yC,oBAAqB,EAC1BnwC,OAAKC,OAAOmwC,QACZ7yC,KAAKtJ,OAASA,EACdsJ,KAAKhF,iBAAmBtD,oBAAkBhB,EAAOuG,iBACjD+C,KAAK8yC,uBAAyB,KAC9B9yC,KAAK+yC,sBACL/yC,KAAKgzC,gBAAkB,IAAIzD,GAAUvvC,KAAKtJ,QAC1CsJ,KAAKkK,mBA27BT,OAn7BAwoC,EAAK71C,UAAU+F,cAAgB,WAC3B,MAAO,QAMX8vC,EAAK71C,UAAUqN,iBAAmB,WAC9BlK,KAAKtJ,OAAOyT,GAAGsS,GAAmBzc,KAAKwF,WAAYxF,MACnDA,KAAKtJ,OAAOyT,GAAGmiB,GAAkBtsB,KAAKyF,UAAWzF,MACjDA,KAAKtJ,OAAOyT,GAAG4jB,GAAiB/tB,KAAK0F,SAAU1F,MAC/CA,KAAKtJ,OAAOyT,GAAGgkB,GAA0BnuB,KAAK2F,kBAAmB3F,MACjEA,KAAKtJ,OAAOyT,GAAG2iB,GAAiB9sB,KAAK4F,SAAU5F,MAC/CA,KAAKtJ,OAAOyT,GAAGqjB,GAAoBxtB,KAAKgG,YAAahG,MACrDA,KAAKtJ,OAAOiB,KAAKwS,GAAG8oC,GAAmBjzC,KAAKsG,WAAYtG,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,iBAAkBnK,KAAKkzC,YAAalzC,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,gBAAiBnK,KAAKmzC,aAAcnzC,MACxDA,KAAKtJ,OAAOyT,GAAG+iB,GAAiBltB,KAAK8F,SAAU9F,MAC/CA,KAAKtJ,OAAOyT,GAAG,cAAenK,KAAKozC,iBAAkBpzC,MACrDA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKozC,iBAAkBpzC,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAGkpC,GAAkBrzC,KAAK2F,kBAAmB3F,MAC9DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,WAAYnK,KAAKszC,aAActzC,MACnDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,cAAenK,KAAKuzC,eAAgBvzC,MACxDA,KAAKtJ,OAAOyT,GAAG,0BAA2BnK,KAAKwzC,wBAAyBxzC,MAExEA,KAAKtJ,OAAOiB,KAAKwS,GAAGspC,GAAwBzzC,KAAK2G,gBAAiB3G,MAClEA,KAAKtJ,OAAOiB,KAAKwS,GAAGupC,GAA0B1zC,KAAK4G,kBAAmB5G,MACtEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,mBAAoBnK,KAAK2zC,eAAgB3zC,MAC7DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,mBAAoBnK,KAAK4zC,eAAgB5zC,OAEjE0yC,EAAK71C,UAAUy2C,aAAe,SAAU51C,GACpCsC,KAAK6zC,kBAAoBn2C,EAAE0D,QAE/BsxC,EAAK71C,UAAU+2C,eAAiB,SAAUE,GACtCA,EAAQz3C,eAAiB2D,KAAKtJ,OAAOmF,aAAaQ,eAClDy3C,EAAQ74C,YAAc+E,KAAK/E,YAC3B64C,EAAQC,cAAgB/zC,KAAK2yC,kBAEjCD,EAAK71C,UAAU8J,gBAAkB,SAAU5D,GACvC/C,KAAKtJ,OAAOuS,QAAQ4kB,EAAoB9qB,IAE5C2vC,EAAK71C,UAAU+J,kBAAoB,SAAU7D,GACH,SAAlC/C,KAAKtJ,OAAOmF,aAAaC,MACzBkE,KAAKtJ,OAAOuS,QAAQ4P,EAAuB9V,IAOnD2vC,EAAK71C,UAAU2N,oBAAsB,WAC7BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI+R,GAAmBzc,KAAKwF,YACxCxF,KAAKtJ,OAAOgU,IAAI4hB,GAAkBtsB,KAAKyF,WACvCzF,KAAKtJ,OAAOgU,IAAIqjB,GAAiB/tB,KAAK0F,UACtC1F,KAAKtJ,OAAOgU,IAAIyjB,GAA0BnuB,KAAK2F,mBAC/C3F,KAAKtJ,OAAOgU,IAAI8iB,GAAoBxtB,KAAKgG,aACzChG,KAAKtJ,OAAOiB,KAAK+S,IAAIuoC,GAAmBjzC,KAAKsG,YAC7CtG,KAAKtJ,OAAOiB,KAAK+S,IAAI,iBAAkB1K,KAAKkzC,aAC5ClzC,KAAKtJ,OAAOiB,KAAK+S,IAAI,gBAAiB1K,KAAKmzC,cAC3CnzC,KAAKtJ,OAAOgU,IAAIwiB,GAAiBltB,KAAK8F,UACtC9F,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAKozC,kBACpCpzC,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKozC,kBACvCpzC,KAAKtJ,OAAOiB,KAAK+S,IAAI,cAAe1K,KAAKuzC,gBACzCvzC,KAAKtJ,OAAOiB,KAAK+S,IAAI2oC,GAAkBrzC,KAAK2F,mBAC5C3F,KAAKtJ,OAAOgU,IAAI,0BAA2B1K,KAAKwzC,yBAChDxzC,KAAKtJ,OAAOiB,KAAK+S,IAAI+oC,GAAwBzzC,KAAK2G,iBAClD3G,KAAKtJ,OAAOiB,KAAK+S,IAAIgpC,GAA0B1zC,KAAK4G,mBACpD5G,KAAKtJ,OAAOiB,KAAK+S,IAAI,WAAY1K,KAAKszC,cACtCtzC,KAAKtJ,OAAOiB,KAAK+S,IAAI,mBAAoB1K,KAAK2zC,gBAC9C3zC,KAAKtJ,OAAOiB,KAAK+S,IAAI,mBAAoB1K,KAAK4zC,kBASlDlB,EAAK71C,UAAU+M,QAAU,WACrB5J,KAAKwK,uBAOTkoC,EAAK71C,UAAUm3C,oBAAsB,SAAUrf,GAC3C30B,KAAKtJ,OAAOiB,KAAKoE,WAAWi4C,oBAAoBrf,IAEpD+d,EAAK71C,UAAUu2C,iBAAmB,SAAUrwC,GACxC,IAAIkxC,EAAY17C,YAAU,aAAcwK,GACpCgiB,EAAYxsB,YAAU,OAAQ07C,GAC9BC,EAAUl0C,KAAKtJ,OACfG,EAAUq9C,EAAQv9C,WAAWE,QACjC,IAAKJ,EAAay9C,IAAYr9C,aAAmB2tB,sBAClB,SAA1ByvB,EAAUp0C,aAA+C,QAArBo0C,EAAU34C,SACN,UAAxC44C,EAAQr4C,aAAaQ,gBAAsE,UAAxC63C,EAAQr4C,aAAaQ,gBAC1B,UAAxC63C,EAAQr4C,aAAaQ,gBAC5B,GAAkB,gBAAd0oB,EAA6B,CAC7B,IAAIrb,EAAWhS,oBAAkBu8C,EAAUt1C,OAAStG,OAAOC,KAAK27C,EAAUt1C,KAAKpH,OAASyI,KAAK9E,cACzF+4C,EAAUt1C,IAAI+K,SAAW,EACzByqC,EAAYz8C,oBAAkBgS,KAA2B,IAAdA,GACwC,EAAnFwqC,EAAQ/3C,wBAAwBuN,GAAUwqC,EAAQ34C,0BAA0B,IAChF24C,EAAQv8C,KAAKsd,MAAMM,UAAU,gBAAiB4+B,QAE7C,GAAkB,mBAAdpvB,EAEL,IAAK,IADDqvB,EAAeF,EAAQv8C,KAAKsd,MAAMG,OAAO7d,OACpCF,EAAI,EAAGA,EAAI+8C,EAAc/8C,IACW,kBAArC68C,EAAQv8C,KAAKsd,MAAMG,OAAO/d,GAAGQ,KAC7Bq8C,EAAQv8C,KAAKsd,MAAMG,OAAOjY,OAAO9F,GAK7C2I,KAAKtJ,OAAO+iB,yBAAyC,mBAAdsL,GACvC/kB,KAAKq0C,kBAAkBJ,GAEW,UAAlCj0C,KAAKtJ,OAAOmF,aAAaC,MAA8C,WAA1Bm4C,EAAUp0C,aACvDG,KAAKtJ,OAAOmc,OAAO,uBAG3B6/B,EAAK71C,UAAUw3C,kBAAoB,SAAUtxC,GACzC,GAA0B,SAArBA,EAAKlD,aAA0C,QAAhBkD,EAAKzH,QAA0C,WAArByH,EAAKlD,YAA0B,CACzF,GAAgD,QAA5CG,KAAKtJ,OAAOmF,aAAaQ,iBAAoD,IAAxB2D,KAAK9E,eACjC,SAArB6H,EAAKlD,aAA0C,QAAhBkD,EAAKzH,OAAmB,CAC3D,IAAIg5C,EAAat0C,KAAKtJ,OAAOiB,KAAKghB,gBAC9B47B,EAAeD,EAAWn3C,OAAO,EAAG,GAAG,GACvCq3C,EAAoBx0C,KAAK/E,YACzBmf,EAAcpa,KAAKtJ,OAAOyF,wBACkB,UAA5C6D,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,iBAChFm4C,GAAqBp7C,EAAoBghB,EAAYo6B,EAAoB,IAAIj9C,QAEjFi9C,EAAgE,UAA5Cx0C,KAAKtJ,OAAOmF,aAAaQ,eAA6Bm4C,EAAoB,EAAIA,EAClGF,EAAWn3C,OAAOq3C,EAAmB,EAAGD,GACxC,IAAIE,EAAYr6B,EAAYjd,OAAO,EAAG,GAAG,GACzCid,EAAYjd,OAAOq3C,EAAmB,EAAGC,GACzCz0C,KAAK00C,8BAA8BD,EAAWz0C,KAAK/E,aAEvD,IAAIy8B,EAAc13B,KAAKtJ,OAAOiB,KAAKmgC,iBAC/B6c,EAAoB30C,KAAKtJ,OAAOiB,KAAKi9C,uBACrCC,EAAU70C,KAAKtJ,OAAOqxB,uBAAuB+sB,YAC5CD,IACDE,gBAAc/0C,KAAKtJ,OAAOiB,KAAMqI,KAAKtJ,OAAOiB,KAAKghB,gBAAiB3Y,KAAKtJ,OAAOiB,KAAKkH,UAAW,GAC9FmB,KAAKg1C,YAAYh1C,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOmI,UAAWmB,KAAKtJ,OAAOyF,2BAEhF04C,GAAW70C,KAAKtJ,OAAOuI,mBAAqB,IAC7C81C,gBAAc/0C,KAAKtJ,OAAOiB,KAAMg9C,EAAmBjd,EAAa,GAChE13B,KAAKg1C,YAAYh1C,KAAKtJ,OAAOiB,KAAKhB,WAAY+gC,EAAa13B,KAAKtJ,OAAOyF,4BAInFu2C,EAAK71C,UAAU63C,8BAAgC,SAAUD,EAAWQ,GAChE,IAAI7tC,EAAQpH,KAGR2rC,EAAOv0B,KAAKC,KAAK49B,EAAcj1C,KAAKtJ,OAAOiB,KAAKmZ,aAAa86B,UAC7D3xB,EAAO0xB,EAAO,EAAIA,EAAO,EACzBuJ,EAAYD,GAAgBh7B,EAAO,GAAKja,KAAKtJ,OAAOoa,aAAa86B,SACjEuJ,EAA0Bn1C,KAAKtJ,OAAOiB,KAAKy9C,qBAAiC,wBAChFD,EAAwB,GAAGh4C,OAAO,EAAG,GACrC,IAAIsB,EAAO02C,EAAwBl7B,GAC9BviB,oBAAkBsI,KAAK5E,gBACxBqD,EAAKhB,OAAO,SAAUC,EAAGxD,GACjBwD,EAAE1E,WAAaoO,EAAMhM,aAAapC,WAClCk8C,EAAYh7C,MAGhB8F,KAAK5E,aAAa/B,iBAAmB2G,KAAK5E,aAAa9B,aAAa/B,QACxB,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAChF64C,GAAa97C,EAAoB4G,KAAK5E,cAAc7D,SAGxD29C,GAAal1C,KAAKtJ,OAAOoa,aAAa86B,WAEtCntC,EAAO02C,EADPl7B,GAAQ,GAERi7B,EAAYA,EAAYl1C,KAAKtJ,OAAOoa,aAAa86B,UAAY,EAAIsJ,EAAYl1C,KAAKtJ,OAAOoa,aAAa86B,SAAW,GAErHsJ,EAAwD,UAA5Cl1C,KAAKtJ,OAAOmF,aAAaQ,eAA6B64C,EAAY,EAAIA,EAClFz2C,EAAKtB,OAAO+3C,EAAW,EAAGT,GAC1Bz0C,KAAKtJ,OAAOiB,KAAKy9C,qBAA0C,yBAE/D1C,EAAK71C,UAAU8I,kBAAoB,SAAU5C,GACzC,IAAI3B,EAAS2B,EAAK3B,OAClB,IAAI1J,oBAAkB0J,EAAO2J,QAAQ,kBAG/B/K,KAAKtJ,OAAOiB,KAAKkE,aAAyB,eAAKmE,KAAKtJ,OAAOiB,KAAK+2B,OAAtE,CAGA,IAAI/uB,EAASK,KAAKtJ,OAAOiB,KAAK84C,kBAAkBrvC,EAAO2J,QAAQ,gBAAgBoB,aAAa,kBAC5F,GAAsC,SAAlCnM,KAAKtJ,OAAOmF,aAAaC,OAAoBkE,KAAKq1C,WAAa11C,IAAWA,EAAOsE,cACjFjE,KAAKtJ,OAAOmF,aAAaoE,cAAgBN,EAAOM,eAAkBmB,EAAOgH,UAAUC,SAAS,sBAC5FjH,EAAOgH,UAAUC,SAAS,uBAA0BrI,KAAKtJ,OAAOmF,aAAakzB,oBAAqB,CAGlG,GAFA/uB,KAAKq1C,WAAY,EACjBr1C,KAAKtJ,OAAOiB,KAAK2mB,eAAgBkK,iBAAkBzlB,EAAK2G,WAAY,GAChE1J,KAAKtJ,OAAO0H,qBAAsB,CAClC,IAAI6Q,EAAKpE,eAAa9H,EAAK3B,OAAQ,SACnCpB,KAAK2yC,iBAAmB1jC,EAAG9C,aAAa,iBACxC8C,EAAGjC,aAAa,gBAAiBiC,EAAGvF,SAAW,IAEnD1J,KAAKs1C,mBAAmB,YAGhC5C,EAAK71C,UAAUy4C,mBAAqB,SAAUx5C,GAC1CkE,KAAKtJ,OAAOiB,KAAK2mB,eAAgBziB,cAAgBC,KAAMA,KAAU,GAC9CvD,YAAU,gBAAiByH,KAAKtJ,OAAOiB,KAAKoE,YAClDgG,MAAM/B,KAAKtJ,OAAOiB,KAAKoE,YACpCiE,KAAKtJ,OAAOiB,KAAK+2B,QAAS,GAE9BgkB,EAAK71C,UAAU82C,eAAiB,WACxB3zC,KAAKtJ,OAAO0H,sBAA0D,SAAlC4B,KAAKtJ,OAAOmF,aAAaC,OAC7DkE,KAAKq1C,WAAY,EACjBr1C,KAAKs1C,mBAAmB,YAGhC5C,EAAK71C,UAAUyJ,WAAa,SAAUvD,GAC9B/C,KAAKq1C,YACLr1C,KAAKu1C,SAAWxyC,EAAKzH,QAEL,OAAhByH,EAAKzH,QACL0E,KAAK2F,kBAAkB5C,GAEP,WAAhBA,EAAKzH,QACL0E,KAAKtJ,OAAO85B,aAGpBkiB,EAAK71C,UAAUq1C,eAAiB,SAAUj4C,UAE/B+F,KAAKtJ,OAAe,yBAAEuD,UAEtB+F,KAAKtJ,OAAS,mBAAEuD,IAE3By4C,EAAK71C,UAAUiJ,SAAW,SAAU/C,GAChC,IAAIqE,EAAQpH,KAERw1C,EAAOzyC,EAAY,QAoBvB,UAnBOA,EAAY,QACf/C,KAAKtJ,OAAO0H,uBAAyB1G,oBAAkBsI,KAAK2yC,oBAC5D5vC,EAAKpE,IAAIqO,aAAa,gBAAiBhN,KAAK2yC,kBAC5C3yC,KAAK2yC,sBAAmB/0B,GAEN,UAAlB5d,KAAKu1C,UACLv1C,KAAKtJ,OAAOuS,QAAQikB,GAAiBnqB,EAAM,SAAU0yC,GAC5CA,EAAazsC,QAA6C,SAAnC5B,EAAM1Q,OAAOmF,aAAaC,KAG7C25C,EAAazsC,QAA6C,SAAnC5B,EAAM1Q,OAAOmF,aAAaC,OACtDsL,EAAMiuC,WAAY,EAClBjuC,EAAMkuC,mBAAmB,WAJzBluC,EAAM6qB,mBAAmB,QAMxBv6B,oBAAkB89C,IACnBA,EAAKxpB,QAAQypB,KAIrBz1C,KAAK6zC,oBAAsB7zC,KAAK6zC,kBAAkBzrC,UAAUC,SAAS,qBACrErI,KAAK6zC,kBAAkBzrC,UAAUC,SAAS,uBAAyBrI,KAAK6zC,kBAAkBzrC,UAAUC,SAAS,kBAG7G,OAFAtF,EAAKiG,QAAS,OACdhJ,KAAK6zC,kBAAoB,MAGS,SAAlC7zC,KAAKtJ,OAAOmF,aAAaC,OACH,QAAlBkE,KAAKu1C,UAAwC,aAAlBv1C,KAAKu1C,SAChCv1C,KAAKu1C,SAAW,KAEO,UAAlBv1C,KAAKu1C,WACVxyC,EAAKiG,QAAS,EACdhJ,KAAKu1C,SAAW,KAChBr/B,WAAS,kBAAkB,EAAOlW,KAAKtJ,SAEtCqM,EAAKytC,aAAavwC,eACnB8C,EAAKiG,QAAS,KAO1B0pC,EAAK71C,UAAUo1B,mBAAqB,SAAUyjB,GAC1C,IAAKh+C,oBAAkBsI,KAAKtJ,OAAOiB,KAAKw6B,eAAgB,CACpD,IAAIwjB,EAAY31C,KAAKtJ,OAAOid,QAAQC,GAAK,gBACzC5T,KAAKtJ,OAAOiB,KAAKw6B,cAAcC,aAAaujB,EAAY,MAAOA,EAAY,OAAQA,EAAY,UAAuB,SAAZD,GAC1G11C,KAAKtJ,OAAOiB,KAAKw6B,cAAcC,aAAaujB,EAAY,SAAUA,EAAY,UAAuB,SAAZD,KAGjGhD,EAAK71C,UAAUmJ,YAAc,WACzB,GAAsC,SAAlChG,KAAKtJ,OAAOmF,aAAaC,KAAiB,CAC1C,IAAI85C,EAAcv3C,WAAS,yBAA0B2B,KAAKtJ,OAAOiB,KAAKoE,YAClE85C,EAAW71C,KAAKtJ,OAAOu8B,iBAAiB2iB,EAAYlsC,SAAU1J,KAAKtJ,OAAO0I,iBAC9EY,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAMm3C,EAAYnqC,QAClBhM,KAAMo2C,EACNl2C,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,mBAEtDY,KAAKs1C,mBAAmB,UACxBt1C,KAAKq1C,WAAY,EAEiB,UAAlCr1C,KAAKtJ,OAAOmF,aAAaC,MACzBkE,KAAKtJ,OAAOmc,OAAO,yBAG3B6/B,EAAK71C,UAAU02C,eAAiB,SAAUxwC,GAClC5L,EAAgB6I,KAAKtJ,SAA6C,SAAlCsJ,KAAKtJ,OAAOmF,aAAaC,MAAmC,SAAhBiH,EAAKzH,SACjF0E,KAAK2xB,WAAW5uB,EAAMA,EAAK2G,UAC3B1J,KAAK81C,cAAc/yC,EAAMA,EAAKpE,IAAKoE,EAAK2G,YAGhDgpC,EAAK71C,UAAU+I,SAAW,SAAU7C,GAChC,IAAIqE,EAAQpH,KACZ,GAAsC,SAAlCA,KAAKtJ,OAAOmF,aAAaC,MAAmBkE,KAAKtJ,OAAOid,QAAQ7I,cAAc,QAAS,CACvF/H,EAAKiG,QAAS,EAEdkN,WAAS,UAAU,EAAOlW,KAAKtJ,OAAOiB,MACtCue,WAAS,kBAAkB,EAAMlW,KAAKtJ,QACtCqM,EAAK0I,QAAQ1I,EAAK5H,YAAc4H,EAAK9I,MACrC,IAAIqpB,EAEAA,EADA5rB,oBAAkBqL,EAAKtD,MACfO,KAAKtJ,OAAOiB,KAAKoE,WAAqB,WAAEg6C,KAAK7yB,cAAcwe,WAG3D3+B,EAAKtD,KAAKiiC,WAEtB,IAAIsU,EACAC,EAAgBj2C,KAAKtJ,OAAO6E,0BAChC,GAAI7D,oBAAkB4rB,GAClBtjB,KAAKtJ,OAAOiB,KAAKwE,wBAAwBsB,OAAO,SAAUC,EAAGrG,GACrDqG,EAAEu4C,EAAc,MAAQlzC,EAAK0I,QAAQwqC,EAAc,MACnDD,EAAa3+C,SAKpB,CACD,IAAIw+B,EAAU71B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAGvC2jC,EAFJngB,GAC8C,IAA1C71B,KAAKtJ,OAAOmI,UAAUL,QAAQ8kB,GACjBtjB,KAAKtJ,OAAOmI,UAAUL,QAAQ8kB,IAEe,IAArDtjB,KAAKtJ,OAAOqhC,qBAAqBv5B,QAAQ8kB,GACjCtjB,KAAKtJ,OAAOqhC,qBAAqBv5B,QAAQ8kB,GAGzCtjB,KAAKtJ,OAAOohC,iBAAiBt5B,QAAQ8kB,IAIE,IAA1CtjB,KAAKtJ,OAAOmI,UAAUL,QAAQ8kB,IAAkBtjB,KAAKtJ,OAAOuI,mBAAqB,EAC3Fe,KAAKtJ,OAAOiB,KAAKmgC,iBAAiBt5B,QAAQ8kB,GAAStjB,KAAKtJ,OAAOmI,UAAUL,QAAQ8kB,GAG7F,IAAI6U,KAMJ,GALA/7B,SAAO+7B,EAAKp1B,GACZo1B,EAAInvB,QAAS,EACbmvB,EAAIn1B,KAAO,OACXsgB,EAAQtjB,KAAKtJ,OAAOiB,KAAKkH,UAAUykB,EAAM5Z,UACzC1J,KAAKtJ,OAAOuS,QAAQ4kB,EAAoBsK,GACnCA,EAAInvB,OAiCLhJ,KAAKtJ,OAAOiB,KAAK+2B,QAAS,OA7B1B,GAHKpL,EAAM5Z,WAAa1J,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAwB,QAAlByI,KAAKu1C,WAC5Ev1C,KAAKk2C,cAAe,GAEnBz/C,EAAauJ,KAAKtJ,SACjBsJ,KAAKtJ,OAAOC,sBAAsBC,eAAeoJ,KAAKtJ,OAAOC,WAAWE,mBAAmB2tB,qBAa5F,GAAI/tB,EAAauJ,KAAKtJ,SACtBsJ,KAAKtJ,OAAOC,sBAAsBC,eAAeoJ,KAAKtJ,OAAOC,WAAWE,mBAAmB2tB,oBAAoB,CAChH,IAAIvP,EAAQjV,KAAKtJ,OAAOiB,KAAKsd,MAEtBjV,KAAKtJ,OAAOiB,KAAKhB,WAAWw/C,OAAOF,EAAc,GAAIlzC,EAAK0I,QAASwJ,EAAMmhC,UAAWnhC,EAAOlS,EAAKszC,eAClGxgC,KAAK,SAAUnY,GACXhG,oBAAkBgG,KACnBqF,EAAK0I,QAAQ1I,EAAK5H,YAAcuC,EAAEqF,EAAK5H,aAE3CiM,EAAMuqB,WAAW5uB,EAAMizC,GACvB5uC,EAAM0uC,cAAc/yC,EAAMugB,EAAO0yB,WAtBrC,GAAI7+C,EAAgB6I,KAAKtJ,QAAS,CAC9B,IACI4/C,GAAaz2C,YAAa,OAAQpB,KAAMsE,EAAK0I,QAASnQ,OAAQ,OAAQqD,IAAK2kB,EAC3E5Z,SAAUssC,EAAYvqC,QAAS1I,EAAK0I,QAAStQ,WAAY4H,EAAK5H,WAC9Do7C,kBAAmB,KAAMC,oBAAqB,MAClDx2C,KAAKtJ,OAAOiB,KAAKygB,gBAA4B,aAAEk+B,EAAUt2C,KAAKtJ,OAAOiB,KAAKsd,YAG1EjV,KAAK2xB,WAAW5uB,EAAMizC,GACtBh2C,KAAK81C,cAAc/yC,EAAMugB,EAAO0yB,KAsBpDtD,EAAK71C,UAAUi5C,cAAgB,SAAU/yC,EAAMpE,EAAK+K,GAChD,IAAI+sC,EACAz2C,KAAKtJ,OAAOiB,KAAK++C,iBACjB12C,KAAKtJ,OAAOiB,KAAK++C,gBAAgBxoB,QAAQnrB,EAAK0I,SAElDzL,KAAKtJ,OAAOiB,KAAKoE,WAAW46C,gBAAgB32C,KAAKtJ,OAAOiB,KAAK+jB,iBAAiB3Y,EAAK5H,cACnF6E,KAAKtJ,OAAOiB,KAAKoE,WAAW66C,QAAQhtC,UACd,QAAlB5J,KAAKu1C,UAAwC,aAAlBv1C,KAAKu1C,WAChCv1C,KAAKs1C,mBAAmB,UACxBt1C,KAAKq1C,WAAY,GAErBr1C,KAAKiyB,mBAAmB,QACVjyB,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,GAGvCokC,EADA1zC,EAAKtD,KAAKsL,QAAQ,0BAA4BhI,EAAKtD,KAAKsL,QAAQ,0BACzD/K,KAAKtJ,OAAOiB,KAAKkH,UAAU6K,GAE7B3G,EAAKtD,KAAKsL,QAAQ,qBAAuBhI,EAAKtD,KAAKsL,QAAQ,qBACzD/K,KAAKtJ,OAAOiB,KAAKmgC,iBAAiBpuB,GAGlC1J,KAAKtJ,OAAOiB,KAAKogC,qBAAqBruB,GAEjD2D,eAAaopC,IAAQ,cAAe,eACpCppC,cAAYopC,EAAKluC,iBAAiB,eAAgB,oBAAqB,iBAElEvI,KAAKtJ,OAAOuI,mBAAqB,IAElCw3C,EADA1zC,EAAKtD,KAAKsL,QAAQ,oBAAsBhI,EAAKtD,KAAKsL,QAAQ,oBACnD/K,KAAKtJ,OAAOiB,KAAKkH,UAAU6K,GAG3B1J,KAAKtJ,OAAOiB,KAAKmgC,iBAAiBpuB,GAE7C2D,eAAaopC,IAAQ,cAAe,eACpCppC,cAAYopC,EAAKluC,iBAAiB,eAAgB,oBAAqB,iBAE3E8E,eAAa1O,IAAO,cAAe,eACnC0O,cAAY1O,EAAI4J,iBAAiB,eAAgB,oBAAqB,iBAC/B,IAAnCvI,KAAKtJ,OAAwB,iBAC7BsJ,KAAKtJ,OAAOiB,KAAK45C,YAAYsF,eAEjCh8C,GAAaZ,MAAO8I,EAAK0I,QAASnQ,OAAQ,QAAU0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,cAAe6H,EAAK5H,YAC7HwD,EAAI+K,WAAa1J,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAwB,UAAlByI,KAAKu1C,WAC1Ev1C,KAAKu1C,SAAW,MAEpB,IAAIuB,GACA9zC,KAAM,OAAQrD,OAAQK,KAAKtJ,OAAOglB,iBAAiB3Y,EAAK5H,YAAasD,KAAMsE,EAAK0I,QAChFsrC,aAAch0C,EAAKszC,cAAe13C,IAAKA,EAAKyC,OAAQ2B,EAAKtD,MAEzDO,KAAKtJ,OAAOoiB,WAAW3a,IAAI,SAAU6vB,GAAM,OAA+B,IAAxBA,EAAGC,mBAA8B12B,QACnFyI,KAAKtJ,OAAOiB,KAAKu2B,UAErBluB,KAAKtJ,OAAOuS,QAAQ4P,EAAuBi+B,IAE/CpE,EAAK71C,UAAUq2C,YAAc,YACpBlzC,KAAKtJ,OAAOiB,KAAK+2B,QAAU1uB,KAAKq1C,WAA+B,QAAlBr1C,KAAKu1C,UAAwD,SAAlCv1C,KAAKtJ,OAAOmF,aAAaC,OAC7FkE,KAAKtJ,OAAOmF,aAAaqzB,iBAM1BlvB,KAAKiyB,mBAAmB,SALxBjyB,KAAKs1C,mBAAmB,UACxBt1C,KAAKq1C,WAAY,EACjBr1C,KAAKu1C,SAAW,QAO5B7C,EAAK71C,UAAU80B,WAAa,SAAU5uB,EAAM2G,GACxC1J,KAAKtJ,OAAOiB,KAAKoE,WAAW41B,WAAWjoB,EAAU3G,EAAK5H,WAAY4H,EAAK0I,QAAQ1I,EAAK5H,aACpF6E,KAAKtJ,OAAOiB,KAAKghB,gBAAgBjP,GAAUjL,KAAOsE,EAAK0I,SAE3DinC,EAAK71C,UAAU2I,WAAa,SAAU1K,EAASK,GAC3CN,EAAWC,EAASkF,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,cAAeC,EAAY6E,KAAK5E,cAC9G4E,KAAKtJ,OAAO6G,cAGZ,IAAK,IAFDkB,EAAOuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC9CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC1DU,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAAK,CAClCoH,EAAKpH,GAAG6C,MAAQ7C,EAChB,IAAIQ,EAAMmI,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GACjDT,EAAQb,MAAMpC,KAAS4G,EAAKpH,GAAGQ,IACR,QAAnBiD,EAAQQ,SACRmD,EAAKpH,GAAG8C,MAAQ6F,KAAK+yC,mBAAmB54C,MACxCsE,EAAKpH,GAAG+C,SAAW4F,KAAK+yC,mBAAmB34C,SAC3CqE,EAAKpH,GAAG2B,SAAWgH,KAAK+yC,mBAAmB/5C,SACtCtB,oBAAkBsI,KAAK+yC,mBAAmBj6C,cAC3C2F,EAAKpH,GAAGyB,WAAakH,KAAK+yC,mBAAmBj6C,WAC7C2F,EAAKpH,GAAGiH,eAAiB0B,KAAK+yC,mBAAmBz0C,gBAErDG,EAAKpH,GAAGiC,aAAe0G,KAAK+yC,mBAAmBz5C,cAGvD4c,WAAS,sBAAwBzX,EAAKpH,GAAG2B,SAAW,SAAU3B,EAAG2I,KAAKtJ,QACtE,IAAIG,EAAUmJ,KAAKtJ,OAAOC,WAAWE,SAChCJ,EAAauJ,KAAKtJ,SAAWG,aAAmB2tB,sBACjDtO,WAAS,sBAAwBzX,EAAKpH,GAAG2B,SAAUyF,EAAKpH,GAAI2I,KAAKtJ,QAEhE+H,EAAKpH,GAAG8C,OACT6F,KAAKtJ,OAAO6G,WAAW/E,KAAKiG,EAAKpH,IAGlB,QAAnByD,EAAQQ,QAAmD,MAA/B0E,KAAK8yC,yBACjC9yC,KAAKtJ,OAAO4nB,eAAgBziB,cAAgBQ,eAAgB2D,KAAK8yC,0BAA4B,GAC7F9yC,KAAK8yC,uBAAyB,OAGtCJ,EAAK71C,UAAUm4C,YAAc,SAAUv2C,EAAMqJ,EAAM5P,GAC/C,IAAK,IAAI6B,EAAI,EAAGA,EAAIiG,KAAKtJ,OAAO49B,cAAc/8B,OAAQwC,IAAK,CACvD,IAAIi9C,EAAQ9+C,EAAQ6B,GAChBG,EAAQmE,WAAS,sBAAwB24C,EAAMh+C,SAAW,SAAUgH,KAAKtJ,QAE7E,GADAsgD,EAAM98C,MAAQA,GACTxC,oBAAkBs/C,EAAMl+C,YAAa,CACtC,IAAIysC,EAAclnC,WAAS,sBAAwB24C,EAAMl+C,WAAWE,SAAW,SAAUgH,KAAKtJ,QAC9FsgD,EAAMl+C,WAAWoB,MAAQqrC,GAGjC,IAAIl3B,GAAS,EACT4oC,EAAej3C,KAAKtJ,OAAO0I,gBAC/B,GAAIY,KAAKtJ,OAAOuI,mBAAqB,EAEjC,IAAK,IADDS,EAAQoI,EAAK,GAAGS,iBAAiB,cAC5B2uC,EAAI,EAAGA,EAAIx3C,EAAMnI,OAAQ2/C,IAC9B,GAAIx3C,EAAMw3C,GAAG9uC,UAAUC,SAAS,yBAA0B,CACtD4uC,EAAeC,EACf,MAIZ,IAAK,IAAIv6C,EAAI,EAAGA,EAAIqD,KAAKtJ,OAAOmI,UAAUtH,OAAQoF,IAAK,CAC9CmL,EAAKnL,GAAGyL,UAAUC,SAAS,gBAC5BgG,IAEJ,IAAI8oC,EAAQj/C,EAAQmW,GAEhBlU,GADAD,EAAQi9C,EAAMj9C,MACNi9C,EAAMh9C,OACdwE,EAAMmJ,EAAKnL,GACVjF,oBAAkBy/C,EAAMr+C,cACzBoB,EAAQmE,WAAS,sBAAwB84C,EAAMr+C,WAAWE,SAAW,SAAUgH,KAAKtJ,SAExF,IAAI0gD,EAAWz4C,EAAIe,MAAMu3C,GACzB,IAAKv/C,oBAAkB0/C,GAAW,CAC9B,IAASF,EAAI,EAAGA,EAAIE,EAAShvC,UAAU7Q,OAAQ2/C,IAAK,CAChD,IAAIj9C,EAAQm9C,EAAShvC,UAAU8uC,GAG3BnjC,EAAS9Z,EAAMmP,MAFN,mBAGT+R,EAAUlhB,EAAMmP,MAFN,yBAGA,MAAV2K,GACA1G,eAAa+pC,GAAWn9C,GAEb,MAAXkhB,GACA9N,eAAa+pC,GAAWn9C,GAG3B6N,EAAKnL,GAAGyL,UAAUC,SAAS,eAI5B+H,YAAUgnC,GAAW,uBAAyBl9C,EAAQ,QAAUC,GAHhEiW,YAAUgnC,GAAW,iBAAmBl9C,EAAQ,QAAUC,MAQ1Eu4C,EAAK71C,UAAU6I,SAAW,WACtB,IAAI+rB,EACAv3B,EAAQ8F,KAAK/E,YACb/C,EAAU8H,KAAKtJ,OAAOiB,KAAKwE,wBACO,UAAlC6D,KAAKtJ,OAAOmF,aAAaC,OACzB5B,EAAQ8F,KAAKgzC,gBAAgB7C,iBAC7BnwC,KAAK9E,cAAgB8E,KAAKgzC,gBAAgB5C,oBACtCpwC,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACvDyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAKgf,gBAAgBznB,UACtDW,EAAU8H,KAAKgzC,gBAAgB9C,oBAGvC,IAAIpoC,EAAO9H,KAAKtJ,OAAOiB,KAAK28B,cACxB+iB,EAAiBvvC,EAAKvQ,QAAUuQ,EAAK,GAAGqE,aAAa,iBAAmB,EACxEmrC,EAAgBxvC,EAAKvQ,QAAUuQ,EAAKA,EAAKvQ,OAAS,GAAG4U,aAAa,iBAAmB,EACrForC,EAAcv3C,KAAK9E,eAAiBm8C,GAAkBr3C,KAAK9E,eAAiBo8C,EAC5EE,EAAmBx3C,KAAKtJ,OAAO0H,sBAAwB4B,KAAK/E,aAAe,GAA+B,OAA1B+E,KAAK2yC,iBACzF,GAAsC,WAAlC3yC,KAAKtJ,OAAOmF,aAAaC,KAAmB,CAC5C,GAAgD,UAA5CkE,KAAKtJ,OAAOmF,aAAaQ,eACzBo1B,EAAW,cAEV,IAAiD,UAA5CzxB,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAClF2D,KAAK9E,eAAiB,GAAKs8C,IAAqBD,IACpD9lB,EAAW,SACN/5B,oBAAkBQ,EAAQgC,KAAWhC,EAAQgC,GAAOf,UACrD,GAAsC,UAAlC6G,KAAKtJ,OAAOmF,aAAaC,OAAqBkE,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACrGyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAKgf,gBAAgBznB,SAEtD,GADA2C,GAASd,EAAoBlB,EAAQgC,IAAQ3C,OACG,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAErDnC,GADsB8F,KAAKgzC,gBAAgB3C,2BAK/Cn2C,GAASd,EAAoBlB,EAAQgC,IAAQ3C,OAIzD,IAAKyI,KAAK9E,eAAiB,GAAKs8C,IAAqBD,IAC7Cr9C,GAAsD,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,gBACY,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAA8B,CAC1DnC,GAAS4N,EAAKvQ,OAAS,IACvB2C,EAAQ4N,EAAKvQ,OAAS,GAE1B,IACIg9C,EAAev0C,KAAKtJ,OAAOiB,KAAKgiB,cAAe,KAAE,GACjD89B,EAAkBhZ,SAASiZ,cAC/B5vC,EAAK5N,EAAQ,GAAGu3B,GAAU3pB,EAAK,IAC/BoO,WAAS,aAAchc,EAAQ,EAAG8F,KAAKgzC,iBACvC,IAAIlC,EAA6D,UAA5C9wC,KAAKtJ,OAAOmF,aAAaQ,eAA6BnC,EAAQA,EAAQ,EACrD,UAAlC8F,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAKtJ,OAAOiB,KAAKgiB,cAAe,KAAExc,OAAO,EAAG,GAC5C6C,KAAKtJ,OAAOiB,KAAKgiB,cAAe,KAAExc,OAAO2zC,EAAgB,EAAGyD,IAEhE,IAAI1e,EAAU71B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAC/C,GAAIrS,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,oBAAsBe,KAAKtJ,OAAO+a,eAAiBokB,EAAQ,CACjG,IAAI6B,EAAc13B,KAAKtJ,OAAOyY,qBAE1BwoC,EAAqB33C,KAAKtJ,OAAOiB,KAAKghB,gBAAgB,GAE1D,GADA+e,EAAYx9B,EAAQ,GAAGu3B,GAAUiG,EAAY,IACzC7B,EAAQ,CACR,IAAI+hB,EAAkB53C,KAAKtJ,OAAOqjC,yBAClC6d,EAAgB19C,EAAQ,GAAGu3B,GAAUmmB,EAAgB,IAEnB,UAAlC53C,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAKtJ,OAAOiB,KAAKgiB,cAAmB,WAAExc,OAAO,EAAG,GAChD6C,KAAKtJ,OAAOiB,KAAKgiB,cAAmB,WAAExc,OAAO2zC,EAAgB,EAAG6G,IAEpEzhC,WAAS,aAAchc,EAAQ,EAAG8F,KAAKgzC,iBAE3C,GAAsC,QAAlChzC,KAAKtJ,OAAOmF,aAAaC,MAAoD,SAAlCkE,KAAKtJ,OAAOmF,aAAaC,KAAiB,CAErF,IAAK,IADD+7C,EAAS73C,KAAKtJ,OAAOiB,KAAK+f,kBAAkBnP,iBAAiB,gBACxDlR,EAAI,EAAGA,EAAIwgD,EAAOtgD,OAAQF,IAC/BwgD,EAAOxgD,GAAG+uB,SAEdlQ,WAAS,gBAAkBlW,KAAKtJ,OAAOiB,KAAKoE,WAAW66C,SAEvDY,IACAx3C,KAAK2yC,iBAAmB,MAE5B8E,EAAgBK,WAsB5BpF,EAAK71C,UAAU4I,UAAY,SAAU1C,GACjC,GAAyB,YAArBA,EAAKlD,aAA6BG,KAAKq1C,UACvCtyC,EAAKiG,QAAS,OAGlB,GAAsC,SAAlChJ,KAAKtJ,OAAOmF,aAAaC,MAAwC,cAArBiH,EAAKlD,YAArD,CAIA,GAAIG,KAAK6zC,oBAAsB7zC,KAAK6zC,kBAAkBzrC,UAAUC,SAAS,qBACrErI,KAAK6zC,kBAAkBzrC,UAAUC,SAAS,uBAAyBrI,KAAK6zC,kBAAkBzrC,UAAUC,SAAS,YAG7G,OAFAtF,EAAKiG,QAAS,OACdhJ,KAAK6zC,kBAAoB,MAG7B,GAAyB,WAArB9wC,EAAKlD,YAEL,IAAK,IADDpB,EAAOsE,EAAKtE,KACPpH,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAAK,CAClC2I,KAAKkyC,eAAezzC,EAAKpH,GAAG2B,UAE5B,IAAK,IADD24C,EAASv4C,EAAoBqF,EAAKpH,IAC7BiK,EAAI,EAAGA,EAAIqwC,EAAOp6C,OAAQ+J,IAC/BtB,KAAKkyC,eAAeP,EAAOrwC,GAAGtI,UAElC+J,EAAKtE,KAAOA,EAAKlF,OAAOo4C,GAGhC,GAAyB,QAArB5uC,EAAKlD,aAA0BG,KAAK4yC,qBAAuB5yC,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,yBAA2B,CAKtI,KAJ6C,IAAvCzZ,KAAKtJ,OAAOiB,KAAK6wB,kBAA2BxoB,KAAK4yC,oBAChD7vC,EAAK7I,QAAU8F,KAAKtJ,OAAOiB,KAAK6wB,mBAAmC,IAAfzlB,EAAK7I,QAC5D8F,KAAK9E,cAAgB8E,KAAKtJ,OAAOiB,KAAK6wB,kBAEtCxoB,KAAKtJ,OAAO0H,qBAAsB,CAClC,IAAI25C,EAAW,yBAA2B/3C,KAAK9E,cAAgB,KAC3DyD,OAAM,EACNqB,KAAK9E,eAAiB,GAAiD,QAA5C8E,KAAKtJ,OAAOmF,aAAaQ,gBACR,WAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBACzB2D,KAAK2yC,iBAAmB3yC,KAAK9E,cAAc0M,WAC3CjJ,EAAMqB,KAAKtJ,OAAOy9B,aAAarpB,cAAcitC,GAC7C/3C,KAAK/E,YAAc0D,EAAMA,EAAI+K,SAAW,GAGpC1J,KAAK2yC,kBAA8C,OAA1B3yC,KAAK2yC,kBAC9BoF,EAAW,yBAA2B/3C,KAAK2yC,iBAAmB,KAC9Dh0C,EAAMqB,KAAKtJ,OAAOy9B,aAAarpB,cAAcitC,GAC7C/3C,KAAK/E,YAAc0D,EAAMA,EAAI+K,SAAW,GAGxC1J,KAAK/E,YAAc,OAKvB+E,KAAK4yC,qBAAuB5yC,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,yBAC5EzZ,KAAK/E,YAAc8H,EAAK7I,MAGxB8F,KAAK/E,YAAc+E,KAAKtJ,OAAOiB,KAAK6wB,kBAAoB,EAAIxoB,KAAKtJ,OAAOiB,KAAK6wB,iBAAmB,EAGpGxoB,KAAK4yC,qBAAuB5yC,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,yBAC5EzZ,KAAK5E,aAAe4E,KAAKtJ,OAAO8G,SAASuF,EAAK7I,OAG9C8F,KAAK5E,aAAe4E,KAAKtJ,OAAO+R,qBAAqB,GAGzDzI,KAAK4yC,oBAAqC,IAAf7vC,EAAK7I,QAChC8F,KAAK5E,aAAe4E,KAAKtJ,OAAO8G,SAASuF,EAAK7I,QAEF,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,gBAA8B3E,oBAAkBsI,KAAK5E,gBAC1E1D,oBAAkBsI,KAAKtJ,OAAO+R,qBAAqB,MACvDzI,KAAK5E,aAAe4E,KAAKtJ,OAAO+R,qBAAqB,IAEzDzI,KAAK4yC,oBAAqB,EAC1B7vC,EAAO/C,KAAKg4C,aAAaj1C,QApErBA,EAAKiG,QAAS,GA8EtB0pC,EAAK71C,UAAU22C,wBAA0B,WACD,OAAhCxzC,KAAK8yC,yBACL9yC,KAAK8yC,uBAAyB9yC,KAAKtJ,OAAOmF,aAAaQ,iBAG/Dq2C,EAAK71C,UAAUm7C,aAAe,SAAUj1C,GACpC,IAAI9I,EAAQ8I,EAAKtE,KACjB,GAAoB,QAAhBsE,EAAKzH,OAAkB,CACvB,IAAIzD,EAAMmI,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GACjDk2B,EAAW,KACfx3B,EAAMG,SAAW1C,oBAAkBuC,EAAMG,UAAYgC,YAAW2G,EAAKtE,MAAQxE,EAAMG,SACnF,IAAIggB,EAAcpa,KAAKtJ,OAAOiB,KAAKwE,wBAC/BjC,EAAQ8F,KAAK/E,YACjBhB,EAAMjB,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACjDsC,WAAS,sBAAwBjc,EAAMjB,SAAUiB,EAAO+F,KAAKtJ,QAC7D,IAAIyD,EAAQ,EACR+C,OAAY,EACZoB,OAAiB,EACjBxF,OAAa,EACbmE,OAAkB,EAClBu6C,EAAmBx3C,KAAKtJ,OAAO0H,sBAAwB4B,KAAK/E,aAAe,GAA+B,OAA1B+E,KAAK2yC,iBACrF7qC,EAAO9H,KAAKtJ,OAAOmI,UACnBw4C,EAAiBvvC,EAAKvQ,QAAUuQ,EAAK,GAAGqE,aAAa,iBAAmB,EACxEmrC,EAAgBxvC,EAAKvQ,QAAUuQ,EAAKA,EAAKvQ,OAAS,GAAG4U,aAAa,iBAAmB,EACrForC,EAAcv3C,KAAK9E,eAAiBm8C,GAAkBr3C,KAAK9E,eAAiBo8C,EAShF,GARIl9B,EAAY7iB,SACZ2F,EAAYkd,EAAYpa,KAAK/E,aAAa+E,KAAKtJ,OAAOwG,WACtDD,EAAkBmd,EAAYpa,KAAK/E,aAAa+E,KAAKtJ,OAAOuG,iBACxDmd,EAAYpa,KAAK/E,aAAanC,aAC9BwF,EAAiB8b,EAAYpa,KAAK/E,aAAanC,WAAWE,UAE9DF,EAAashB,EAAYpa,KAAK/E,aAAanC,YAEC,QAA5CkH,KAAKtJ,OAAOmF,aAAaQ,gBAA4B+d,EAAY7iB,OAAQ,CAEzE,GADA4C,EAAQigB,EAAYpa,KAAK/E,aAAad,MACU,UAA5C6F,KAAKtJ,OAAOmF,aAAaQ,eACzBo1B,EAAW,SACXv3B,EAAQkgB,EAAYpa,KAAK/E,aAAaf,WAErC,GAAgD,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAC1Do1B,EAAW,QACX,IAAI2f,EAAmBh4C,EAAoBghB,EAAYpa,KAAK/E,cAAc1D,OACtEq5C,EAAmBx2B,EAAYpa,KAAK/E,aAAaf,MACrDA,EAASk3C,EAAmB,EAAMR,EAAmBQ,SAEpD,GAAgD,UAA5CpxC,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAC1Do1B,EAAW,SACNzxB,KAAK9E,eAAiB,GAAKs8C,IAAqBD,IACjDt9C,EAAMnB,WAAasD,YAAWge,EAAYpa,KAAK/E,cAC/ChB,EAAMqE,eAAiBrE,EAAMnB,WAAWE,gBACjCiB,EAAMnB,WAAWQ,oBACjBW,EAAMnB,WAAWkH,KAAKtJ,OAAO0G,eAExC,IAAI66C,EAAoB7+C,EAAoBghB,EAAYpa,KAAK/E,cAAc1D,OACvE2gD,EAAoB99B,EAAYpa,KAAK/E,aAAaf,MAClD8F,KAAK9E,eAAiB,IACtBjB,EAAME,MAAQA,EAAQ,GAE1BD,EAAS+9C,EAAoB,EAAMC,EAAoBD,IACnDj4C,KAAKhF,kBACLf,EAAMG,SAAS4F,KAAKtJ,OAAOuG,iBAAmBhD,EAAM+F,KAAKtJ,OAAOuG,iBAAmBC,EAC9ExF,oBAAkBuC,EAAMnB,aACzBuE,EAAgBxF,EAAKoC,EAAMnB,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBf,IAsB7F,GAlBgD,UAA5C+F,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAC3E2D,KAAK9E,eAAiB,GAAKs8C,IAAqBr9C,GAASo9C,IAC1Dt9C,EAAMqE,eAAiBA,EACvBrE,EAAMnB,WAAasD,YAAWtD,UACvBmB,EAAMnB,WAAWQ,oBACjBW,EAAMnB,WAAWkH,KAAKtJ,OAAO0G,eAExCnD,EAAME,MAAQA,EACV6F,KAAKhF,kBACLf,EAAMG,SAAS4F,KAAKtJ,OAAOuG,iBAAmBhD,EAAM+F,KAAKtJ,OAAOuG,iBAAmBA,EAC9EvF,oBAAkBuC,EAAMnB,aACzBuE,EAAgBxF,EAAKoC,EAAMnB,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBf,KAI7E,MAAZw3B,IAAqBzxB,KAAK9E,eAAiB,GAAKs8C,IAAqBD,IACrEx0C,EAAK7I,MAAqB,WAAbu3B,EAAwBv3B,EAAQA,EAAQ,GAET,WAA5C8F,KAAKtJ,OAAOmF,aAAaQ,eAA6B,CACtD,IAAI1F,EAAcqJ,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cACrDoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WACnEoM,EAAK7I,MAAQvD,EAAWY,QAG5BG,oBAAkBuC,EAAME,SACxBF,EAAME,MAAQA,GAElBF,EAAMZ,iBAAkB,EACxBY,EAAMX,gBACNW,EAAMC,MAAQ,EAOlB,GALoB,QAAhB6I,EAAKzH,SACL0E,KAAK+yC,oBAAuB54C,MAAOF,EAAME,MAAOrB,WAAYmB,EAAMnB,WAAYE,SAAUiB,EAAMjB,SAC1FoB,SAAUH,EAAMG,SAAUkE,eAAgB5G,oBAAkBuC,EAAMnB,iBAAc8kB,EAAY3jB,EAAMnB,WAAWE,SAC7GM,aAAcW,EAAMX,eAEH,WAArByJ,EAAKlD,YAEL,IAAK,IADDs4C,EAAgBp1C,EAAKtE,KAChBpH,EAAI,EAAGA,EAAI8gD,EAAc5gD,OAAQF,IACtC,GAAI8gD,EAAc9gD,GAAGyB,WAAY,CACzBA,EAAaC,EAAciH,KAAKtJ,OAAQyhD,EAAc9gD,GAAGyB,WAAWE,UACxE,IAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,IAAI+rC,EAAatsC,EAAWQ,aAAakF,QAAQ25C,EAAc9gD,IAC/DyB,EAAWQ,aAAa6D,OAAOioC,EAAY,IAK3D,OAAOriC,GAOX2vC,EAAK71C,UAAU20B,UAAY,SAAU/yB,EAAMvE,EAAOu3B,GAI9C,GAHIzxB,KAAKtJ,OAAOmF,aAAaQ,iBAAmB2D,KAAK8yC,wBAA0D,OAAhC9yC,KAAK8yC,yBAChF9yC,KAAK8yC,uBAAyB9yC,KAAKtJ,OAAOmF,aAAaQ,gBAEtD2D,KAAKhF,iBAAoBtD,oBAAkB+G,KAASpG,OAAOyE,eAAeC,KAAK0B,EAAMuB,KAAKtJ,OAAO0G,cAiB9FqB,GACIvE,GAAS,GACT8F,KAAK9E,cAAgBhB,EACrB8F,KAAK/E,YAAcf,IAGnB8F,KAAK9E,cAAgB8E,KAAKtJ,OAAO8xB,iBACjCxoB,KAAK/E,YAAc+E,KAAKtJ,OAAO8xB,kBAE/BiJ,GACAzxB,KAAKtJ,OAAO4nB,eAAgBziB,cAAgBQ,eAAgBo1B,KAAc,GAE9EzxB,KAAKtJ,OAAOiB,KAAKoE,WAAWy1B,UAAU/yB,EAAMvE,IAG5C8F,KAAKtJ,OAAOiB,KAAKoE,WAAWy1B,UAAU/yB,EAAMvE,OAhCiE,CACjH,IAAIo4C,KACA8F,EAAmBp4C,KAAKtJ,OAAOmF,aAAaC,KAC5Cu8C,EAAuBr4C,KAAKtJ,OAAOiB,KAAKkE,aAAaC,KACzDw2C,EAAW95C,KAAKiG,GAChBuB,KAAKtJ,OAAO4nB,eAAgBziB,cAAgBC,KAAM,WAAa,GAC/DkE,KAAKtJ,OAAOiB,KAAK2mB,eAAgBziB,cAAgBC,KAAM,WAAa,GAC/DpE,oBAAkB+5B,IACnBzxB,KAAKtJ,OAAO4nB,eAAgBziB,cAAgBQ,eAAgBo1B,KAAc,GAE9E,IAAI2gB,GAAmBn+B,aAAcq+B,EAAYvzB,kBAAoBC,mBACrEhf,KAAKtJ,OAAOmc,OAAO6J,IAAoB01B,eAAgBA,EAAgBl4C,MAAOA,IAC9E8F,KAAKtJ,OAAO4nB,eAAgBziB,cAAgBC,KAAMs8C,KAAsB,GACxEp4C,KAAKtJ,OAAOiB,KAAK2mB,eAAgBziB,cAAgBC,KAAMu8C,KAA0B,GACjFr4C,KAAKtJ,OAAOw3B,YA2BpBwkB,EAAK71C,UAAUy7C,iBAAmB,WAC9B,OAAOt4C,KAAKtJ,OAAOiB,KAAKoE,WAAWu8C,oBAMvC5F,EAAK71C,UAAU07C,YAAc,WACzBv4C,KAAKtJ,OAAOiB,KAAKoE,WAAWw8C,eAEhC7F,EAAK71C,UAAUs2C,aAAe,SAAUz1C,GAC/BhG,oBAAkBgG,EAAEqF,KAAKlD,cACY,WAAlCnC,EAAEqF,KAAKlD,YAAY+H,YAA6D,SAAlClK,EAAEqF,KAAKlD,YAAY+H,aAC3B,UAAlC5H,KAAKtJ,OAAOmF,aAAaC,MAAsD,cAAlC4B,EAAEqF,KAAKlD,YAAY+H,cACxE5H,KAAKg1C,YAAYh1C,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOmI,UAAWmB,KAAKtJ,OAAOyF,0BAC7E6D,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,oBAAsBe,KAAKtJ,OAAO+a,gBACpEzR,KAAKtJ,OAAOiB,KAAKhB,WAAWY,SAAWyI,KAAKtJ,OAAOyY,qBAAqB5X,QACxEyI,KAAKg1C,YAAYh1C,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOyY,qBAAsBnP,KAAKtJ,OAAOyF,2BAU5Gu2C,EAAK71C,UAAUm1B,SAAW,SAAUtoB,EAAUkJ,GACJ,SAAlC5S,KAAKtJ,OAAOmF,aAAaC,MAAqD,UAAlCkE,KAAKtJ,OAAOmF,aAAaC,OAC/B,UAAlCkE,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAKq1C,WAAY,EACjBr1C,KAAKs1C,mBAAmB,UAE5Bt1C,KAAKtJ,OAAOiB,KAAKoE,WAAWi2B,SAAStoB,EAAUkJ,KAGhD8/B,KCl9BP8F,GAA+B,WAC/B,SAASA,EAAc9hD,GACnB+L,OAAKC,OAAO+1C,iBACZz4C,KAAKtJ,OAASA,EAoBlB,OAZA8hD,EAAc37C,UAAU+F,cAAgB,WACpC,MAAO,iBAQX41C,EAAc37C,UAAU+M,QAAU,aAG3B4uC,KCpBPE,GAA2B,WAC3B,SAASA,EAAUhiD,GACf+L,OAAKC,OAAOi2C,aACZ34C,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAyGT,OA9FAwuC,EAAU77C,UAAU+F,cAAgB,WAChC,MAAO,aAEX81C,EAAU77C,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAK44C,aAAc54C,MAClDA,KAAKtJ,OAAOyT,GAAG,kBAAmBnK,KAAK64C,gBAAiB74C,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,yBAA0BnK,KAAK84C,oBAAqB94C,MACxEA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAK+4C,eAAgB/4C,MACtDA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKg5C,kBAAmBh5C,MAC5DA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKi5C,eAAgBj5C,OAM1D04C,EAAU77C,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAK44C,cACrC54C,KAAKtJ,OAAOgU,IAAI,kBAAmB1K,KAAK64C,iBACxC74C,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAK+4C,gBACvC/4C,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKg5C,mBAC1Ch5C,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKi5C,gBACvCj5C,KAAKtJ,OAAOiB,KAAK+S,IAAI,yBAA0B1K,KAAK84C,uBAExDJ,EAAU77C,UAAUi8C,oBAAsB,SAAU/1C,GAEhDA,EAAY,SAAI,GAEpB21C,EAAU77C,UAAU+7C,aAAe,WAI/B,IAAK,IAHDM,EAAYl5C,KAAKtJ,OAAOmI,UAAUpB,OAAO,SAAUC,GACnD,OAAQA,EAAE0K,UAAUC,SAAS,iBAExBhR,EAAI,EAAGA,EAAI6hD,EAAU3hD,OAAQF,IAAK,CACvC,IAAI8hD,EAAWD,EAAU7hD,GAAGwgB,uBAAuB,uBAC/CuhC,EAAap5C,KAAKtJ,OAAOiB,KAAKmgB,oBAAoBohC,EAAU7hD,GAAG8U,aAAa,aAC5ErT,EAAaP,YAAU,aAAcyH,KAAKtJ,OAAOiB,KAAKwE,wBAAwB9E,KAC9EK,oBAAkBoB,KAAgBpB,oBAAkBoB,IACpDL,EAAgBuH,KAAKtJ,OAAQ0iD,EAAW36C,KAAMuB,KAAKtJ,OAAOiB,KAAKwE,2BAC/D6D,KAAKtJ,OAAOiB,KAAKugB,gBAAgBhG,OAAOinC,EAAS,MAI7DT,EAAU77C,UAAUk8C,eAAiB,SAAUh2C,GAC3C,IAAIs2C,EAAmBt2C,EAAKpE,IAAIkZ,uBAAuB,uBAClDngB,oBAAkB2hD,EAAiB,KACpCr5C,KAAKtJ,OAAOiB,KAAKugB,gBAAgBhG,OAAOmnC,EAAiB,KAGjEX,EAAU77C,UAAUm8C,kBAAoB,SAAUj2C,GAC9C,IAAItM,EAAauJ,KAAKtJ,QAGtB,IAAK,IAAIW,EAAI,EAAGA,EAAI0L,EAAKg0B,WAAWx/B,OAAQF,IACxC0L,EAAKg0B,WAAW1/B,GAAGmD,MAAMG,QAAUoI,EAAKzH,QAGhDo9C,EAAU77C,UAAUg8C,gBAAkB,SAAU91C,GAC5C,IAAItE,EAAOsE,EAAKtE,KACZE,EAAMoE,EAAKu2C,cAAcp2B,cAAcq2B,gBAEvCC,EAAc,kBADL9hD,oBAAkB+G,EAAK3F,YAAsC2F,EAAKvE,MAA7BuE,EAAK3F,WAAWoB,OACrB,QAAUuE,EAAKtE,MACxDs/C,EAAY96C,EAAImM,cAAc,IAAM0uC,GAAapxC,UACjDsxC,KAAcpxC,MAAMvL,KAAK08C,GAAWh8C,OAAO,SAAUk8C,GAAa,OAAQA,IAAcH,IACxFI,EAAQF,EAAS,GAAGniD,OAEpBsiD,EAAc,eADDH,EAAS9xC,WAAWU,MAAM,EAAGsxC,GAE9CxpC,YAAUrN,EAAKu2C,cAAcp2B,eAAgB22B,IAEjDnB,EAAU77C,UAAUo8C,eAAiB,SAAUl2C,GAC3C,GAAyB,cAArBA,EAAKlD,aAAoD,QAArBkD,EAAKlD,YAAuB,CAChE,IAAIi6C,EAAS/2C,EAAKpE,IAAI4J,iBAAiB,eAAe,GAAG4D,aAAa,WAElE4tC,GADQhnC,SAAS+mC,EAAO,IAAM,GACXlyC,WACvB7E,EAAKpE,IAAI4J,iBAAiB,eAAe,GAAGyE,aAAa,UAAW+sC,GAGxE,IAAK,IADDC,EAAeh6C,KAAKtJ,OAAOiB,KAAKgiB,cAAc9a,UACzCxH,EAAI,EAAGA,EAAI2iD,EAAaziD,OAAQF,IACrC2iD,EAAa3iD,GAAGqI,MAAM,GAAGk1B,SAAU,EAErBr8B,YAAU,cAAeyH,KAAKtJ,OAAOiB,MAErC,eAAE,EAApB45C,EAA4BzpC,KAAM9H,KAAKtJ,OAAOiB,KAAKgiB,cAAc9a,aAQrE65C,EAAU77C,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAEFkuC,KCtHPj4C,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAqBxCk5C,GAA4C,SAAUn4C,GAEtD,SAASm4C,EAA2BvjD,EAAQwjD,GACxC,IAAI9yC,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,EAAQwjD,IAAYl6C,KAalD,OAZAoH,EAAM+yC,kBAAmB,EACzB/yC,EAAMgzC,WAAa,EACnBhzC,EAAMizC,SAAW,EACjBjzC,EAAMkzC,aAAc,EAEpBlzC,EAAMsvB,YAAc,EACpBtvB,EAAMorC,UAAY,EAClBprC,EAAMmzC,aAAe,EACrBnzC,EAAMozC,gBAAiB,EAEvBpzC,EAAMipB,qBAAsB,EAC5BjpB,EAAM8C,mBACC9C,EAsbX,OArcA3G,GAAUw5C,EAA4Bn4C,GAiBtCm4C,EAA2Bp9C,UAAU49C,kBAAoB,WACrD,OAAO,IAAI7U,GAA6B5lC,KAAKtJ,SAEjDujD,EAA2Bp9C,UAAU+B,cAAgB,SAAU1E,GAC3D,OAAO8F,KAAKtJ,OAAO49B,cAAc72B,OAAO,SAAUC,GAAK,OAAOqV,SAASrV,EAAEyO,aAAa,iBAAkB,MAAQjS,IAAU,IAE9H+/C,EAA2Bp9C,UAAUqN,iBAAmB,WACpDlK,KAAKtJ,OAAOyT,GAAGuwC,GAA0B16C,KAAK26C,mBAAoB36C,MAClEA,KAAKtJ,OAAOyT,GAAGywC,GAAsB56C,KAAK0G,cAAe1G,OAE7Di6C,EAA2Bp9C,UAAU89C,mBAAqB,SAAU53C,GAC5DA,EAAK83C,QACL76C,KAAKo6C,WAAa,EAClBp6C,KAAK02B,WAAa,EAClB12B,KAAKwyC,SAAWxyC,KAAKtJ,OAAOoa,aAAa86B,SAAW,GAE/C7oC,EAAKo3C,mBACVn6C,KAAKm6C,kBAAmB,IAGhCF,EAA2Bp9C,UAAU6J,cAAgB,SAAU3D,GAC3D,IAAI0+B,EAAUzhC,KAAKtJ,OAAOy9B,aAAarpB,cAAc,cACrD,GAAI9K,KAAKs6C,aAAet6C,KAAK02B,YAAc,GAAK12B,KAAKwyC,UAAY,EAAG,CAChE,GAAIxyC,KAAKwyC,SAAWzvC,EAAKsL,MAAQrO,KAAKtJ,OAAOoa,aAAa86B,SAAU,CAChE,IAAIkP,KAAqBrZ,EAAQtL,UAAYn2B,KAAKtJ,OAAO0/B,gBACrD2kB,EAAYD,EAAkB96C,KAAKtJ,OAAOmI,UAAUtH,OACpDwjD,EAAYh4C,EAAKsL,QACjB0sC,EAAYD,GACP/3C,EAAKsL,MAAQysC,IAEtB96C,KAAK02B,WAAaqkB,EAAY/6C,KAAKtJ,OAAOmI,UAAUtH,OACpDyI,KAAKwyC,SAAWuI,OAGhB/6C,KAAK02B,YAAc,EACnB12B,KAAKwyC,UAAY,EAErBxyC,KAAKs6C,aAAc,EAEnBt6C,KAAKqwB,sBACLrwB,KAAK02B,WAAa,EAClB12B,KAAKwyC,SAAWxyC,KAAKtJ,OAAOoa,aAAa86B,SAAW,GAExD7oC,EAAK2zB,WAAa12B,KAAK02B,WACvB3zB,EAAKyvC,SAAWxyC,KAAKwyC,UAEzByH,EAA2Bp9C,UAAUyzB,cAAgB,SAAUh1B,GAC3D,IAAI8L,EAAQpH,KACNA,KAAKtJ,OAAOC,sBAAsBC,oBAAyDgnB,IAA1C5d,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAClFvmC,KAAKtJ,OAAOC,WAAWA,WAAW4tB,SAAqD,KAA1CvkB,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAAgBpvC,EAAgB6I,KAAKtJ,QAuBvHoL,EAAOjF,UAAUyzB,cAAcvzB,KAAKiD,KAAM,OAtB1CA,KAAKtJ,OAAO4E,GAAQ,aAAc0E,KAAKg7C,YAAah7C,MACpDA,KAAKtJ,OAAO4E,GAAQ,wBAAyB0E,KAAKi7C,mBAAoBj7C,MACtEA,KAAKuY,GAAK,WACNnR,EAAM8zC,UAAUC,SAAS,SAAUC,GAAc,OAAOh0C,EAAMi0C,gBAAgBD,IAAgBh0C,EAAMk0C,mBACpGl0C,EAAM1Q,OAAOgU,IAAI,gBAAiBtD,EAAMmR,KAE5CvY,KAAKtJ,OAAOwT,iBAAiB,YAAalK,KAAKu7C,eAAe1/B,KAAK7b,OACnEA,KAAKtJ,OAAOwT,iBAAiB,cAAelK,KAAKw7C,iBAAiB3/B,KAAK7b,OACvEA,KAAKtJ,OAAO4E,GAAQ,qBAAsB0E,KAAKy7C,mBAAoBz7C,MACnEA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAKuY,GAAIvY,MACzCA,KAAKtJ,OAAOwT,iBAAiB2O,EAAuB7Y,KAAK07C,iBAAiB7/B,KAAK7b,OAC/EA,KAAKtJ,OAAO4E,GAAQ,mCAAoC0E,KAAKyF,UAAWzF,MACxEA,KAAKtJ,OAAO4E,GAAQ,kCAAmC0E,KAAK0F,SAAU1F,MACtEA,KAAKtJ,OAAO4E,GAAQ,8BAA+B0E,KAAK27C,mBAAoB37C,MAC5EA,KAAKtJ,OAAO4E,GAAQ,aAAc0E,KAAK47C,iBAAkB57C,MACzDA,KAAKtJ,OAAO4E,GAAQ,mBAAoB0E,KAAKimC,QAASjmC,MACtDA,KAAKtJ,OAAO4E,GAAQ,6BAA8B0E,KAAK67C,WAAY77C,MACnEA,KAAKtJ,OAAO4E,GAAQ,6BAA8B0E,KAAK87C,yBAA0B97C,MACjFA,KAAKtJ,OAAO4E,GAAQ,iCAAkC0E,KAAK+7C,YAAa/7C,MACxEA,KAAKtJ,OAAO4E,GAAQ,qBAAsB0E,KAAKg8C,UAAWh8C,QAMlEi6C,EAA2Bp9C,UAAUm/C,UAAY,SAAUt+C,GAEvDoE,EAAOjF,UAA0B,iBAAEE,KAAKiD,KAAMtC,IAElDu8C,EAA2Bp9C,UAAUm+C,YAAc,SAAUt9C,GACzDoE,EAAOjF,UAAUm+C,YAAYj+C,KAAKiD,KAAMtC,GAClCsC,KAAKtJ,OAAOC,sBAAsBC,oBAAyDgnB,IAA1C5d,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAClFvmC,KAAKtJ,OAAOC,WAAWA,WAAW4tB,SAAqD,KAA1CvkB,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAAgBpvC,EAAgB6I,KAAKtJ,UAClHgB,oBAAkBgG,EAAE2Q,SACrBrO,KAAKuyC,aAAe70C,EAAE2Q,MACjBrO,KAAKtJ,OAAOgb,4BACbrT,WAAS,aAAc2B,MAAMi8C,iBAAiBj8C,KAAKtJ,OAAO0/B,eAAiB14B,EAAE2Q,MAAO,WAGtF3W,oBAAkBgG,EAAEmC,cAA6C,gBAA7BnC,EAAEmC,YAAY+H,YAAiC5H,KAAKqwB,uBAC1FrwB,KAAKk8C,SAAS/lB,UAAY,EAC1Bn2B,KAAKqwB,qBAAsB,KAIvC4pB,EAA2Bp9C,UAAU0zB,YAAc,WAC/CzuB,EAAOjF,UAAU0zB,YAAYxzB,KAAKiD,MAC5BA,KAAKtJ,OAAOC,sBAAsBC,oBAAyDgnB,IAA1C5d,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAClFvmC,KAAKtJ,OAAOC,WAAWA,WAAW4tB,SAAqD,KAA1CvkB,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAAgBpvC,EAAgB6I,KAAKtJ,UACvH2H,WAAS,WAAY2B,MAAMD,QAAQo8C,eAAgB,EACnDn8C,KAAKk7C,UAAY,IAAIkB,GAAyB/9C,WAAS,WAAY2B,MAAM2T,QAAStV,WAAS,WAAY2B,MAAMD,SAC7GC,KAAKk8C,SAAWl8C,KAAKq8C,WAAWvvC,aAGxCmtC,EAA2Bp9C,UAAUy/C,cAAgB,SAAUC,EAAMC,EAASrW,EAAMsW,GAChF,OAAKz8C,KAAKtJ,OAAOC,sBAAsBC,oBAAyDgnB,IAA1C5d,KAAKtJ,OAAOC,WAAWA,WAAW4vC,MAChFvmC,KAAKtJ,OAAOC,WAAWA,WAAW4tB,SAAqD,KAA1CvkB,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAAepvC,EAAgB6I,KAAKtJ,QACnHsJ,KAAKw6C,gBACLx6C,KAAKw6C,gBAAiB,EACfx6C,KAAKu6C,eAGZv6C,KAAKu6C,aAAez4C,EAAOjF,UAAUy/C,cAAcv/C,KAAKiD,KAAMu8C,EAAMC,EAASrW,EAAMsW,GAC5E36C,EAAOjF,UAAUy/C,cAAcv/C,KAAKiD,KAAMu8C,EAAMC,EAASrW,EAAMsW,IAInE36C,EAAOjF,UAAUy/C,cAAcv/C,KAAKiD,KAAMu8C,EAAMC,EAASrW,EAAMsW,IAG9ExC,EAA2Bp9C,UAAU0+C,eAAiB,WAClD,IACImB,EAAgB,gBACpB,GAAI18C,KAAKtJ,OAAOmI,UAAUtH,SAAWyI,KAAK08C,KAAmBhlD,oBAAkBsI,KAAKtJ,OAAOkI,cAAc,IAAK,CAC1G,IAAI2/B,EAASv+B,KAAKtJ,OAAOkI,cAAc,GAAGqjC,wBAAwBlD,IAC9D4d,EAAU38C,KAAKtJ,OAAOid,QAAQsuB,wBAAwBlD,IAEtD/+B,KAAK08C,GADLne,EAAS,EACav+B,KAAKtJ,OAAOkI,cAAc,GAAGqjC,wBAAwBlD,IAAM4d,EAG3D38C,KAAKyhC,QAAQQ,wBAAwBlD,IACvD/+B,KAAKtJ,OAAOkI,cAAc,GAAGqjC,wBAAwBjb,OAGjEllB,EAAOjF,UAAsB,UAAEE,KAAKiD,OAExCi6C,EAA2Bp9C,UAAU2+C,iBAAmB,SAAUz4C,GAE9DjB,EAAOjF,UAAqB,YAAEE,KAAKiD,KAAM+C,IAE7Ck3C,EAA2Bp9C,UAAU4+C,mBAAqB,SAAU14C,GAChE,IAAI/C,KAAKtJ,OAAOg4B,OAAhB,CAGA,IACIkuB,EAAgB,gBAChBllD,oBAAkBsI,KAAK68C,SAASD,MAChC58C,KAAK68C,SAASD,GAAiB58C,KAAKk7C,UAAU0B,IAElD96C,EAAOjF,UAA0B,iBAAEE,KAAKiD,KAAM+C,KAElDk3C,EAA2Bp9C,UAAUk/C,YAAc,SAAUzS,GACzDA,EAAO5pC,MAAQM,KAAK88C,iBAExB7C,EAA2Bp9C,UAAUigD,cAAgB,WAEjD,IAAK,IADDp9C,KACKrI,EAAI,EAAGA,EAAI2I,KAAKtJ,OAAOY,QAAQC,OAAQF,IAC5CqI,EAAMlH,KAAKwH,KAAK+8C,aAAa/8C,KAAKtJ,OAAOY,QAAQD,KAErD,OAAOqI,GAEXu6C,EAA2Bp9C,UAAUkgD,aAAe,SAAUhxC,EAAKixC,EAAOC,EAAUC,EAASC,EAAQC,GACjG,IAAIh5C,GACAwwB,QAAW7oB,EAAI6oB,QACfyoB,YAAe3lD,oBAAkBqU,EAAI6G,OAAS7G,EAAIsH,UAClDiqC,YAAe5lD,oBAAkBqU,EAAIsH,UACrCkqC,MAASP,EACTr9C,OAAUoM,EACVkxC,SAAavlD,oBAAkBulD,GAAuBl/B,WAASy/B,KAApBP,EAC3CC,QAAWA,EACXj3B,SAAYla,EAAIka,SAChBw3B,aAAgB1xC,EAAI2xC,iBAAmB3xC,EAAI2xC,kBAC3CN,eAAkBrxC,EAAI2xC,iBAAmB3xC,EAAI2xC,mBAAqBr/C,WAAS0N,EAAI6G,MAAOwqC,IAK1F,OAHIh5C,EAAIi5C,YAAkC,aAApBj5C,EAAIzE,OAAOqD,MAAuBoB,EAAI6hB,YACxD7hB,EAAIlK,MAAQijD,GAET,IAAIQ,OAAKv5C,IAEpB61C,EAA2Bp9C,UAAU4I,UAAY,SAAU/H,GACvD,IAAIq6C,EAAW,yBAA2Br6C,EAAExD,MAAQ,KAChDA,EAAQ8F,KAAKtJ,OAAOy9B,aAAarpB,cAAcitC,GAAUruC,SACzD+B,EAAUzL,KAAKtJ,OAAOyF,wBAAwBjC,GAClDwD,EAAEe,KAAOgN,GAEbwuC,EAA2Bp9C,UAAU6I,SAAW,SAAU3C,GACtD,IAEI+wC,GAAYz3C,eAAgB2D,KAAK49C,YAAa3iD,YAAa+E,KAAK/E,YAAa84C,aAAc/zC,KAAK+zC,cACpG/zC,KAAKtJ,OAAOmc,OAAO,mBAAoBihC,GACvC9zC,KAAK49C,YAAc9J,EAAQz3C,eAC3B2D,KAAK/E,YAAc64C,EAAQ74C,YAC3B+E,KAAK+zC,aAAeD,EAAQC,aAC5B,IAAIjsC,EAAO9H,KAAKtJ,OAAOmI,UACnBw4C,EAAiBvvC,EAAKvQ,QAAUuQ,EAAK,GAAGqE,aAAa,iBAAmB,EACxEmrC,EAAgBxvC,EAAKvQ,QAAUuQ,EAAKA,EAAKvQ,OAAS,GAAG4U,aAAa,iBAAmB,EACrF0xC,EAAc79C,KAAKtJ,OAAO8xB,kBAAoB6uB,GAAkBr3C,KAAKtJ,OAAO8xB,kBAAoB8uB,EACzE,QAArBt3C,KAAK49C,aAA8C,WAArB59C,KAAK49C,cACrC59C,KAAU,OAAI,GAEO,QAArBA,KAAK49C,aAA8C,WAArB59C,KAAK49C,cAChC59C,KAAK/E,cAAqC,IAAtB+E,KAAK/E,cAA0D,IAAlC+E,KAAKtJ,OAAO8xB,kBAA4Bq1B,IAC5F/7C,EAAOjF,UAAmB,eAAEE,KAAKiD,KAAM+C,IAG/Ck3C,EAA2Bp9C,UAAUihD,iBAAmB,WAEpDh8C,EAAOjF,UAAqB,YAAEE,KAAKiD,OAEvCi6C,EAA2Bp9C,UAAU++C,iBAAmB,WAGpD57C,KAAKtJ,OAAOmc,OAAO,uBACO,QAArB7S,KAAK49C,aAA8C,WAArB59C,KAAK49C,cAA6B59C,KAAU,OAC3E8B,EAAOjF,UAAqB,YAAEE,KAAKiD,OAG3Ci6C,EAA2Bp9C,UAAU8+C,mBAAqB,WACtD,IACIla,EAAUzhC,KAAKtJ,OAAOy9B,aAAarpB,cAAc,cACjD9K,KAAU,OAAKyhC,EAAQ32B,cAAc,iBACrC9K,KAAKs6C,aAAc,IAG3BL,EAA2Bp9C,UAAUg/C,WAAa,SAAU94C,GAExDjB,EAAOjF,UAAoB,WAAEE,KAAKiD,KAAM+C,IAE5Ck3C,EAA2Bp9C,UAAUi/C,yBAA2B,SAAU/4C,GAEtEjB,EAAOjF,UAAgC,uBAAEE,KAAKiD,KAAM+C,IAExDk3C,EAA2Bp9C,UAAUkhD,cAAgB,WACjD,IACItc,EAAUzhC,KAAKtJ,OAAOy9B,aAAarpB,cAAc,cACjD9K,KAAU,QAAMyhC,EAAQ32B,cAAc,iBACtC9K,KAAKtJ,OAAOg4B,QAAS,EACrB1uB,KAAKtJ,OAAO86B,cAGpByoB,EAA2Bp9C,UAAUopC,QAAU,SAAUxnC,GAErDqD,EAAOjF,UAAwB,eAAEE,KAAKiD,KAAMvB,IAEhDw7C,EAA2Bp9C,UAAU6+C,iBAAmB,SAAU34C,GAC9D,GAAyB,QAArBA,EAAKlD,YAAuB,CAC5B,IAAIi0C,GAAYz3C,eAAgB2D,KAAK49C,YAAa3iD,YAAa+E,KAAK/E,YAAa84C,aAAc/zC,KAAK+zC,cACpG/zC,KAAKtJ,OAAOmc,OAAO,mBAAoBihC,GACvC9zC,KAAK49C,YAAc9J,EAAQz3C,eAC3B2D,KAAK/E,YAAc64C,EAAQ74C,YAC3B+E,KAAK+zC,aAAeD,EAAQC,aAGhCjyC,EAAOjF,UAAwB,eAAEE,KAAKiD,KAAM+C,IAEhDk3C,EAA2Bp9C,UAAUy+C,gBAAkB,WACnD,IAAIl0C,EAAQpH,KACZ,OAAO,SAAU2T,EAASwL,EAASrD,EAAWpe,EAAGsgD,EAAS56C,GAEtD,IAAKgE,EAAM1Q,OAA0B,oBAAG,CAEhCwS,UAAQ+0C,OAASD,GAAW56C,IAAUgE,EAAkB,cACxDA,EAAM1Q,OAAO8hB,cAEjB,IAAI0lC,EAAyB,MAAjB/+B,EAAQg/B,KAChB5rB,EAAInrB,EAAMg3C,gBAAgBF,EAAQ92C,EAAMi3C,WAAWC,mBAAmB,GAAK,EAAIl3C,EAAMyS,SAAS0kC,cAAc,GAC1G,GACN,GAAIL,EAAO,CACP,IAAIvgB,EAAMtlC,OAAOC,KAAK8O,EAAMi3C,WAAWG,UAAUjnD,OAAS6P,EAAMyS,SAAS0kC,cAAchnD,OACnFknD,EAAUr3C,EAAMi3C,WAAWG,SAAS7gB,EAAM,GAC9CpL,EAAIA,EAAIksB,EAAUA,EAAUlsB,EAEhCnrB,EAAMs3C,WAAWC,YAAYpsB,EAAGnrB,EAAMgzC,YAClChzC,EAAM1Q,OAAOgb,4BACbtK,EAAMw3C,OAAOF,WAAWC,YAAYpsB,EAAG,MAKvD0nB,EAA2Bp9C,UAAUw+C,gBAAkB,SAAUD,GAC7D,IAAIjV,EAAOiV,EAAWyD,SAClBC,EAAY9+C,KAAKtJ,OAAOoa,aAAa86B,SAAWx0B,KAAKC,KAAKrX,KAAKtJ,OAAOoa,aAAa86B,SAAW,GAC9FnK,EAAUzhC,KAAKtJ,OAAOy9B,aAAarpB,cAAc,cACjDorB,EAAe4oB,EAAY9+C,KAAKtJ,OAAO0/B,eACvC2oB,EAAY3D,EAAW4D,OAAOjgB,IAAM/+B,KAAKo6C,WAAc,EACvD6E,EAAa7nC,KAAKC,KAAK+jC,EAAW4D,OAAOjgB,IAAM/+B,KAAKo6C,aAAelkB,EACnE1N,EAAmB,mBACvB,GAAIu2B,GAAsC,UAAzB3D,EAAWt/B,WAAkD,SAAzBs/B,EAAWt/B,UAAuB,CACnF,IAAIojC,IAAYl/C,KAAKtJ,OAAOswB,OAAOpf,WAAWpJ,QAAQ,KAAO,EAAIwB,KAAKtJ,OAAOswB,OACzEhnB,KAAKtJ,OAAOid,QAAQsuB,wBAAwBjb,QAC5C9sB,KAAYunC,EAAQtL,UAAYn2B,KAAKtJ,OAAO0/B,gBAC1Chf,KAAKC,KAAK6nC,EAAUl/C,KAAKtJ,OAAO0/B,gBAChCp2B,KAAKtJ,OAAOoa,aAAa86B,SAO/B,GANA1xC,EAASA,EAAQ,EAAKA,EAAQ,EACzBxC,oBAAkBsI,KAAKwoB,MAAkD,IAA5BxoB,KAAKwoB,IAA4BtuB,IAAU8F,KAAKwoB,KAC9FtuB,EAAQ8F,KAAKwoB,IAEjBxoB,KAAK02B,WAAax8B,EAClB8F,KAAKwyC,SAAWt4C,EAAQ8F,KAAKtJ,OAAOoa,aAAa86B,SAC7C5rC,KAAKwyC,SAAWxyC,KAAKuyC,aAAc,CACnC,IAAI4M,EAAUn/C,KAAKuyC,aAAe,EAC9B6M,EAAUp/C,KAAKwyC,SAAW2M,EAC9Bn/C,KAAKwyC,SAAW2M,EAChBn/C,KAAK02B,WAAc12B,KAAK02B,WAAa0oB,EAAW,EAAI,EAAKp/C,KAAK02B,WAAa0oB,EAG/E,IAAIC,EAAQjoC,KAAKC,KAAK+jC,EAAW4D,OAAOjgB,IAAM/+B,KAAKtJ,OAAO0/B,gBAC1DipB,GAAgBr/C,KAAKtJ,OAAOoa,aAAa86B,SACzC,IAAI0T,EAAa,EACjB,IAAK5nD,oBAAkBsI,KAAKtJ,OAAOmI,UAAUwgD,MACxC3nD,oBAAkBsI,KAAKtJ,OAAOy9B,aAAa5rB,iBAAiB,iBAAiB82C,IAAS,CAGvFC,GAFWt/C,KAAKtJ,OAAOy9B,aAAa5rB,iBAAiB,iBAAiB82C,GACjEv0C,cAAc,MAAMqB,aAAa,SAG1C,GAAmB,IAAfmzC,EACAt/C,KAAKo6C,WAAagB,EAAW4D,OAAOjgB,QAEnC,CACD,IAAI/X,EAAShnB,KAAKtJ,OAAO0/B,eACzBp2B,KAAKo6C,WAAcgB,EAAW4D,OAAOjgB,IAAO+f,EAAY93B,EAAU,EAC9Do0B,EAAW4D,OAAOjgB,IAAO+f,EAAY93B,EAAU,GAAK,QAG3D,GAAIi4B,GAAwC,UAAzB7D,EAAWt/B,WAAkD,SAAzBs/B,EAAWt/B,UAAuB,CAC1F,IAAIg/B,KAAqBrZ,EAAQtL,UAAYn2B,KAAKtJ,OAAO0/B,gBACrDmpB,IAAev/C,KAAKwoB,GAAoBxoB,KAAKtJ,OAAOoa,aAAa86B,SAAY5rC,KAAKuyC,cACjF76C,oBAAkBsI,KAAKwoB,MAAkD,IAA5BxoB,KAAKwoB,IACnDsyB,IAAoB96C,KAAKwoB,IAAsB+2B,IAC/CzE,EAAkB96C,KAAKwoB,IAE3B,IAAIuyB,EAAYD,EAAkB96C,KAAKtJ,OAAOoa,aAAa86B,SACvDmP,EAAY/6C,KAAKuyC,eACjBwI,EAAYD,GACP96C,KAAKuyC,aAAeuI,IAE7B96C,KAAK02B,WAAc6oB,EAA8DzE,EAAhDC,EAAY/6C,KAAKtJ,OAAOoa,aAAa86B,SACtE5rC,KAAKwyC,SAAWuI,EACZK,EAAW4D,OAAOjgB,IAAO/+B,KAAKtJ,OAAO0/B,eAAiBp2B,KAAKuyC,aAC3DvyC,KAAKo6C,WAAap6C,KAAKs8C,cAAclB,EAAW4D,OAAOjgB,IAAK0C,EAAQQ,wBAAwBjb,QAG5FhnB,KAAKo6C,WAAagB,EAAW4D,OAAOjgB,IAG5C,GAAMkgB,GAAe7D,EAAW4D,OAAOjgB,IAAO/+B,KAAKtJ,OAAO0/B,eAAiBp2B,KAAKuyC,iBAChC,UAAzB6I,EAAWt/B,WAAkD,SAAzBs/B,EAAWt/B,UAAuB,CACzF,IAAI0jC,EAAWx/C,KAAK4Z,YAAcvb,WAAS,kBAAmB2B,MAAM+B,MAAM/B,MAAOo7C,EAAWt/B,UAAWqqB,EAAMiV,EAAW4D,SACxHh/C,KAAKy/C,aAAeD,EACpBx/C,KAAKtJ,OAAOgpD,uBAAuB1/C,KAAKtJ,OAAOgb,2BAA6B8tC,EAASjB,kBACrF,IAAItkC,EAAOulC,EAAS1lC,WAAa0lC,EAASG,SAAWH,EAASxlC,SAASC,KAAOulC,EAASvlC,KACvFja,KAAKtJ,OAAO4nB,eAAgBxN,cAAgBiJ,YAAaE,KAAU,GACtC,UAAzBmhC,EAAWt/B,WAAkD,SAAzBs/B,EAAWt/B,YAC/C0jC,EAASI,MAA2B,0BAAnBJ,EAASI,MAAoC,gBAAkBJ,EAASI,OAE7F5/C,KAAKtJ,OAAOmc,OAAO2sC,EAASI,OAAS//C,YAAa,gBAAiBumC,YAAaoZ,EAAUxF,aAAcoB,EAAWpB,iBAG3HC,EAA2Bp9C,UAAUgjD,cAAgB,SAAUz+C,EAAQ0+C,EAAUpiD,GAC7E,GAAKsC,KAAKtJ,OAAOC,sBAAsBC,oBAAyDgnB,IAA1C5d,KAAKtJ,OAAOC,WAAWA,WAAW4vC,MAChFvmC,KAAKtJ,OAAOC,WAAWA,WAAW4tB,SAAqD,KAA1CvkB,KAAKtJ,OAAOC,WAAWA,WAAW4vC,KAAepvC,EAAgB6I,KAAKtJ,QACnH2H,WAAS,mBAAoBX,KAC7BsC,KAAKw6C,gBAAiB,GAE1B14C,EAAOjF,UAAUgjD,cAAc9iD,KAAKiD,KAAMoB,EAAQ0+C,EAAUpiD,OAE3D,CACD,IAAIyoC,EAAOzoC,EAAE0oC,YAAY2Z,cAAoD,MAApCriD,EAAE0oC,YAAY2Z,aAAa5B,MAChE9/C,WAAS,cAAe2B,MAAMia,MAAQ5b,WAAS,cAAe2B,MAAMia,OAASvc,EAAE0oC,YAAYnsB,KAC3F5b,WAAS,cAAe2B,MAAQtC,EAAE0oC,YAClC4Z,EAAU7Z,EAAKoY,cAAc,GAAM,EACnC0B,EAAUjgD,KAAKo+C,gBAAgB4B,GAC/B7yC,OAAQ,EACZ,GAAInN,KAAKtJ,OAAOgb,2BAA4B,CACxC1R,KAAK4+C,OAAOF,WAAWC,YAAYsB,EAAS,GAC5C,IAAIv8B,EAASyiB,EAAKoY,cAClBpxC,EAAQnN,KAAKo+C,gBAAgB16B,EAAOA,EAAOnsB,OAAS,IAAMyI,KAAKo+C,gBAAgB16B,EAAO,GAAK,GAAK,GAChG1jB,KAAK4+C,OAAOF,WAAWwB,gBAAgB/yC,GAE3CnN,KAAK0+C,WAAWwB,gBAAgB/yC,EAAQjE,UAAQ+0C,MAA8B,SAAtB/0C,UAAQi9B,KAAKga,OACrE/+C,EAASpB,KAAKtJ,OAAO4V,cAAc,UAC5BqB,YAAYmyC,GAEnB9/C,KAAKogD,WAAWt1C,cAAc,SAAgB,YAAE1J,GAC3CpB,KAAKm6C,kBAAwC,IAApBn6C,KAAKo6C,WAI/Bp6C,KAAKm6C,kBAAmB,EAHxB97C,WAAS,aAAc2B,MAAM2+C,YAAYsB,EAASjgD,KAAKo6C,YAK3DlkC,WAAS,WAAYlW,KAAKy/C,aAAez/C,KAAKy/C,aAAetZ,EAAMnmC,MAC7C,kBAAlBtC,EAAEmC,aAAuE,MAApCnC,EAAE0oC,YAAY2Z,aAAa5B,MAChEn+C,KAAKtJ,OAAOmc,OjC9SP,eiCmTT/Q,EAAOjF,UAAmB,UAAEE,KAAKiD,KAAMtC,GAEnCsC,KAAU,QAAMA,KAAKtJ,OAAOy9B,aAAarpB,cAAc,cAAcA,cAAc,gBACxD,QAArB9K,KAAK49C,aAA8C,WAArB59C,KAAK49C,cACjC59C,KAAK+zC,cAAgB/zC,KAAK02B,WAC1B12B,KAAK+9C,gBAEA/9C,KAAK/E,aAAe+E,KAAK/E,aAAe,IAC7C+E,KAAU,OAAI,EACdA,KAAKtJ,OAAOg4B,QAAS,IAIjC1uB,KAAK89C,mBACLh8C,EAAOjF,UAAoB,WAAEE,KAAKiD,MAClC8B,EAAOjF,UAAmC,0BAAEE,KAAKiD,QAGzDi6C,EAA2Bp9C,UAAU2N,oBAAsB,WACnDxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,aAAc1K,KAAKg7C,aACnCh7C,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAKuY,IACtCvY,KAAKtJ,OAAOgU,IAAI,qBAAsB1K,KAAKy7C,oBAC3Cz7C,KAAKtJ,OAAOgU,IAAI,YAAa1K,KAAKu7C,gBAClCv7C,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAKw7C,kBACpCx7C,KAAKtJ,OAAOgU,IAAIgwC,GAA0B16C,KAAK26C,oBAC/C36C,KAAKtJ,OAAOgU,IAAIkwC,GAAsB56C,KAAK0G,eAC3C1G,KAAKtJ,OAAOgU,IAAI,mCAAoC1K,KAAKyF,WACzDzF,KAAKtJ,OAAOgU,IAAI,kCAAmC1K,KAAK0F,UACxD1F,KAAKtJ,OAAOgU,IAAI,8BAA+B1K,KAAK27C,oBACpD37C,KAAKtJ,OAAOgU,IAAI,aAAc1K,KAAK47C,kBACnC57C,KAAKtJ,OAAOgU,IAAI,mBAAoB1K,KAAKimC,SACzCjmC,KAAKtJ,OAAOgU,IAAI,6BAA8B1K,KAAK67C,YACnD77C,KAAKtJ,OAAOgU,IAAI,6BAA8B1K,KAAK87C,0BACnD97C,KAAKtJ,OAAOgU,IAAI,iCAAkC1K,KAAK+7C,aACvD/7C,KAAKtJ,OAAOgU,IAAI,qBAAsB1K,KAAKg8C,aAExC/B,GACToG,0BAEEjE,GAA0C,SAAUt6C,GAEpD,SAASs6C,IACL,IAAIh1C,EAAmB,OAAXtF,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAKhE,OAJAoH,EAAMk5C,YAAa,EACnBl5C,EAAMm5C,OAAS,EACfn5C,EAAMo5C,QAAU,EAChBp5C,EAAMq5C,MAAQ,EACPr5C,EAqEX,OA5EA3G,GAAU27C,EAA0Bt6C,GASpCs6C,EAAyBv/C,UAAUs+C,SAAW,SAAUuF,EAAUC,GAE9D7+C,EAAOjF,UAAuB,cAAIwB,WAAS,UAAW2B,MAAMsN,UAAU20B,wBACtEvd,eAAa/X,IAAItO,WAAS,UAAW2B,MAAMsN,UAAW,SAAUtN,KAAK4gD,sBAAsBF,EAAUC,GAAkB3gD,OAE3Ho8C,EAAyBv/C,UAAU4pC,MAAQ,WACvCzmC,KAAKwgD,QAAU,MAEnBpE,EAAyBv/C,UAAU+jD,sBAAwB,SAAUF,EAAUC,GAC3E,IAAIv5C,EAAQpH,KACR6gD,EAA8B,WAAtB33C,UAAQi9B,KAAKga,KAAoB,IAAM,IAC/CpgD,EAAU,UAKV+gD,GADeC,WAASL,EAAUG,GACpBE,WAASL,EAAU,KAErC,OADA1gD,KAAKD,GAASihD,QAAUhhD,KAAKD,GAASkhD,SAAW,EAC1C,SAAUvjD,GACb,IAAIqhC,EAAM33B,EAAMrH,GAASmhD,iBAAmB95C,EAAMrH,GAASuN,UAAU6oB,UAAYz4B,EAAE0D,OAAO+0B,UACtFuM,EAAOt7B,EAAMrH,GAASmhD,iBAAmB95C,EAAMrH,GAASohD,UAAU7e,WAAa5kC,EAAE0D,OAAOkhC,WACxFxmB,EAAY1U,EAAMrH,GAASihD,QAAUjiB,EAAM,OAAS,KACxDjjB,EAAY1U,EAAMrH,GAASkhD,WAAave,EAAO5mB,EAAY1U,EAAMrH,GAASkhD,SAAWve,EAAO,QAAU,OACtGt7B,EAAMrH,GAASihD,QAAUjiB,EACzB33B,EAAMrH,GAASkhD,SAAWve,EAC1B,IAAIvjB,EAAU/X,EAAM24C,aAAajkC,GAC7BslC,EAAQ,EAcZ,GAbAh6C,EAAMm5C,OAASxhB,EACM,MAAjB33B,EAAMo5C,UACNY,EAAQh6C,EAAMm5C,OAASn5C,EAAMo5C,SAEjCp5C,EAAMo5C,QAAUp5C,EAAMm5C,OAClBn5C,EAAMq5C,OACNY,aAAaj6C,EAAMq5C,OAEvBr5C,EAAMq5C,MAAQa,WAAWl6C,EAAMq/B,MAAO,IACjC2a,EAAQ,KAAOA,GAAS,MAAS1jD,GAAKA,EAAE6jD,iBACzC7jD,EAAE8jD,aAAc,EAChB9jD,EAAE6jD,mBAE6C,IAA/Cn6C,EAAMrH,GAAS0hD,KAAKjjD,QAAQ2gB,EAAQg/B,MAAxC,CAGA,IAAI/6C,EAAQgE,EAAMhE,MAAM0Y,GASxB,GARIqD,EAAQuiC,SAA4B,MAAjBviC,EAAQg/B,QACvB/2C,EAAgB,YAAoB,UAAd0U,GAAuC,SAAdA,EAI/C6kC,EAAgBv5C,EAAa,QAAG+X,EAASrD,GAAaijB,IAAKA,EAAK2D,KAAMA,GAAQt7B,EAAe,UAAGhE,GAHhGu9C,EAAgBv5C,EAAgB,WAAG+X,EAASrD,GAAaijB,IAAKA,EAAK2D,KAAMA,GAAQt7B,EAAe,UAAGhE,IAMvGA,EAAO,CAEc,MAAjB+b,EAAQg/B,KACH2C,GACAhlC,UAAWA,EAAW+iC,SAAU1/B,EAAS6/B,QAAUjgB,IAAKA,EAAK2D,KAAMA,GACpEsX,aAAcvb,SAASiZ,gBAG3BgJ,GAAW5kC,UAAWA,EAAW+iC,SAAU1/B,EAAS6/B,QAAUjgB,IAAKA,EAAK2D,KAAMA,GAC1EsX,aAAcvb,SAASiZ,gBAGnCtwC,EAAe,WAAI,KAGpBg1C,GACTuF,wBC5iBElhD,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GA0BxC6gD,GAA+B,WAM/B,SAASA,EAAclrD,GACnBsJ,KAAK6hD,gBAAkB,EACvB7hD,KAAK8hD,cAAgB,EACrB9hD,KAAKtJ,OAASA,EACd+L,OAAKC,OAAOq/C,IACZ/hD,KAAKkK,mBAiIT,OA/HA03C,EAAc/kD,UAAUmlD,iBAAmB,SAAUj/C,GACjDA,EAAKtE,KAAOuB,KAAK+lC,YAQrB6b,EAAc/kD,UAAU+F,cAAgB,WACpC,MAAO,iBAMXg/C,EAAc/kD,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOyT,GAAGgtB,EAAiCn3B,KAAKiiD,4BAA6BjiD,MAClFA,KAAKtJ,OAAOyT,GAAGkS,EAAsBrc,KAAKkiD,kBAAmBliD,MAC7DA,KAAKtJ,OAAOyT,GlCsCC,UkCtCkBnK,KAAK4J,QAAS5J,QAMjD4hD,EAAc/kD,UAAU2N,oBAAsB,WACtCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIysB,EAAiCn3B,KAAKiiD,6BACtDjiD,KAAKtJ,OAAOgU,IAAI2R,EAAsBrc,KAAKkiD,mBAC3CliD,KAAKtJ,OAAOgU,IlC0BC,UkC1BmB1K,KAAK4J,WAEzCg4C,EAAc/kD,UAAUolD,4BAA8B,SAAUtjD,GAC5DqB,KAAKtJ,OAAOiB,KAAKkb,OAAO6nC,IAA4BP,kBAAkB,IACtEn6C,KAAKmiD,kBAAoBxjD,EAAIjG,OAC7BiG,EAAIjG,OAAOS,SAA0B,aAAfwF,EAAIrD,OAC1B,IAAI4vC,GACAn3B,OAAQ/T,KAAKtJ,OAAO8G,SACpBmB,IAAKA,EAAIA,IACTrD,OAAQqD,EAAIrD,OACZ5C,OAAQiG,EAAIjG,OACZ2V,MAAOrO,KAAKtJ,OAAO8G,SAASjG,QAEhCyI,KAAKtJ,OAAOiB,KAAK4rB,iBACjB,IAAI1jB,EAAcxB,WAAS,gBAAiB2B,KAAKtJ,QAAU,cAAgB,UAC3E2H,WAAS,oBAAqB2B,KAAKtJ,QAAQ0f,mBAAmB80B,GAAOrrC,YAAaA,KAEtF+hD,EAAc/kD,UAAUqlD,kBAAoB,SAAU1W,GAClD,IAAIpkC,EAAQpH,KACRvG,EAAK,IAAI7C,cAAY40C,EAAez3B,QACpC5a,EAAW,IAAI0I,YAAU,WAAY,WAAY,MAAMkqC,GAAG,WAAY,gBAAYnuB,GAClFjlB,EAAUc,EAAGid,cAAa,IAAIxB,SAAQI,MAAMnc,IAC5C4sC,EAAaptC,EAAQ8E,OAAO,SAAUC,GACtC,OAAOjF,EAAgB2O,EAAM1Q,OAAQgH,EAAG/E,KAE5CqH,KAAK+lC,WAAaA,EAClB/lC,KAAKtJ,OAAOiB,KAAKkb,OAAOgzB,IAAuBpnC,KAAMsnC,IACrD,IAAIqc,GAAW1rB,YAAa,EAAG8b,UAAW,EAAGnkC,MAAOm9B,EAAen9B,OACnErO,KAAKtJ,OAAOiB,KAAKkb,OAAO+nC,GAAsBwH,GAC9C,IAAI1rB,EAAa0rB,EAAO1rB,WACpB8b,EAAW4P,EAAO5P,SAEtB,GADAhH,EAAen9B,MAAQ03B,EAAWxuC,QACd,IAAhBm/B,IAAmC,IAAd8b,EAAiB,CACtC,IAAIv9B,EAAQ,IAAIC,QACZy2B,EAAO3rC,KAAKtJ,OAAOiB,KAAKmZ,aAAa86B,SAErCF,EAAOC,GADG3rC,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YACf,GAC7B9E,EAAQA,EAAMy2B,KAAKA,GAAMG,KAAKF,GAC9BlyC,EAAG9C,WAAW8E,KAAOsqC,EACrByF,EAAez3B,OAASta,EAAGid,aAAazB,OAEvC,CACD,IAAIpV,EAAc2rC,EAAe9wB,WAAW7a,YAU5C,IAToB,cAAhBA,GAA+C,gBAAhBA,GACd,YAAhBA,GAA6BG,KAAKtJ,OAAOsa,mBAAqBwhC,EAAWzM,EAAWxuC,UACrFm/B,EAAa,EACb8b,EAAWxyC,KAAKtJ,OAAOiB,KAAKmZ,aAAa86B,SAAW,EACpD5rC,KAAKtJ,OAAOiB,KAAKw8B,aAAa8B,kBAAkBE,UAAY,EAC5Dn2B,KAAKtJ,OAAOiB,KAAKkb,OAAO6nC,IAA4BG,QAAQ,MAI3DnjD,oBAAkBsI,KAAKmiD,mBAAoB,CAC5C,IAAIE,EAAgBriD,KAAKtJ,OAAOmI,UAC5ByjD,EAASvc,EAAWvnC,QAAQwB,KAAKmiD,mBACtBpc,EAAWz9B,MAAMg6C,EAAQA,EAASD,EAAc9qD,QAClDA,OAAS8qD,EAAc9qD,QAAU+qD,GAAU,GAGpD5rB,EADA4rB,GADAA,EAASvc,EAAWxuC,OAAS8qD,EAAc9qD,QACzB,EAAI+qD,EAAS,EAE/B9P,EAAWzM,EAAWxuC,QAEjB8G,WAAS,gBAAiB2B,KAAKtJ,UACpCggC,EAAa,EACb8b,EAAWxyC,KAAKtJ,OAAOiB,KAAKmZ,aAAa86B,SAAW,EACpD5rC,KAAKtJ,OAAOiB,KAAKkb,OAAO6nC,IAA4BG,QAAQ,MAI/D76C,KAAKtJ,OAAOsa,oBAAqBhR,KAAKtJ,OAAOwC,oBAAwBxB,oBAAkBsI,KAAKmiD,qBAEzFzrB,EADA8U,EAAen9B,MAAQrO,KAAKtJ,OAAOmI,UAAU,GAAGojC,wBAAwBjb,OAC3D,GAGyB,IAAzBhnB,KAAK6hD,eAAwB,EAAI7hD,KAAK6hD,gBAG3D7hD,KAAKmiD,kBAAoB,KACzB3W,EAAez3B,OAASgyB,EAAWz9B,MAAMouB,EAAY8b,GACrDxyC,KAAK6hD,eAAiBnrB,EACtB12B,KAAK8hD,aAAetP,EAExBxyC,KAAKtJ,OAAOmc,OAAO,eAAgB24B,IAQvCoW,EAAc/kD,UAAU+M,QAAU,WAC9B5J,KAAKwK,uBAEFo3C,KAGPG,GAA6B,SAAUjgD,GAEvC,SAASigD,EAAYrrD,EAAQwjD,GACzB,IAAI9yC,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,EAAQwjD,IAAYl6C,KAGlD,OAFA3B,WAAS,SAAU+I,GAAOsD,IAAI,eAAgBrM,WAAS,sBAAuB+I,GAAQA,GACtF/I,WAAS,SAAU+I,GAAO+C,GAAG,eAAgB/C,EAAMm7C,qBAAsBn7C,GAClEA,EA+BX,OApCA3G,GAAUshD,EAAajgD,GAOvBigD,EAAYllD,UAAU+F,cAAgB,WAClC,MAAO,qBAEXm/C,EAAYllD,UAAU0lD,qBAAuB,WACzC,IAAIC,EAAankD,WAAS,SAAU2B,MACpC3B,WAAS,SAAU2B,MAAM6C,KAAK,aAAc,kBAAmB,kBAC/D,IAAI4/C,EAAWpkD,WAAS,UAAW2B,MAAM0iD,WAAW,mBAChDF,EAAW9wC,4BACXrT,WAAS,cAAeokD,GACnB1gD,MAAM0gD,GAAWE,aAAWC,OAAQ,IAAIC,wBAAsBxkD,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,SAErH3B,WAAS,cAAeokD,GACnB1gD,MAAM0gD,GAAWE,aAAWG,QAAS,IAAI7I,GAA2B57C,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,SAEvHA,KAAK+iD,kBAEThB,EAAYllD,UAAUkmD,eAAiB,WACnC,IAAIP,EAAankD,WAAS,SAAU2B,MAChCmoB,EAAYq6B,EAAWpsB,eACtB1+B,oBAAkB8qD,EAAWx7B,SAA0C,iBAAvBw7B,EAAiB,SAAsD,IAApCA,EAAWx7B,OAAOxoB,QAAQ,OAC9GgkD,EAAW7uC,QAAQnZ,MAAMwsB,OAASw7B,EAAWx7B,QAEjD,IAGIA,EAAqB,MAHXw7B,EAAWx7B,OAAOpf,WAAWpJ,QAAQ,KAAO,EAAIgkD,EAAWx7B,OACrEw7B,EAAW7uC,QAAQsuB,wBAAwBjb,QAClBmB,GAEzBwjB,EAAO6W,EAAW1xC,aAAa86B,SACnC4W,EAAWlkC,eAAgBxN,cAAgB86B,SAAUD,EAAO3kB,EAASA,EAAS2kB,KAAU,IAErFoW,GACTiB,iBCvMEC,GAAwB,WAMxB,SAASA,EAAOvsD,GACZ+L,OAAKC,OAAOwgD,UACZljD,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAkFT,OAhFA+4C,EAAOpmD,UAAUqN,iBAAmB,WAChClK,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKg5C,kBAAmBh5C,MAC5DA,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAK44C,aAAc54C,MAClDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,WAAYnK,KAAKmjD,gBAAiBnjD,OAE1DijD,EAAOpmD,UAAU2N,oBAAsB,WAC/BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKg5C,mBAC1Ch5C,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAK44C,cACrC54C,KAAKtJ,OAAOiB,KAAK+S,IAAI,WAAY1K,KAAKmjD,mBAE1CF,EAAOpmD,UAAUm8C,kBAAoB,SAAUj2C,GAC3C,IAEI+E,EACAs7C,EAHA1rB,EAAc13B,KAAKtJ,OAAOyY,qBAC1Bk0C,EAAarjD,KAAKtJ,OAAOmI,UAGzBg3B,EAAU71B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAC3CwjB,IACAutB,EAAkBpjD,KAAKtJ,OAAOqhC,qBAAqBt6B,OAAO,SAAUC,GAChE,OAAOA,EAAEoN,cAAc,kBAAoB/H,EAAKrK,OAAOwB,MAAQ,SAAW6I,EAAKrK,OAAOyB,MAAQ,OASlG2N,EANC/E,EAAKg0B,WAAWx/B,OAMVwL,EAAKg0B,WALLW,EAAYj6B,OAAO,SAAUC,GAChC,OAAOA,EAAEoN,cAAc,kBAAoB/H,EAAKrK,OAAOwB,MAAQ,SAAW6I,EAAKrK,OAAOyB,MAAQ,MAMtG,IAAK,IAAI9C,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAClC,IAAIisD,EAAQtjD,KAAKtJ,OAAOiB,KAAKmgB,oBAAoBhQ,EAAKzQ,GAAG8U,aAAa,aAAa1N,KACnFqJ,EAAKzQ,GAAGmD,MAAMG,QAAUoI,EAAKzH,OACzBu6B,IACAutB,EAAgB/rD,GAAGmD,MAAMG,QAAUoI,EAAKzH,QAE5C,IAAIioD,EAAgC,SAAhBxgD,EAAKzH,OAAoB,8CACvC,4CACN,GAAI+nD,EAAWv7C,EAAKzQ,GAAGqS,UAAUoB,cAAcy4C,GAAgB,CAE3D,IAAK,IADD9qB,KACKE,EAAM,EAAGA,EAAMjB,EAAYngC,OAAQohC,IACpCjB,EAAYiB,GAAK7tB,cAAc,kBAAoBw4C,EAAMppD,MAAQ,SAAWopD,EAAMnpD,MAAQ,KAC1Fs+B,EAAKjgC,KAAKk/B,EAAYiB,IAG1BF,EAAKlhC,QACLyI,KAAKg5C,mBAAoBjiB,WAAY0B,EAAMn9B,OAAQyH,EAAKzH,YAKxE2nD,EAAOpmD,UAAUsmD,gBAAkB,SAAUzlD,GACrCmN,eAAanN,EAAE0D,OAAQ,cACvBpB,KAAKtJ,OAAOiB,KAAKkE,aAAakzB,qBAAyD,SAAlC/uB,KAAKtJ,OAAOmF,aAAaC,MAC9EkE,KAAKtJ,OAAOiB,KAAKoE,WAAWg2B,UAAUlnB,eAAanN,EAAE0D,OAAQ,WAGrE6hD,EAAOpmD,UAAU+7C,aAAe,WACP54C,KAAKtJ,OAAOkJ,aAAanC,OAAO,SAAUC,GAC3D,OAAOA,EAAElG,eAEMD,QAAUyI,KAAKtJ,OAAO8sD,cAAgBxjD,KAAKtJ,OAAOuC,eACjEmX,YAAUpQ,KAAKtJ,OAAOid,QAAQkE,uBAAuB,UAAU,IAAK,qBAG5EorC,EAAOpmD,UAAU+M,QAAU,WACvB5J,KAAKwK,uBAQTy4C,EAAOpmD,UAAU+F,cAAgB,WAC7B,MAAO,UAEJqgD,KC7FPQ,GAA+B,WAM/B,SAASA,EAAc/sD,GACnB+L,OAAKC,OAAOghD,iBACZ1jD,KAAKtJ,OAASA,EA8BlB,OArBA+sD,EAAc5mD,UAAUy1B,kBAAoB,SAAUqxB,EAAGC,GACrD,OAAO5jD,KAAKtJ,OAAOiB,KAAK86B,oBAAoBH,kBAAkBqxB,EAAGC,IAQrEH,EAAc5mD,UAAU+M,QAAU,aASlC65C,EAAc5mD,UAAU+F,cAAgB,WACpC,MAAO,iBAEJ6gD,KCjCPI,GAAgC,WAMhC,SAASA,EAAentD,GACpBsJ,KAAKtJ,OAASA,EACd+L,OAAKC,OAAOohD,kBACZ9jD,KAAKkK,mBA+RT,OAvRA25C,EAAehnD,UAAU+F,cAAgB,WACrC,MAAO,kBAMXihD,EAAehnD,UAAUqN,iBAAmB,WACxClK,KAAKtJ,OAAOyT,GAAGkS,EAAsBrc,KAAK+jD,mBAAoB/jD,MAC9DA,KAAKtJ,OAAOyT,GAAG,yBAA0BnK,KAAKgkD,qBAAsBhkD,MACpEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,kBAAmBnK,KAAKikD,sBAAuBjkD,MACnEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,wBAAyBnK,KAAKkkD,oBAAqBlkD,MACvEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,uBAAwBnK,KAAKmkD,WAAYnkD,MAC7DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,gBAAiBnK,KAAKmzC,aAAcnzC,OAM5D6jD,EAAehnD,UAAU2N,oBAAsB,WACvCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,yBAA0B1K,KAAKgkD,sBAC/ChkD,KAAKtJ,OAAOiB,KAAK+S,IAAI,kBAAmB1K,KAAKikD,uBAC7CjkD,KAAKtJ,OAAOiB,KAAK+S,IAAI,wBAAyB1K,KAAKkkD,qBACnDlkD,KAAKtJ,OAAOgU,IAAI2R,EAAsBrc,KAAK+jD,oBAC3C/jD,KAAKtJ,OAAOiB,KAAK+S,IAAI,uBAAwB1K,KAAKmkD,YAClDnkD,KAAKtJ,OAAOiB,KAAK+S,IAAI,gBAAiB1K,KAAKmzC,gBAU/C0Q,EAAehnD,UAAUmnD,qBAAuB,SAAUjhD,GAWtD,IAAK,IAVDuxC,EAAat0C,KAAKtJ,OAAOiB,KAAKghB,gBAG9ByrC,EAAiBpkD,KAAKtJ,OAAOiB,KAAKy9C,qBAA4B,eAC9DiP,EAAc,IAAIC,cAAYF,EAAgB,KAAMpkD,KAAKtJ,OAAOiB,MAChEmQ,EAAO9H,KAAKtJ,OAAOmI,UACnB4yB,EAAW1uB,EAAK7I,QAAU4N,EAAKvQ,OAAS,EAAI,QAAU,SACtDo9B,EAAO30B,KAAKtJ,OAAOiB,KAAKiI,aACxB2kD,EAAkBvkD,KAAKtJ,OAAOiB,KAAKy9C,qBAAiC,aAAEryC,EAAK8G,UAAW9G,GACtFyhD,KACKntD,EAAI,EAAGA,EAAIktD,EAAgBhtD,OAAQF,IACxCmtD,EAAiBhsD,KAAK6rD,EAAY/9B,OAAOi+B,EAAgBltD,GAAIs9B,IAEjE2f,EAAWn3C,OAAO4E,MAAMuyC,GAAavxC,EAAK7I,MAAQ,EAAG,GAAGX,OAAOgrD,IAC/D,IAASltD,EAAI,EAAGA,EAAImtD,EAAiBjtD,OAAQF,IACxB,UAAbo6B,EACA3pB,EAAK/E,EAAK7I,MAAQ7C,GAAGo6B,GAAU+yB,EAAiBntD,IAGhDyQ,EAAK/E,EAAK7I,MAAQ7C,EAAI,GAAGo6B,GAAU+yB,EAAiBntD,IAExDyQ,EAAK3K,OAAO4F,EAAK7I,MAAQ,EAAI7C,EAAG,EAAGmtD,EAAiBntD,IAExD09C,gBAAc/0C,KAAKtJ,OAAOiB,KAAMqI,KAAKtJ,OAAOiB,KAAKghB,gBAAiB3Y,KAAKtJ,OAAOiB,KAAKkH,UAAW,IAOlGglD,EAAehnD,UAAUs2C,aAAe,WACpC,GAAInzC,KAAKtJ,OAAOqxB,uBAAuB+sB,cAAgBp9C,oBAAkBsI,KAAKtJ,OAAOqF,YAAa,CAE9FiE,KAAKtJ,OAAOqF,WAAsB,YAAEiE,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOmI,UAAWmB,KAAKtJ,OAAOyF,yBAChG6D,KAAKtJ,OAAOuI,oBACZe,KAAKtJ,OAAOqF,WAAsB,YAAEiE,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOyY,qBAAsBnP,KAAKtJ,OAAOyF,2BAa3H0nD,EAAehnD,UAAUknD,mBAAqB,SAAUvY,GACpD,IAAI/xC,EAAK,IAAI7C,cAAY40C,EAAez3B,QACpC5a,EAAW,IAAI0I,YAAU,WAAY,WAAY,MAAMkqC,GAAG,WAAY,gBAAYnuB,GAClFmoB,EAAatsC,EAAGid,cAAa,IAAIxB,SAAQI,MAAMnc,IAC/CuhB,EAAarc,WAAS,aAAcmtC,EAAe9wB,YAGnDzhB,IAFUoF,WAAS,UAAW2B,KAAKtJ,OAAOiB,KAAKy9C,sBAC7BpvB,KAAK,SAAU/rB,GAAS,OAAOA,IAAUygB,EAAW7a,iBACrCG,KAAKtJ,OAAOuC,cAGjD,GAFA+G,KAAK+lC,WAAaA,EAClByF,EAAen9B,MAAQ03B,EAAWxuC,OAC9B8G,WAAS,aAAcmtC,EAAe9wB,YACtC8wB,EAAez3B,OAASgyB,MAEvB,CACD,IAAI9wB,EAAQ,IAAIC,QACZ2/B,EAAU70C,KAAKtJ,OAAOqxB,uBAAuB+sB,YAC7CD,GAAW70C,KAAKtJ,OAAOqxB,uBAAuB08B,cAAgBzkD,KAAKtJ,OAAOqxB,uBAAuB28B,YACjG1kD,KAAKtJ,OAAOqxB,uBAAuB08B,cAAgBzkD,KAAKtJ,OAAOqxB,uBAAuB28B,WAE1F,IAAI/Y,EAAO1yC,EACP+G,KAAKtJ,OAAOoa,aAAa86B,SAAW5rC,KAAKtJ,OAAOqxB,uBAAuB08B,cACvEzkD,KAAKtJ,OAAOoa,aAAa86B,SACzBzsB,EAAUnf,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YAC5C,GAAKriB,oBAAkBgjB,GAkBnBzF,EAAQA,EAAMgF,KAAKkF,EAASwsB,OAlBI,CAChC,IAAIoP,EAAY18C,WAAS,YAAa2B,KAAKtJ,OAAOiB,KAAKy9C,sBACnDuP,EAAatmD,WAAS,aAAc2B,KAAKtJ,OAAOiB,KAAKy9C,sBACzD,GAAKP,GAAsC,WAA3Bn6B,EAAW7a,YAQvBoV,EAHK4/B,GAAsC,WAA3Bn6B,EAAW7a,aACC,SAA3B6a,EAAW7a,aAAgD,QAAtB6a,EAAWpf,QACjD2Z,EAAQA,EAAMy2B,KAAKiZ,IACL9Y,KAAK7rC,KAAKtJ,OAAOqxB,uBAAuB08B,cAAgBzkD,KAAKtJ,OAAOoa,aAAa86B,UAGvF32B,EAAMgF,KAAKkF,EAASwsB,OAXqB,CACjD,IAAID,EAAOqP,EAAYrgC,EAAWjc,KAAKlH,OAAS,EAC5Cs0C,EAAOnxB,EAAWjc,KAAKlH,OAC3B0d,EAAQA,EAAMy2B,KAAKA,GAAMG,KAAKA,IActCpyC,EAAG9C,WAAW8E,KAAOsqC,EAChB8O,GAAYn9C,oBAAkBgjB,IAA0C,SAA3BA,EAAW7a,aAAgD,QAAtB6a,EAAWpf,OAI9FkwC,EAAez3B,OAASta,EAAGid,aAAazB,GAHxCu2B,EAAez3B,QAAU2G,EAAWjc,MAM5CuB,KAAKtJ,OAAOmc,OAAO,eAAgB24B,IAUvCqY,EAAehnD,UAAUqnD,oBAAsB,SAAUnhD,GACrD,IACIoyC,EAA0Bn1C,KAAKtJ,OAAOiB,KAAKy9C,qBAAiC,wBAC5E98C,EAAOD,OAAOC,KAAK68C,GACvB,GAA2B,WAAvBpyC,EAAKrF,EAAEmC,aAA4BkD,EAAKgR,OAAOxc,OAAS,EACxD,IAAK,IAAIF,EAAI,EAAGA,EAAI0L,EAAKgR,OAAOxc,OAAQF,IACpC89C,EAAwB78C,EAAKA,EAAKf,OAAS,IAAIiB,KAAKuK,EAAKgR,OAAO1c,KAU5EwsD,EAAehnD,UAAUonD,sBAAwB,SAAUlhD,GACvD,GAAyB,WAArBA,EAAKlD,YAA0B,CAC/B,IAAIiI,EAAO9H,KAAKtJ,OAAOiB,KAAKghB,gBACxBisC,EAAU5kD,KAAKtJ,OAAOmI,UACtBJ,EAAOsE,EAAKtE,gBAAgB/B,MAAQqG,EAAKtE,MAAQsE,EAAKtE,MACtDomD,EAAW7kD,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAE1D,GADAyE,KAAK8kD,WAAWF,EAAS98C,EAAMrJ,EAAMomD,GAAU,GAC3C7kD,KAAKtJ,OAAOuI,mBAAqB,EAAG,CACpC,IAAI+yC,EAAQhyC,KAAKtJ,OAAOiB,KAAKi9C,uBACzBmQ,EAAW/kD,KAAKtJ,OAAOiB,KAAKmgC,iBAChC93B,KAAK8kD,WAAWC,EAAU/S,EAAOvzC,EAAMomD,MAcnDhB,EAAehnD,UAAUioD,WAAa,SAAUF,EAAS98C,EAAMrJ,EAAMomD,EAAUnqB,GAgB3E,IAAK,IAfDtzB,EAAQpH,KAERpD,EAAU,SAAUvF,GACpByQ,EAAKrK,OAAO,SAAUC,EAAGxD,GACrB,GAAIwD,EAAEe,KAAKomD,KAAcpmD,EAAKpH,GAAGwtD,GAAW,CACxC,GAAInqB,EAAU,CACV,IAAIzgB,EAAO7C,KAAKC,MAAMnd,EAAQ,GAAKkN,EAAM1Q,OAAOiB,KAAKmZ,aAAa86B,UAClExkC,EAAM1Q,OAAOiB,KAAKy9C,qBAAiD,6BAAEn7B,EAAM/f,GAE/E4N,EAAK3K,OAAOjD,EAAO,GACnBksB,SAAOw+B,EAAQ1qD,IACf0qD,EAAQznD,OAAOjD,EAAO,OAIzB7C,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAC7BuF,EAAQvF,IAMhBwsD,EAAehnD,UAAUsnD,WAAa,SAAUlQ,GAC5C,IAKI+Q,EAJAtqC,EAAau5B,EAAUlxC,KAAKrF,EAC5BiB,EAAMs1C,EAAUt1C,IAChBylD,EAAiBpkD,KAAKtJ,OAAOiB,KAAKy9C,qBAA4B,eAC9DiP,EAAc,IAAIC,cAAYF,EAAgB,KAAMpkD,KAAKtJ,OAAOiB,MAEhEyiB,EAAcpa,KAAKtJ,OAAOyF,wBAC1B8oD,EAAchR,EAAUiR,UAAYllD,KAAKtJ,OAAOiB,KAAKmgC,iBACnD93B,KAAKtJ,OAAOiB,KAAK28B,cAEnB0wB,EADA/Q,EAAUkR,cACFnlD,KAAKtJ,OAAOid,QAAQ7I,cAAc,2BAA2BA,cAAc,SAG1E9K,KAAKtJ,OAAOiB,KAAKytD,eAAmEnR,EAAUiR,UACjGllD,KAAKtJ,OAAOiB,KAAK0tD,2BAA2Bv6C,cAAc,SAC1D9K,KAAKtJ,OAAOiB,KAAK2tD,0BAA0Bx6C,cAAc,SAFpB9K,KAAKtJ,OAAOy9B,aAAarpB,cAAc,SAIlF9K,KAAKtJ,OAAOsI,aACZgmD,EAAQ/Q,EAAUsR,cAAsE,QAAtDvlD,KAAKtJ,OAAOiB,KAAKy9C,qBAAqBv1C,cAChEo0C,EAAUsR,cAAsE,QAAtDvlD,KAAKtJ,OAAOiB,KAAKy9C,qBAAqBv1C,YACjEG,KAAKtJ,OAAOiB,KAAKytD,eACdnR,EAAUiR,UAAYllD,KAAKtJ,OAAOiB,KAAK6tD,0BAA0B16C,cAAc,SAC3EmpC,EAAUkR,cAAgBnlD,KAAKtJ,OAAOid,QAAQ7I,cAAc,0BAA0BA,cAAc,SAChG9K,KAAKtJ,OAAOiB,KAAK8tD,yBAAyB36C,cAAc,SAHjC9K,KAAKtJ,OAAOwV,mBAAmBpB,cAAc,SAGDk6C,GAKzF,IAAK,IAHDvzB,EAEAwjB,EAAcj1C,KAAKtJ,OAAOqF,WAAsB,YAC3C1E,EAAI,EAAGA,EAAIsH,EAAIpH,OAAQF,IAAK,CACjC,IAAIquD,EAASrB,EAAY/9B,OAAO3nB,EAAItH,GAAI2I,KAAKtJ,OAAOiB,KAAKiI,cAC1B,SAA3B8a,EAAW7a,aAAgD,QAAtB6a,EAAWpf,QACW,IAAvD+C,WAAS,gBAAiB2B,KAAKtJ,OAAOqF,aAAkE,QAA5CiE,KAAKtJ,OAAOmF,aAAaQ,eACrC,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAChFo1B,EAAW,QACXwjB,GAAe77C,EAAoBghB,EAAY66B,EAAc,IAAI19C,OACjB,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,iBACzB44C,GAAe,GAEnBgQ,EAAYhQ,GAAaxjB,GAAUi0B,IAEc,UAA5C1lD,KAAKtJ,OAAOmF,aAAaQ,iBAC9Bo1B,EAAW,SACXwzB,EAAYjlD,KAAKtJ,OAAOqF,WAAsB,aAAG01B,GAAUi0B,IAGd,WAA5C1lD,KAAKtJ,OAAOmF,aAAaQ,eAC9B2oD,EAAMr3C,YAAY+3C,GAGlBV,EAAMp4C,aAAa84C,EAAQV,EAAM/uB,mBAGL,WAA3Bvb,EAAW7a,aAChBmlD,EAAMr3C,YAAY+3C,GAG1BzR,EAAUjrC,QAAS,GAQvB66C,EAAehnD,UAAU+M,QAAU,WAC/B5J,KAAKwK,uBAEFq5C,0BrChTO,oCAIK,wHAYG,4IAcF,sCAID,uCAIC,sJAcA,2BAEC,wCAEY,qSAgCb,kDAIQ,sDAIX,mHAUc,wDAId,4CAIA,yBAEK,sFAUL"}
1
+ {"version":3,"file":"ej2-treegrid.umd.min.js","sources":["../src/treegrid/utils.js","../src/treegrid/actions/crud-actions.js","../src/treegrid/models/column.js","../src/treegrid/models/filter-settings.js","../src/treegrid/models/textwrap-settings.js","../src/treegrid/actions/logger.js","../src/treegrid/base/constant.js","../src/treegrid/actions/clipboard.js","../src/treegrid/actions/selection.js","../src/treegrid/actions/print.js","../src/treegrid/models/search-settings.js","../src/treegrid/models/selection-settings.js","../src/treegrid/renderer/render.js","../src/treegrid/base/data.js","../src/treegrid/enum.js","../src/treegrid/models/page-settings.js","../src/treegrid/models/summary.js","../src/treegrid/models/edit-settings.js","../src/treegrid/models/sort-settings.js","../src/treegrid/models/infinite-scroll-settings.js","../src/treegrid/base/treegrid.js","../src/treegrid/actions/reorder.js","../src/treegrid/actions/resize.js","../src/treegrid/actions/rowdragdrop.js","../src/treegrid/models/rowdrop-settings.js","../src/treegrid/renderer/virtual-row-model-generator.js","../src/treegrid/actions/filter.js","../src/treegrid/actions/excel-export.js","../src/treegrid/actions/pdf-export.js","../src/treegrid/actions/page.js","../src/treegrid/actions/toolbar.js","../src/treegrid/actions/summary.js","../src/treegrid/actions/sort.js","../src/treegrid/actions/column-menu.js","../src/treegrid/actions/context-menu.js","../src/treegrid/actions/batch-edit.js","../src/treegrid/actions/edit.js","../src/treegrid/actions/command-column.js","../src/treegrid/actions/detail-row.js","../src/treegrid/renderer/virtual-tree-content-render.js","../src/treegrid/actions/virtual-scroll.js","../src/treegrid/actions/freeze-column.js","../src/treegrid/actions/column-chooser.js","../src/treegrid/actions/infinite-scroll.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords;\n for (var i = 0, len = Object.keys(childRecords).length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n parentData['childRecords'].splice(p, 1);\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\n var editModule = 'editModule';\n control.grid.editModule[editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[control.parentIdMapping] = childRecords[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[key] === record[key]) {\n index_1 = i;\n return;\n } });\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[key] !== child[key]) {\n record.childRecords.push(child);\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[control.childMapping].indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[i][primaryKeys] === record[primaryKeys]) {\n data[i] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = 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 *\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 *\n * @default true\n */\n this.showColumnMenu = 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 *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\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 *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\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 *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid 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 __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\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 __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 textwrap behavior of the TreeGrid.\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.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 this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var columns = (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = this.parent.columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 filtering behavior of the TreeGrid.\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(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 selection behavior of the TreeGrid.\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, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('aria-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n for (var i = 0; i < Object.keys(data).length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n for (var i = 0, len = Object.keys(data).length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\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[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 TreeGrid.\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 __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid'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.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.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 /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\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 };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\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, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\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 __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\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('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", 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 __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, Collection } from '@syncfusion/ej2-base';\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 TreeGrid.\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree 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 {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\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 {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} 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 {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n this.sortModule.removeSortColumn(field);\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\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 *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount()) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.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 /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n this.grid.appendTo(gridContainer);\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName(\"e-frame e-icons e-uncheck\").length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ? _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise.resolve(actionArgs);\n });\n return callBackPromise;\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n _this.trigger(events.actionComplete, args);\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n index = index === 0 ? -1 : index;\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n }\n return gridColumnCollection;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n this.grid.columns = this.getGridColumns(this.columns);\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\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 this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\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 *\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 * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\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 *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides a column by column name.\n *\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 * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[columnModel], 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 a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var stackedHeader = false;\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n stackedHeader = true;\n }\n if (!stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.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 * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ? this.flatData :\n new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandRow(null, rec);\n }\n else {\n var rec = this.getRecordDetails(level);\n var row = getObject('rows', rec);\n var record = getObject('records', rec);\n for (var i = 0; i < record.length; i++) {\n if (record[i].parentItem !== undefined) {\n var pindex = this.flatData[record[i].parentItem.index].index;\n if (this.flatData[pindex].expanded === false) {\n record.push(this.flatData[pindex]);\n this.flatData[pindex].expanded = true;\n }\n }\n this.expandRow(row[i], record[i]);\n }\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseRow(null, record);\n }\n else {\n var rec = this.getRecordDetails(level);\n var rows = getObject('rows', rec);\n var records = getObject('records', rec);\n for (var i = 0; i < records.length; i++) {\n this.collapseRow(rows[i], records[i]);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if (!isNullOrUndefined(childRecords[i].childRecords) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\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 TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\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 * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = this.parent.treeColumnIndex + 1;\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n for (var i = 0; i < totalRecord.length; i++) {\n this.parent.renderModule.cellRender({\n data: totalRecord[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n var _loop_1 = function (i) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = currentData.filter(function (data) {\n return data.uniqueID === currentData[i].parentUniqueID;\n })[0];\n currentData[i].parentItem.index = updatedParent.index;\n }\n };\n for (var i = 0; i < currentData.length; i++) {\n _loop_1(i);\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping) && draggedRecord_1[tObj.parentIdMapping] != null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n for (var i = 0; i < Object.keys(tempDataSource).length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n if (errorelem) {\n errorelem.remove();\n }\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping != null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record) {\n var parentItem = record.parentItem;\n if (this.dropPosition === 'bottomSegment') {\n var selectedRecord = this.parent.getSelectedRecords()[0];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getSelectedRecords()[0].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var rowIndex = tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_2 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_2(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 row drop settings of the TreeGrid.\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var tObj = this.parent;\n if (args.row.rowIndex === 0 || tObj.getSelectedRecords().length > 1) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent', tObj.element.id + '_gridcontrol_outdent'], false);\n }\n else {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex])) {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex]) &&\n (tObj.getCurrentViewRecords()[args.row.rowIndex].level >\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level)) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n else {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level ===\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level === 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level !== 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n }\n if (args.row.rowIndex === 0 && !isNullOrUndefined(args.data.parentItem)) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length) {\n var record = tObj.getCurrentViewRecords()[tObj.getSelectedRowIndexes()[0] - 1];\n var dropIndex = void 0;\n if (record.level > tObj.getSelectedRecords()[0].level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = tObj.getSelectedRowIndexes()[0] - 1;\n }\n tObj.reorderRows([tObj.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n var index = tObj.getSelectedRowIndexes()[0];\n var dropIndex = void 0;\n var parentItem = tObj.getSelectedRecords()[0].parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n tObj.reorderRows([index], dropIndex, 'below');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\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 * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\n item[field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[key] = this.getSummaryValues(summary.columns[i], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[key] = this.getSummaryValues(summary.columns[i], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[summaryColumn.columnName][summaryKey];\n var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\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 * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.addRecord();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][parentItem][uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[rowObjectIndex].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[this.addRowIndex][level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem])) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('aria-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('aria-rowindex');\n tr.setAttribute('aria-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex)) {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data = args.data;\n for (var i = 0; i < data.length; i++) {\n this.deleteUniqueID(data[i].uniqueID);\n var childs = findChildrenRecords(data[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = this.parent.grid.getCurrentViewRecords();\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('aria-rowindex'));\n ;\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction());\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || this.isDataSourceChanged) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (args.selectedIndex !== 0 || isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\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, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.ariaRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, 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 { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n this.parent.grid.clearSelection();\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var visualData = dm.executeLocal(new Query().where(expanded));\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex + 1]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","currentViewRecords","getCurrentViewRecords","extend","newRowPosition","unshift","primaryKeys","currentdata","addAction","Array","k","_loop_1","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","filter","e","p","removeChildRecords","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","enableImmutableMode","renderModule","cellRender","cell","cells","column","getColumns","requestType","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","rowDataBound","queryCellInfo","beforeDataBound","actionBegin","actionComplete","rowSelected","checkboxChange","rowDeselected","toolbarClick","beforeExcelExport","beforePdfExport","collapsed","remoteExpand","localPagedExpandCollapse","pagingActions","printGridInit","contextMenuOpen","contextMenuClick","crudAction","beginEdit","beginAdd","recordDoubleClick","cellSave","cellSaved","cellEdit","batchDelete","batchCancel","batchAdd","beforeBatchDelete","beforeBatchAdd","beforeBatchSave","batchSave","keyPressed","doubleTap","virtualActionArgs","dataListener","indexModifier","beforeStartEdit","beforeBatchCancel","detailDataBound","rowDragStartHelper","rowsAdd","rowsRemove","rowdraging","rowDropped","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","copyContent","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","events.checkboxChange","getCheckboxcolumnIndex","mappingUid","columnIndex","col","uid","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","events.printGridInit","printTreeGrid","printGrid","gridElement","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","RowModifier","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","templateFn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","portals","isReact","result","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","events.remoteExpand","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","getElementsByClassName","getRowObjectFromUID","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","getRowsObject","haveChild","events.actionComplete","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","events.expanded","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","sortArgs","temp","paging","printMode","actArgs","events.pagingActions","isCollapsedStatePersist","actualResults","dataResult","events.crudAction","events.batchSave","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","undefined","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","setProperties","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","cellIndex","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","renderComplete","destroyTemplateFn","clearTemplate","afterGridRender","clipboardModule","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","templateInstance","triggerEvents","bindGridEvents","rowSelecting","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","events.rowSelected","events.rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","callBackPromise","events.toolbarClick","toolbarargs","cellSelecting","cellselectingArgs","events.beginEdit","begineditArgs","isExpandRefresh","events.dataStateChange","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","events.cellSave","cellsaveArgs","events.cellSaved","promise","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","dataManager","events.actionBegin","updateTreeGridModel","events.beginAdd","ag","showChildSummary","refresh","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","rowDragStart","rowDrag","isEdit","events.rowdraging","rowDrop","events.rowDropped","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","closeEdit","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","currentObject","val","ignoreInArrays","addOnPersist","ignoreOnColumn","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","toolbarModule","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","goToPage","pageNo","pagerModule","updateExternalMessage","getCellFromIndex","getColumnByField","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","stackedHeader","getContent","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","getVisibleRecords","visibleRecords","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","collapseArgs","setHeightForFrozenContent","freeze","refreshScrollOffset","collapsingArgs","events.collapsed","firstElementChild","scrollHeight","scrollTop","getRowHeight","scrollBy","expandAtLevel","getRecordDetails","pindex","collapseAtLevel","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","localExpand","sHeight","clientHeight","events.localPagedExpandCollapse","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","primaryKeyField","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","rowDragAndDropModule","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","events.rowsAdd","rowsAdded","events.rowsRemove","rowsRemoved","tObj","dropPosition","dropIndex","dropRows","orderToIndex","dropData","totalRecord","parentrow","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","getToolbar","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","errorelem","border","box","getBoundingClientRect","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","left","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","selectedRecord","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","_loop_2","this_1","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","events.dataListener","getDatas","visualData","getDataInfo","getData","generateRows","info","virtualInfo","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","event.beforeExcelExport","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","indent","excelRow","excelrowobj","rowObj","filtercolumnlength","Boolean","rowlength","excelRows","rowlevel","expandedStatus","sublevelState","state","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","event.beforePdfExport","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","pageingDetails","propname","skip","size","pageSize","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","selectedRecords","mRows","deleterecords","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","totalRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","events.keyPressed","lastCellTab","contentready","editActionEvents","events.doubleTap","gridDblClick","customCellSave","savePreviousRowPosition","events.beforeStartEdit","events.beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","request","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","treecell","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","selector","beginAddEdit","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","events.virtualActionArgs","virtualOtherAction","events.indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","initialRowTop","gridTop","containerRect","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","event","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","serviceLocator","rowRenderer","RowRenderer","childRowObjects","childRowElements","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow"],"mappings":"shBAQA,SAAgBA,EAAaC,GACzB,GAAIA,EAAOC,sBAAsBC,cAAa,CAC1C,IAAIC,EAAUH,EAAOC,WAAWE,QAChC,OAAQA,aAAmBC,gBACtBD,aAAmBE,iBAAmBF,aAAmBG,oBACzDH,aAAmBI,gBAAiBJ,aAAmBK,aAEhE,OAAO,EAMX,SAAgBC,EAAgBT,GAC5B,SAAIA,EAAOC,YAAc,WAAYD,EAAOC,YAShD,SAAgBS,EAAiBV,GAC7B,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAOY,QAAQC,OAAQF,IACvC,GAAIX,EAAOY,QAAQD,GAAGG,aAClB,OAAO,EAGf,OAAO,EAMX,SAAgBC,EAAuBf,GACnC,SAAMgB,oBAAkBhB,EAAOiB,KAAKC,eAAeC,MAA2C,KAAnCnB,EAAOiB,KAAKC,eAAeC,KACzC,UAAxCnB,EAAOkB,eAAeE,eAAqE,SAAxCpB,EAAOkB,eAAeE,kBACzEpB,EAAOqB,iBAAkBrB,EAAOiB,KAAKK,eAAeV,QAAQC,QAChB,UAAxCb,EAAOsB,eAAeF,eAAqE,SAAxCpB,EAAOsB,eAAeF,gBAUtF,SAAgBG,EAAkBC,GAG9B,IAAK,IAFDC,KAEKd,EAAI,EAAGe,EADIC,OAAOC,KAAKJ,GAASX,OACJF,EAAIe,EAAKf,IAAK,CAChCkB,YAAU,kBAAmBL,EAAQb,KAEhDc,EAAMK,KAAKN,EAAQb,IAG3B,OAAOc,EASX,SAAgBM,EAAgB/B,EAAQgC,EAAQC,GAC5C,IAEIC,EAFAC,EAAenB,oBAAkBgB,EAAOI,YAAc,KACtDC,EAAcrC,EAAQgC,EAAOI,WAAWE,UAE5C,OAAoB,MAAhBH,KACInC,EAAOuC,eAAkBvB,oBAAkBmB,EAAanC,EAAOwC,sBAC3DL,EAAanC,EAAOwC,qBAIO,IAA1BL,EAAaM,YAGbN,EAAaC,cAClBF,EAAcG,EAAcrC,EAAQmC,EAAaC,WAAWE,YACzCtC,EAAOuC,gBAAkBvB,oBAAkBkB,EAAYlC,EAAOwC,uBACzEN,EAAYlC,EAAOwC,qBACvBN,EAAYO,UAAW,GAChB,KAEPP,IAAwC,IAAzBA,EAAYO,aAGtBP,GACEH,EAAgB/B,EAAQkC,EAAaD,OAjBhDE,EAAaM,UAAW,GACjB,IAiCnB,SAAgBC,EAAoBlB,GAChC,IAAIC,KACJ,GAAIT,oBAAkBQ,KAAcA,EAAQmB,kBAAoB3B,oBAAkBQ,EAAQoB,gBAClFpB,EAAQoB,aAAa/B,OACzB,SAEJ,IAAKG,oBAAkBQ,EAAQoB,cAE3B,IAAK,IADDA,EAAepB,EAAQoB,aAClBjC,EAAI,EAAGe,EAAMC,OAAOC,KAAKgB,GAAc/B,OAAQF,EAAIe,EAAKf,IAC7Dc,EAAMK,KAAKc,EAAajC,KACpBiC,EAAajC,GAAGgC,kBAAqB3B,oBAAkB4B,EAAajC,GAAGiC,eACvEA,EAAajC,GAAGiC,aAAa/B,UAC7BY,EAAQA,EAAMoB,OAAOH,EAAoBE,EAAajC,MAIlE,OAAOc,EAMX,SAAgBqB,EAAU9C,GACtB,GAAID,EAAaC,GAAS,CACtB,IAAI+C,EAAK/C,EAAOC,WAChB,OAAQe,oBAAkB+B,EAAGC,OAEjC,OAAO,EAMX,SAAgBC,EAAYC,GAIxB,IAAK,IAFDC,EACAvB,EAFAwB,KAGKzC,EAAI,EAAGuC,GAASvC,EAAIuC,EAAMrC,OAAQF,IAAK,CAC5CiB,EAAOD,OAAOC,KAAKsB,EAAMvC,IACzBwC,KACA,IAAK,IAAIE,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IAC7BF,EAAIvB,EAAKyB,IAAMH,EAAMvC,GAAGiB,EAAKyB,IAEjCD,EAAOtB,KAAKqB,GAEhB,OAAOC,EAMX,SAAgBE,EAAaC,GAQzB,cAPOA,EAAMZ,uBACNY,EAAMX,oBACNW,EAAMC,aACND,EAAMnB,kBACNmB,EAAME,aACNF,EAAMG,gBACNH,EAAMjB,SACNiB,EAQX,SAAgBlB,EAAcrC,EAAQuD,EAAOI,GACzC,GAAIA,EAAe,CAEf,OAAO3D,EAAe,yBAAEuD,GAIxB,OAAOvD,EAAS,mBAAEuD,GAO1B,SAAgBK,EAASC,GACrB,IAAIC,EAAQC,OAAOC,iBAAiBH,GACpC,MAA2B,SAAlBC,EAAMG,SAA6C,WAArBH,EAAMI,WCtLjD,SAAgBC,EAAWC,EAASC,EAASC,EAAiBC,EAAaC,EAAeC,EAAYC,GAClG,IAGI/D,EACA0C,EAEAsB,EANApB,EAAQa,EAAQb,MAChBqB,EAASR,EAAQQ,OAMjBzD,EAAMkD,EAAQpD,KAAK4D,0BAA0B,GAC7CC,EAAWT,EAAQpE,sBAAsBC,cACzCmE,EAAQpE,WAAWA,WAAW8E,KAAOV,EAAQpE,WAC7C+E,KACAC,EAAe1B,EACf2B,GAAS,EAIb,GAHkC,UAA9Bb,EAAQc,aAAaC,OACrBT,EAAeN,EAAQpD,KAAKoE,WAAWC,mBAE5B,QAAXV,GAAgC,cAAXA,GAAyD,UAA9BP,EAAQc,aAAaC,MAClET,EAAyB,aAAE9D,OAAU,CACxC,IAAI0E,EA0HZ,SAA0BnB,EAASU,EAAUT,EAASC,EAAiBC,EAAaC,EAAeE,GAC/F,IAAInB,EACA2B,GAAS,EACTM,EAAqBnB,EAAQpD,KAAKwE,wBAGtC,OAFAlC,EAAQmC,YAAWtB,EAAQb,OAC3BA,EAAQD,EAAaC,GACbc,EAAQc,aAAaQ,gBACzB,IAAK,MACDb,EAASc,QAAQrC,GACjB2B,GAAS,EACT,MACJ,IAAK,SACDJ,EAAShD,KAAKyB,GACd2B,GAAS,EACT,MACJ,IAAK,QAOG3B,EANCvC,oBAAkB0D,GAMXpB,EADRC,EAAQmC,YAAWF,EAAmBjB,EAAc,KAH5CjB,EADRC,EAAQmC,YAAWhB,IAOvB,MACJ,IAAK,QACL,IAAK,QACD,GAAK1D,oBAAkB0D,GAIlB,CACD,IAAImB,EAAcxB,EAAQpD,KAAK4D,0BAA0B,GACrDiB,EAAcN,EAAmBjB,GAOrChB,EAAQD,EALJC,GADCvC,oBAAkB8E,IAAgBA,EAAYD,KAAiBzB,EAAQb,MAAMsC,KAAmC,IAAnBrB,EACtFkB,YAAWI,GAGXJ,YAAWtB,EAAQb,QAI/Bc,EAAQgB,WAA2B,mBAAE3B,SAAWH,OAbhDA,EAAQD,EADRC,EAAQmC,YAAWhB,KAgBA,IAAnBF,IACAM,EAASc,QAAQrC,GACjB2B,GAAS,GAGrB,OAAS3B,MAAOA,EAAO2B,OAAQA,GA3Kda,CAAU3B,EAASU,EAAUT,EAASC,EAAiBC,EAAaC,EAAeE,GAChGnB,EAAQgC,EAAOhC,MACf2B,EAASK,EAAOL,OAQpB,GANI3B,aAAiByC,MACjBhB,EAAe/B,EAAYM,GAG3ByB,EAAalD,KAAK4D,YAAWnC,KAE5B2B,IAAsB,QAAXN,GAC6B,QAAxCP,EAAQc,aAAaQ,gBAAoE,WAAxCtB,EAAQc,aAAaQ,gBACvE,IAAK,IAAIM,EAAI,EAAGA,EAAIjB,EAAanE,OAAQoF,IAAK,CACJ,iBAA1BjB,EAAaiB,GAAG9E,KACxB6D,EAAaiB,GAAKjB,EAAaiB,GAAG9E,IAEtC,IAAIS,EAAOoD,EAAaiB,GAAGvC,SAAW/B,OAAOC,KAAKoD,EAAaiB,GAAGvC,UAC9D/B,OAAOC,KAAKoD,EAAaiB,IAC7BtF,EAAImE,EAASjE,OAkFb,IAjFA,IAAIqF,EAAU,WACV,GAAIpB,EAASnE,GAAGQ,KAAS6D,EAAaiB,GAAG9E,GAAM,CAC3C,GAAe,WAAXyD,EAwBC,CACD,GAAe,SAAXA,GACA,IAAKvB,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IACzB,GAAI1B,OAAOwE,UAAUC,eAAeC,KAAKvB,EAASnE,GAAIiB,EAAKyB,MAAuC,SAA9BgB,EAAQc,aAAaC,OAChFpE,oBAAkB2D,IAAyD,IAAxCA,EAA2B,eAAE9D,QAClEe,EAAKyB,KAAOoB,GAAa,CAC5B,IAAI6B,EAAajE,EAAcgC,EAASW,EAAaiB,GAAG3D,UACxDwC,EAASnE,GAAGiB,EAAKyB,IAAM2B,EAAaiB,GAAGrE,EAAKyB,IACxCiD,GAAcA,EAAW5C,WACzB4C,EAAW5C,SAAS9B,EAAKyB,IAAMiD,EAAW1E,EAAKyB,IAAMyB,EAASnE,GAAGiB,EAAKyB,WAKjF,GAAe,QAAXuB,GAA+B,cAAXA,EAAwB,CACjD,IAAIpB,OAAQ,EACgC,UAAxCa,EAAQc,aAAaQ,eACjBrB,GACAW,EAAavB,SAASW,EAAQkC,iBAAmBzB,EAASnE,GAAG0D,EAAQmC,WACrE1B,EAAS2B,OAAO9F,EAAI,EAAG,EAAGsE,EAAavB,YAGlC/B,OAAOwE,UAAUC,eAAeC,KAAKvB,EAASnE,GAAI0D,EAAQqC,gBAC3D5B,EAASnE,GAAG0D,EAAQqC,kBAExB5B,EAASnE,GAAG0D,EAAQqC,cAAc5E,KAAKmD,EAAavB,UACpDiD,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,EAAiBW,IAG3B,UAAxCZ,EAAQc,aAAaQ,gBAC1Bb,EAAS2B,OAAO9F,EAAI,EAAG,EAAGsE,EAAavB,UAClC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAK2D,EAASnE,EAAI,GAAIiE,EAAQP,EAASC,EAAiBW,IAGtEV,EAIuC,UAAxCF,EAAQc,aAAaQ,iBAC1Bb,EAAS2B,OAAO9F,EAAG,EAAGsE,EAAavB,UAC9B1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,EAAiBW,KANxEzB,EAAQ,EACRsB,EAAS2B,OAAOjD,EAAO,EAAGyB,EAAavB,WAS/C,MAAO,QArEP,IAAIkD,EAAgB9B,EAASnE,GAE7B,GADAmE,EAAS2B,OAAO9F,EAAG,GACf2D,EAAiB,CACjB,IAAKtD,oBAAkB4F,EAAcvC,EAAQkC,kBAKzC,IAAK,IAJDM,EAAaxC,EAAQyC,SAASC,OAAO,SAAUC,GAC/C,OAAOA,EAAE3C,EAAQmC,aAAeI,EAAcvC,EAAQkC,mBACvD,GACC3D,EAAeiE,EAAaA,EAAWxC,EAAQqC,iBAC1CO,EAAIrE,EAAa/B,OAAS,EAAGoG,GAAK,EAAGA,IAC1C,GAAIrE,EAAaqE,GAAG5C,EAAQmC,aAAeI,EAAcvC,EAAQmC,WAAY,CACzEK,EAAyB,aAAEJ,OAAOQ,EAAG,GACrCrE,EAAa6D,OAAOQ,EAAG,GAClBrE,EAAa/B,SACdgG,EAAWlE,iBAAkB,EAC7BgE,EAAgBxF,EAAK0F,EAAYjC,EAAQP,EAASC,IAEtD,MAIZ,MAAO,cAoDTtD,oBAAkB8D,EAASnE,GAAG0D,EAAQqC,gBACxCQ,EAAmBpC,EAASnE,GAAG0D,EAAQqC,cAAe1B,EAAaiB,GAAIrB,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,IAC5HkC,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,IAIxD3D,KAAOA,GAAK,GAAG,CAElB,GAAgB,UADFuF,IAEV,QAiFpB,SAAgBgB,EAAmBtE,EAAcoC,EAAcJ,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,GAGhH,IAFA,IAAI0C,GAAa,EACb9D,EAAIT,EAAa/B,OACdwC,KAAOA,GAAK,GACf,GAAIT,EAAaS,GAAGlC,KAAS6D,EAAa7D,IACrCmD,GAAmB1B,EAAaS,GAAGgB,EAAQkC,mBAAqBvB,EAAaX,EAAQmC,WAAa,CACnG,GAAe,SAAX5B,EAAmB,CAGnB,IAAK,IAFDhD,EAAOD,OAAOC,KAAKoD,GACnBsB,EAAajE,EAAcgC,EAASW,EAAa1C,UAC5C3B,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAC7B,GAAIgB,OAAOwE,UAAUC,eAAeC,KAAKzD,EAAaS,GAAIzB,EAAKjB,MAAsC,SAA9B0D,EAAQc,aAAaC,MAAmBxD,EAAKjB,KAAO8D,KACvH6B,EAAW1E,EAAKjB,IAAM2F,EAAW5C,SAAS9B,EAAKjB,IAAMiC,EAAaS,GAAGzB,EAAKjB,IAAMqE,EAAapD,EAAKjB,IAC3D,WAAnC0D,EAAQpD,KAAKkE,aAAaC,MAAmD,SAA9Bf,EAAQc,aAAaC,MAAiB,CAErFf,EAAQpD,KAAKoE,WAAqB,WAAE+B,aAAepC,EAAaxB,MAChEa,EAAQpD,KAAKoE,WAAqB,WAAEgC,sBAAsBrC,GAItE,MAEgB,QAAXJ,GAA+B,cAAXA,EACmB,UAAxCP,EAAQc,aAAaQ,eACjBrB,GACAW,EAAaZ,EAAQkC,iBAAmB3D,EAAaS,GAAGgB,EAAQmC,WAChE5D,EAAa6D,OAAOpD,EAAI,EAAG,EAAG4B,GAC9B0B,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,KAGnEtD,OAAOwE,UAAUC,eAAeC,KAAKzD,EAAaS,GAAIgB,EAAQqC,gBAC/D9D,EAAaS,GAAGgB,EAAQqC,kBAE5B9D,EAAaS,GAAGgB,EAAQqC,cAAc5E,KAAKmD,EAAavB,UACxDiD,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,IAG/B,UAAxCZ,EAAQc,aAAaQ,gBAC1B/C,EAAa6D,OAAOpD,EAAG,EAAG4B,EAAavB,UAClC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,IAG/B,UAAxCZ,EAAQc,aAAaQ,iBAC1B/C,EAAa6D,OAAOpD,EAAI,EAAG,EAAG4B,EAAavB,UACtC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,KAKhFrC,EAAa6D,OAAOpD,EAAG,GAClBT,EAAa/B,SACdsG,GAAa,SAIfnG,oBAAkB4B,EAAaS,GAAGgB,EAAQqC,gBAC5CQ,EAAmBtE,EAAaS,GAAGgB,EAAQqC,cAAe1B,EAAcJ,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,IAC7HkC,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,GAInE,OAAO6C,EAWX,SAAgBR,EAAgBxF,EAAKa,EAAQ4C,EAAQP,EAASC,EAAiBgD,GAC3E,GAA6C,UAAxCjD,EAAQc,aAAaQ,gBAAsE,UAAxCtB,EAAQc,aAAaQ,gBACzD,QAAXf,GAA+B,cAAXA,GAA6B5D,oBAAkBsG,EAAMlF,YAI7E,CACD,IACImF,EADAC,EAAiBnD,EAAQpD,KAAKwE,wBAkBlC,GAhBA+B,EAAeC,IAAI,SAAUT,EAAGrG,GAASqG,EAAE7F,KAASa,EAAOb,KACvDoG,EAAU5G,KAGTK,oBAAkBuG,KACnBvF,EAASwF,EAAeD,IAExBlD,EAAQqD,sBAAwB1G,oBAAkBgB,KAAYhB,oBAAkBsG,KAChFtF,EAAS2F,WAAS,sBAAwBL,EAAMM,eAAgBvD,IAE/DC,GAAoBtD,oBAAkBgB,EAAOY,gBAAiBZ,EAAOY,aAAa/B,OAInFmB,EAAOW,iBAAkB,EAHzBX,EAAOW,iBAAkB,EAKd,QAAXiC,GAA+B,cAAXA,EAAwB,CAC5C5C,EAAOS,UAAW,EAClBT,EAAOW,iBAAkB,EACrB0B,EAAQwD,aAAajH,QAAQC,QAAUG,oBAAkBsG,KACzDA,EAAQE,EAAeT,OAAO,SAAUC,GACpC,OAAIA,EAAEY,iBAAmB5F,EAAOM,SACrB0E,EAGA,QAInB,IAAIpE,EAAe0E,EAAQA,aAAiBtB,MAAQsB,EAAM,GAAKA,EAAQE,EAAeD,EAAU,GACpD,UAAxClD,EAAQc,aAAaQ,iBAChBhE,OAAOwE,UAAUC,eAAeC,KAAKrE,EAAQ,gBAIzChB,oBAAkBsG,IAAUtF,EAAOb,KAASmG,EAAMnG,IACnDa,EAAOY,aAAad,KAAKwF,GAJ7BtF,EAAOY,iBAOwC,IAA/CZ,EAAOY,aAAakF,QAAQlF,IAAwBZ,EAAOb,KAASmG,EAAMnG,IAC1Ea,EAAOY,aAAagD,QAAQhD,GAE5B0B,IACK3C,OAAOwE,UAAUC,eAAeC,KAAKrE,EAAQqC,EAAQqC,gBACtD1E,EAAOqC,EAAQqC,mBAEyC,IAAxD1E,EAAOqC,EAAQqC,cAAcoB,QAAQlF,IAAwBZ,EAAOb,KAASmG,EAAMnG,IACnFa,EAAOqC,EAAQqC,cAAcd,QAAQhD,KAQrD,IAAK,IAHDiD,EAAcxB,EAAQpD,KAAK4D,0BAA0B,GACrDkD,EAAO1D,EAAQpD,KAAKhB,sBAAsBC,cAC1CmE,EAAQpD,KAAKhB,WAAWA,WAAW8E,KAAOV,EAAQpD,KAAKhB,WAClDU,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAC7B,GAAIoH,EAAKpH,GAAGkF,KAAiB7D,EAAO6D,GAAc,CAC9CkC,EAAKpH,GAAKqB,EACV,MAGRqC,EAAQpD,KAAK+G,WAAW7G,EAAKa,GAC7B,IAAIiG,EAAM5D,EAAQ6D,cAAcX,GACE,UAA9BlD,EAAQc,aAAaC,OACrB6C,EAAM5D,EAAQ8D,UAAU9D,EAAQpD,KAAKmH,wBAAwBpG,EAAOb,MAExE,IAAIkH,OAAa,EAIjB,IAHIhE,EAAQiE,YAAcjE,EAAQkE,sBAC9BF,EAAahE,EAAQmE,qBAAqBjB,KAEzClD,EAAQqD,uBAAyB1G,oBAAkBiH,KAASjH,oBAAkBqH,GAAa,CAC5F,IAAII,EAAUpE,EAAQqE,gBAClBrE,EAAQsE,qBAAuBtE,EAAQuE,sBACvCH,GAAoB,GAExBpE,EAAQwE,aAAaC,YACjBf,KAAM/F,EAAQ+G,KAAMd,EAAIe,MAAMP,GAAWR,EAAIe,MAAMP,GAC7CJ,EAAWW,MAAMP,EAAUpE,EAAQkE,oBACzCU,OAAQ5E,EAAQpD,KAAKiI,aAAa7E,EAAQqE,iBAC1CS,YAAavE,SAtFsE,CAC1EvC,EAAcgC,EAASiD,EAAMlF,WAAWE,UAC9CM,aAAad,KAAKwF,ICrSrC,IAAI8B,EAAwB,WAqExB,OApEA,SAAgBC,GAOZC,KAAKC,cAAe,EAMpBD,KAAKE,QAMLF,KAAKG,mBAAoB,EAOzBH,KAAKI,iBAAkB,EAOvBJ,KAAKK,gBAAiB,EAOtBL,KAAKjI,gBAAiB,EAOtBiI,KAAKM,cAAe,EAOpBN,KAAKO,eAAgB,EAWrBP,KAAKvC,UACL+C,QAAMR,KAAMD,OCvEhBU,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,EAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5DK,EAA2B,SAAUC,GAErC,SAASD,IACL,OAAkB,OAAXC,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAsC/D,OAxCAS,EAAUoB,EAAWC,GAIrBZ,GACIc,cACDH,EAAUhF,UAAW,aAAS,GACjCqE,GACIc,cACDH,EAAUhF,UAAW,gBAAY,GACpCqE,GACIc,cACDH,EAAUhF,UAAW,aAAS,GACjCqE,GACIc,cACDH,EAAUhF,UAAW,iBAAa,GACrCqE,GACIc,cACDH,EAAUhF,UAAW,oBAAgB,GACxCqE,GACIc,cACDH,EAAUhF,UAAW,iBAAa,GACrCqE,GACIc,gBACDH,EAAUhF,UAAW,yBAAqB,GAC7CqE,GACIc,gBACDH,EAAUhF,UAAW,sBAAkB,GAC1CqE,GACIc,cACDH,EAAUhF,UAAW,YAAQ,GAChCqE,GACIc,cACDH,EAAUhF,UAAW,mBAAe,GACvCqE,GACIc,cACDH,EAAUhF,UAAW,WAAO,GAC/BqE,GACIc,cACDH,EAAUhF,UAAW,oBAAgB,GACjCgF,GACTI,iBAKEC,EAAgC,SAAUJ,GAE1C,SAASI,IACL,OAAkB,OAAXJ,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KA0B/D,OA5BAS,EAAUyB,EAAgBJ,GAI1BZ,GACIiB,gBAAeN,IAChBK,EAAerF,UAAW,eAAW,GACxCqE,GACIc,WAAS,cACVE,EAAerF,UAAW,YAAQ,GACrCqE,GACIc,cACDE,EAAerF,UAAW,YAAQ,GACrCqE,GACIc,YAAS,IACVE,EAAerF,UAAW,2BAAuB,GACpDqE,GACIc,WAAS,OACVE,EAAerF,UAAW,0BAAsB,GACnDqE,GACIc,cACDE,EAAerF,UAAW,iBAAa,GAC1CqE,GACIc,YAAS,IACVE,EAAerF,UAAW,oBAAgB,GAC7CqE,GACIc,WAAS,WACVE,EAAerF,UAAW,qBAAiB,GACvCqF,GACTD,iBCpGExB,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,EAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5DY,EAAkC,SAAUN,GAE5C,SAASM,IACL,OAAkB,OAAXN,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAK/D,OAPAS,EAAU2B,EAAkBN,GAI5BZ,GACIc,WAAS,SACVI,EAAiBvF,UAAW,gBAAY,GACpCuF,GACTH,iBChCExB,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAoBxCsB,EAAU,oDACVC,EAAe,2CAMfC,GAAiB,EACjBC,EAAwB,SAAUV,GAElC,SAASU,EAAO9L,GAIZ,OAFA+L,OAAKC,OAAOC,UACJb,EAAO/E,KAAKiD,KAAMtJ,IAAWsJ,KAgFzC,OApFAS,EAAU+B,EAAQV,GAalBU,EAAO3F,UAAU+F,cAAgB,WAC7B,MAAO,UAEXJ,EAAO3F,UAAUgG,IAAM,SAAUC,EAAOC,GAC9BD,aAAiBpG,QACnBoG,GAASA,IAGb,IAAK,IADDE,EAAOF,EACFzL,EAAI,EAAGA,EAAI2L,EAAKzL,OAAQF,IAAK,CAClC,IAAI4L,EAAOC,cAAYF,EAAK3L,IACxB8L,EAAMF,EAAKG,MAAML,EAAM/C,KAAKtJ,QAChC,GAAIyM,EAAIE,QAAS,CACb,IAAIC,EAAUL,EAAKM,gBAAgBR,EAAM/C,KAAKtJ,OAAQyM,EAAIpD,SAC1DuD,EAAUA,EAAQE,QAAQ,UAAW,eAAeA,QAAQ,mBAAoB,IAAIA,QAAQ,aAAc,IACtGjB,GAA8B,2BAAZS,EAAK3L,KACvBiM,EAAUA,EAAQE,QAAQ,UAAW,mBACrCjB,GAAiB,GAErB,IAAIrI,EAAQoJ,EAAQ9E,QAAQ,SACxBiF,EAAUH,EAAQI,UAAUxJ,GAChB,mBAAZ8I,EAAK3L,GACLiM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,2BAAZW,EAAK3L,IAA+C,0BAAZ2L,EAAK3L,GAClDiM,EAAUA,EAAQE,QAAQC,EAASnB,EAAe,sCAEjC,qBAAZU,EAAK3L,GACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,SAE5B,mBAAZW,EAAK3L,GACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,6BAAZW,EAAK3L,GACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,mBAAZW,EAAK3L,KACViM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,gCAEjC,+BAAZW,EAAK3L,GACAK,oBAAkBsI,KAAK2D,cAAiBjM,oBAAkBsI,KAAK2D,YAAYC,kBAE5EC,QAAQZ,EAAKa,SAASR,GAK1BO,QAAQZ,EAAKa,SAASR,MAKtCd,EAAO3F,UAAUkH,QAAU,SAAUjB,EAAOC,EAAMiB,GAC9ChE,KAAK2D,YAAcK,EACblB,aAAiBpG,QACnBoG,GAASA,IAEb,IAAIE,EAAOF,EACPkB,EAAS3E,sBAAwB2E,EAAS1M,QAAQmG,OAAO,SAAUkC,GAAU,OAAOA,EAAOsE,eAAiB1M,SAC5GgL,GAAiB,EACjBvC,KAAK6C,IAAI,yBAA0BE,IAEvC,IAAK,IAAI1L,EAAI,EAAGA,EAAI2L,EAAKzL,OAAQF,IAAK,CAClC,IAAI4L,EAAOiB,EAAgBlB,EAAK3L,IAC5B8L,EAAMF,EAAKG,MAAML,EAAMiB,GAC3B,GAAIb,EAAIE,QAAS,CACb,IAAIC,EAAUL,EAAKM,gBAAgBR,EAAMiB,EAAUb,EAAIpD,SAEvD8D,QAAQZ,EAAKa,SAASR,MAI3Bd,GACTG,UAESuB,GAEPC,wBACInB,KAAM,yBACNc,QAAS,QACTV,MAAO,SAAUL,EAAMrM,GACnB,IAAI0N,GAAQf,SAAS,GAOrB,OANK3L,oBAAkBhB,EAAOwG,YAAcxF,oBAAkBhB,EAAO0G,eAC9D1F,oBAAkBhB,EAAOuG,mBAC1BvF,oBAAkBhB,EAAOwG,YAAcxF,oBAAkBhB,EAAOuG,kBACjEvF,oBAAkBhB,EAAOwG,aAAexF,oBAAkBhB,EAAOuG,oBAClEmH,GAAQf,SAAS,IAEde,GAEXb,gBAAiB,WACb,MAAOc,iRAIF/B,EAAe,+BACfA,EAAe,4BACfA,EAAe,oCCrIrBgC,EAAe,eAIfC,EAAgB,gBAEhBC,EAAkB,kBAElBC,EAAc,cAEdb,EAAkB,kBAElBc,EAAiB,iBAIjBC,EAAc,cAEdC,EAAiB,iBAEjBC,EAAgB,gBAEhBC,EAAe,eAEfC,EAAoB,oBAEpBC,EAAkB,kBAIlB7L,EAAW,WAIX8L,EAAY,YAIZC,EAAe,eAEfC,EAA2B,2BAE3BC,EAAgB,gBAEhBC,EAAgB,iBAEhBC,EAAkB,kBAElBC,GAAmB,mBAQnBC,GAAa,aAEbC,GAAY,YAEZC,GAAW,WAEXC,GAAoB,oBAEpBC,GAAW,WAEXC,GAAY,YAEZC,GAAW,WAEXC,GAAc,cAEdC,GAAc,cAEdC,GAAW,WAEXC,GAAoB,oBAEpBC,GAAiB,iBAEjBC,GAAkB,kBAElBC,GAAY,YAEZC,GAAa,cAIbC,GAAY,aAIZC,GAAoB,sBAIpBC,GAAe,gBAEfC,GAAgB,iBAEhBC,GAAkB,YAElBC,GAAoB,sBAIpBC,GAAkB,kBAIlBC,GAAqB,qBAMrBC,GAAU,WAEVC,GAAa,cAEbC,GAAa,cAEbC,GAAa,cC/HpBzG,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAqBxCoG,GAA+B,SAAUrF,GAEzC,SAASqF,EAAczQ,GACnB,IAAI0Q,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,EAAOiB,OAASqI,KAI9C,OAHAoH,EAAMC,gBAAkB,GACxBD,EAAME,4BACNF,EAAMG,eAAiB7Q,EAChB0Q,EAwJX,OA9JA3G,GAAU0G,EAAerF,GAQzBqF,EAActK,UAAU2K,YAAc,SAAUC,GAC5C,IAAIC,EAAc,cAIdxJ,EAAiB8B,KAAKuH,eAAepL,wBACzC,GAAyC,KAArC1B,OAAOkN,eAAeC,WAAmB,CACzC5H,KAAK6H,kBAAkB5N,MAAQ+F,KAAK0H,GAAe,GACnD,IAAII,EAAO9H,KAAKuH,eAAe5P,KAAKkH,UACpC,GAAmD,SAA/CmB,KAAKuH,eAAeQ,kBAAkBjM,KAAiB,CAIvD,IAAK,IAHDkM,EAAkBhI,KAAKuH,eAAeU,wBAAwBC,KAAK,SAAUC,EAAGvH,GAChF,OAAOuH,EAAIvH,IAENvJ,EAAI,EAAGA,EAAI2Q,EAAgBzQ,OAAQF,IAIxC,GAHIA,EAAI,IACJ2I,KAAKqH,iBAAmB,OAEvBS,EAAKE,EAAgB3Q,IAAI+Q,UAAUC,SAAS,gBAAiB,CAC9D,IAAI3I,KAAW4I,MAAMvL,KAAK+K,EAAKE,EAAgB3Q,IAAIkR,iBAAiB,eAChEC,EAAWxI,KAAKuH,eAAekB,qBAAqBpR,GAAW,UACV,IAArD2I,KAAKsH,yBAAyB9I,QAAQgK,KACQ,WAA1CxI,KAAKuH,eAAemB,mBAA4E,SAA1C1I,KAAKuH,eAAemB,mBAC1E1I,KAAK2I,kBAAkBzK,EAAgB8J,EAAgB3Q,GAAIyQ,EAAML,EAAYpQ,GAEjF2I,KAAgB,YAAEN,GAAO,EAAO,KAAM+H,GACtCzH,KAAKqH,iBAAmBrH,KAAK0H,GAC7B1H,KAAKsH,yBAAyB9O,KAAKgQ,GACnCxI,KAAK0H,GAAe,GAC0B,UAA1C1H,KAAKuH,eAAemB,mBAA2E,SAA1C1I,KAAKuH,eAAemB,mBACzE1I,KAAK4I,iBAAiB1K,EAAgB8J,EAAgB3Q,GAAIyQ,EAAML,IAKhF,GAAIA,EAAY,CAEP,IADDoB,KACJ,IAASxR,EAAI,EAAGA,EAAI2I,KAAKuH,eAAeuB,oBAAoBvR,OAAQF,IAChEwR,EAAgBxR,GAAK2I,KAAKuH,eAAeuB,oBAAoBzR,GAAG0R,WAEpE/I,KAAgB,YAAE6I,GAAiB,EAAO,KAAMpB,GAChDzH,KAAKqH,gBAAkBrH,KAAK0H,GAAe,KAAO1H,KAAKqH,gBAE3D,IAAItE,GACAtE,KAAMuB,KAAKqH,gBACX2B,QAAQ,GAGZ,GADAhJ,KAAKuH,eAAe0B,QDrBZ,aCqBuClG,GAC3CA,EAAKiG,OACL,OAEJhJ,KAAK6H,kBAAkB5N,MAAQ+F,KAAK0H,GAAe3E,EAAKtE,KACnDyK,UAAQC,UAAUC,MAAM,qBAIzBpJ,KAAK6H,kBAAkBwB,kBAAkB,EAAGrJ,KAAK6H,kBAAkB5N,MAAM1C,QAHzEyI,KAAK6H,kBAAkByB,SAK3BtJ,KAAa,UAAI,EACjBA,KAAKsH,4BACLtH,KAAKqH,gBAAkB,QAGvBvF,EAAOjF,UAAU2K,YAAYzK,KAAKiD,KAAMyH,KAIpDN,EAActK,UAAU8L,kBAAoB,SAAUzK,EAAgBhD,EAAe4M,EAAML,EAAYvN,GACnG,IACIwN,EAAc,cACd5O,EAAa,aACbE,EAAW,WAEf,IAAKtB,oBAAkBwG,EAAehD,GAAepC,IAEjD,IAAK,IADDyQ,EAAYrL,EAAehD,GAAepC,GAAiB,MACtDzB,EAAI,EAAGA,EAAIkS,EAAY,EAAGlS,IAC/B,IAAK,IAAI0C,EAAI,EAAGA,EAAImE,EAAe3G,OAAQwC,IACvC,IAAKrC,oBAAkBwG,EAAehD,GAAepC,KACjDoF,EAAenE,GAAGf,KAAckF,EAAehD,GAAepC,GAAYE,GAAW,CACrFkC,EAAgBnB,EAChB,IAAI2F,KAAW4I,MAAMvL,KAAK+K,EAAK5M,GAAeqN,iBAAiB,eAC3DC,EAAWtK,EAAenE,GAAGf,GACjC,IAAyD,IAArDgH,KAAKsH,yBAAyB9I,QAAQgK,GAAkB,CACxDxI,KAAgB,YAAEN,GAAO,EAAO,KAAM+H,GAElCzH,KAAKqH,gBADLnN,EAAQ,EACe8F,KAAKqH,gBAAkBrH,KAAK0H,GAAe,KAG3C1H,KAAK0H,GAAe,KAAO1H,KAAKqH,gBAE3DrH,KAAKsH,yBAAyB9O,KAAKgQ,GACnCxI,KAAK0H,GAAe,GACpB,SAOxBP,EAActK,UAAU2M,KAAO,SAAU/B,GACrC3F,EAAOjF,UAAU2M,KAAKzM,KAAKiD,KAAMyH,IAErCN,EAActK,UAAU4M,MAAQ,SAAUhL,EAAMiL,EAAUC,GACtD7H,EAAOjF,UAAU4M,MAAM1M,KAAKiD,KAAMvB,EAAMiL,EAAUC,IAQtDxC,EAActK,UAAU+F,cAAgB,WACpC,MAAO,aAQXuE,EAActK,UAAU+M,QAAU,WAC9B9H,EAAOjF,UAAU+M,QAAQ7M,KAAKiD,OAElCmH,EAActK,UAAU+L,iBAAmB,SAAU1K,EAAgBhD,EAAe4M,EAAML,GACtF,IAIIzO,EAAW,WACf,GAAIkF,EAAehD,GAA8B,gBAE7C,IAAK,IADD2O,EAAY3L,EAAehD,GAA2B,aACjD7D,EAAI,EAAGA,EAAIwS,EAAUtS,OAAQF,IAClC,IAAK,IAAI0C,EAAI,EAAGA,EAAImE,EAAe3G,OAAQwC,IACvC,IAAKrC,oBAAkBmS,EAAUxS,GAAG2B,KAAckF,EAAenE,GAAGf,KAAc6Q,EAAUxS,GAAG2B,GAAW,CACtG,IAAMtB,oBAAkBoQ,EAAK/N,MAAS+N,EAAK/N,GAAGqO,UAAUC,SAAS,gBAAiB,CAC9E,IAAI3I,KAAW4I,MAAMvL,KAAK+K,EAAK/N,GAAGwO,iBAAiB,eAC/CC,EAAWtK,EAAenE,GAAGf,IACwB,IAArDgH,KAAKsH,yBAAyB9I,QAAQgK,KACtCxI,KAAgB,YAAEN,GAAO,EAAO,KAAM+H,GACtCzH,KAAKqH,iBAAoB,KAAOrH,KAAgB,YAChDA,KAAgB,YAAI,GACpBA,KAAKsH,yBAAyB9O,KAAKgQ,GACnCxI,KAAK4I,iBAAiB1K,EAAgBnE,EAAG+N,EAAML,IAGvD,QAMbN,GACT2C,aC3KEC,GAA2B,WAM3B,SAASA,EAAUrT,GACfsJ,KAAKtJ,OAASA,EACdsJ,KAAKgK,iBACLhK,KAAKgI,mBACLhI,KAAKiK,gBACLjK,KAAKkK,mBAocT,OA5bAH,EAAUlN,UAAU+F,cAAgB,WAChC,MAAO,aAEXmH,EAAUlN,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAKoK,eAAgBpK,MACpDA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKqK,eAAgBrK,MACtDA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKsK,kBAAmBtK,MAC5DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,mBAAoBnK,KAAKoK,eAAgBpK,MAC7DA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKuK,kBAAmBvK,OAEhE+J,EAAUlN,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAKoK,gBACrCpK,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKqK,gBACvCrK,KAAKtJ,OAAOiB,KAAK+S,IAAI,mBAAoB1K,KAAKoK,gBAC9CpK,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKuK,mBAC1CvK,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKsK,qBAQ9CP,EAAUlN,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAETT,EAAUlN,UAAU0N,kBAAoB,SAAUxH,GAC9C,IAEI4H,EAFAvJ,EAAS7I,YAAU,SAAUwK,GAC7B6H,EAAYC,eAAazJ,EAAQ,sBAErC,GAAIwJ,GAAaA,EAAUrC,iBAAiB,sBAAsBhR,OAAS,EAAG,CAC1EoT,EAAWC,EAAUE,cAAc,0BACnC,IAAIpB,KACJA,EAASlR,KAAK4I,EAAO2J,QAAQ,MAAMrB,UACnC1J,KAAKgL,iBAAiBtB,GACtB1J,KAAKiL,sBAAsBN,EAAUA,EAASO,mBAAmB9C,UAAUC,SAAS,WAAYjH,EAAO2J,QAAQ,YAE9G,GAAIH,GAAaA,EAAUrC,iBAAiB,oBAAoBhR,OAAS,GAAKyI,KAAKtJ,OAAOyU,mBAAoB,CAC/G,IAAIC,GAAiBR,EAAUE,cAAc,YAAY1C,UAAUC,SAAS,aACpEuC,EAAUE,cAAc,YAAY1C,UAAUC,SAAS,UAC/DrI,KAAKqL,gBAAgBD,GACrBT,EAAWC,EAAUE,cAAc,0BACnC9K,KAAKiL,sBAAsBN,EAAUS,EAAehK,EAAO2J,QAAQ,SAG3EhB,EAAUlN,UAAUoO,sBAAwB,SAAUN,EAAUW,EAAYC,GACxE,IAAI9M,EAAOuB,KAAKtJ,OAAOyF,wBAAwBoP,EAAW7B,UACtD3G,GAASyI,QAASF,EAAYlK,OAAQuJ,EAAUY,WAAYA,EAC5DE,QAASd,EAASvC,UAAUC,SAAS,mBAC/BrI,KAAKtJ,OAAOgV,oBAAsBjN,GAC5CuB,KAAKtJ,OAAOuS,QAAQ0C,EAAuB5I,IAE/CgH,EAAUlN,UAAU+O,uBAAyB,WAIzC,IAAK,IAHDC,EACAC,EACAxU,EAAW0I,KAAKtJ,OAAc,QACzBqV,EAAM,EAAGA,EAAMzU,EAAQC,OAAQwU,IAChCzU,EAAQyU,GAAKvU,eACbqU,EAAa7L,KAAKtJ,OAAOY,QAAQyU,GAAKC,KAI9C,IAAK,IADDC,EAAmBjM,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBhR,OAClFwC,EAAI,EAAGA,EAAIkS,EAAkBlS,IAAK,CACtBiG,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBxO,GACtEoS,aAAa,kBAAoBN,IAC5CC,EAAc/R,GAGtB,OAAO+R,GAEX/B,EAAUlN,UAAUuN,eAAiB,WAEjC,GADApK,KAAK8L,YAAc9L,KAAK4L,yBACpB5L,KAAK8L,aAAe,GAAoF,IAA/E9L,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBhR,OAAc,CAC3G,IAAI6U,EAAgBpM,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBvI,KAAK8L,aAEzFO,EAAYrM,KAAKtJ,OAAO4V,cAAc,SAAWC,UAAW,kBAAmBC,OAASxJ,KAAQ,eAChG4H,EAAY6B,iBAAezM,KAAKtJ,OAAO4V,eAAe,GAASd,SAFvD,EAEuEkB,MAAO,OAChFtE,UAAUuE,IAAI,uBACxB/B,EAAUgC,aAAaP,EAAUQ,YAAajC,EAAUkC,YACnDpV,oBAAkB0U,IACnBA,EAAcQ,aAAahC,EAAWwB,EAAcU,YAEpD9M,KAAKtJ,OAAOyU,oBACZnL,KAAKqL,uBAGR,GAAIrL,KAAK8L,aAAe,GAAK9L,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,oBAAoBhR,OAAS,EAAG,CAC9G,IAAIqT,EACAQ,GADAR,EAAY5K,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,uBAAuB,IACzDuC,cAAc,YAAY1C,UAAUC,SAAS,WACvErI,KAAKtJ,OAAOyU,oBAAsBC,GAClCpL,KAAKqL,gBAAgBD,KAIjCrB,EAAUlN,UAAUkQ,qBAAuB,SAAUhK,GACjD,IAAIsJ,EAAYrM,KAAKtJ,OAAO4V,cAAc,SAAWC,UAAW,oBAAqBC,OAASxJ,KAAQ,cAClGvE,EAAOsE,EAAKtE,KAChBsE,EAAKtD,KAAK2I,UAAUuE,IAAI,sBACxB5J,EAAKtD,KAAKuN,aAAa,aAAc,YACrC,IAAI/S,GAASvC,oBAAkB+G,EAAKwO,gBAAyC,YAAvBxO,EAAKwO,cACvDrC,EAAY6B,iBAAezM,KAAKtJ,OAAO4V,eAAe,GAASd,QAASvR,EAAOyS,MAAO,MAK1F,GAJA9B,EAAUxC,UAAUuE,IAAI,uBACpB3M,KAAKtJ,OAAOwW,gBACZtC,EAAUE,cAAc,YAAYtQ,MAAM2S,MAAQ,QAE3B,kBAAvB1O,EAAKwO,cAAmC,CACxC,IAAIG,EAAWxC,EAAUrC,iBAAiB,YAAY,GACtD8E,eAAaD,IAAY,UAAW,SAAU,cAC9CxC,EAAUE,cAAc,YAAY1C,UAAUuE,IAAI,UAGtD,OADA/B,EAAUgC,aAAaP,EAAUQ,YAAajC,EAAUkC,YACjDlC,GAEXb,EAAUlN,UAAUwN,eAAiB,SAAUiD,GAC3C,IAAI1C,EAAY5K,KAAK+M,qBAAqBO,GACtCC,EAAeD,EAAU7N,KAAKqL,cAAc,2BAChD,GAAKpT,oBAAkB6V,GAKlB,CACD,IAAIC,EAAUxN,KAAKtJ,OAAO4V,cAAc,QAAUC,UAAW,mBACzD9N,EAAO6O,EAAU7N,KAAKgO,UAC1BH,EAAU7N,KAAKgO,UAAY,GAC3BD,EAAQC,UAAYhP,EACpB,IAAIiP,EAAS1N,KAAKtJ,OAAO4V,cAAc,OAASC,UAAW,6BAC3DmB,EAAOC,YAAY/C,GACnB8C,EAAOC,YAAYH,GACnBF,EAAU7N,KAAKkO,YAAYD,QAZtBJ,EAAU7N,KAAKqL,cAAc,yBAC9ByC,EAAaX,aAAahC,EAAW2C,EAAahF,iBAAiB,eAAe,KAc9FwB,EAAUlN,UAAUmO,iBAAmB,SAAU4C,GAC7C,IAAK,IAAIvW,EAAI,EAAGA,EAAIuW,EAAWrW,OAAQF,IAAK,CACxC,IAAIqB,EAASsH,KAAKtJ,OAAOyF,wBAAwByR,EAAWvW,IACxDwW,EAAa9U,EAAciH,KAAKtJ,OAAQgC,EAAOM,UAE/CiU,EAA0C,aAD9CvU,EAASmV,GACmBZ,cAA+B,QAAU,UACrEvU,EAAOuU,cAAgBA,EAEvB,IAAK,IADD3U,EAAOD,OAAOC,KAAKI,GACdqB,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IACzB1B,OAAOwE,UAAUC,eAAeC,KAAK8Q,EAAYvV,EAAKyB,MACtD8T,EAAWvV,EAAKyB,IAAMrB,EAAOJ,EAAKyB,KAG1CiG,KAAK8N,gBAAgBpV,EAAQuU,GAAe,GACxCjN,KAAKtJ,OAAOyU,oBACZnL,KAAKqL,oBAIjBtB,EAAUlN,UAAUiR,gBAAkB,SAAUpV,EAAQuU,EAAec,GACnE,IAAIxW,EAAS,EAKb,GAJAyI,KAAKgO,oBAAoBtV,EAAQuU,IAC5Bc,GAAerV,EAAOI,YAAckH,KAAKtJ,OAAOyU,oBACjDnL,KAAKiO,sBAAsBvV,EAAOI,YAElCJ,EAAOY,cAAgB0G,KAAKtJ,OAAOyU,mBAAoB,CACvD,IAAI7R,EAAeZ,EAAOY,cACrB5B,oBAAkBsI,KAAKtJ,OAAOwX,eAC/BlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAAKyI,KAAKtJ,OAAOyU,qBAClE7R,EAAe0G,KAAKoO,wBAAwB9U,IAEhD/B,EAAS+B,EAAa/B,OACtB,IAAK,IAAI8W,EAAQ,EAAGA,EAAQ9W,EAAQ8W,IAC3B/U,EAAa+U,GAAOC,eACjBhV,EAAa+U,GAAOhV,gBACpB2G,KAAK8N,gBAAgBxU,EAAa+U,GAAQpB,GAAe,GAGzDjN,KAAKgO,oBAAoB1U,EAAa+U,GAAQpB,MAMlElD,EAAUlN,UAAUuR,wBAA0B,SAAU9U,GACpD,IAAI8N,EAAQpH,KAIZ,OAH2B1G,EAAamE,OAAO,SAAUC,GACrD,OAAO0J,EAAM1Q,OAAOwX,aAAaC,eAAe3P,QAAQd,IAAM,KAItEqM,EAAUlN,UAAUoR,sBAAwB,SAAUpV,GAClD,IAAItB,EAAS,EACT+B,KACAZ,EAASK,EAAciH,KAAKtJ,OAAQmC,EAAaG,UACjDN,GAAUA,EAAOY,eACjBA,EAAeZ,EAAOY,eAErB5B,oBAAkBsI,KAAKtJ,OAAOwX,eAC/BlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAAKyI,KAAKtJ,OAAOyU,qBAClE7R,EAAe0G,KAAKoO,wBAAwB9U,IAEhD/B,EAAS+B,GAAgBA,EAAa/B,OACtC,IAAIgX,EAAU,EACVC,EAAoB,EACxB,IAAK9W,oBAAkBgB,GAAS,CAC5B,IAAK,IAAIrB,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IAAK,CAC1C,IACIoX,EADgB1V,EAAciH,KAAKtJ,OAAQ4C,EAAajC,GAAG2B,UAE1DtB,oBAAkB+W,KACkB,kBAAjCA,EAAexB,cACfsB,IAEsC,UAAjCE,EAAexB,eACpBuB,KAKR9V,EAAOuU,cADPsB,EAAU,GAAMC,EAAoB,GAAKA,IAAsBjX,EACxC,gBAEI,IAAtBiX,GAAuC,IAAZD,EACT,UAGA,QAE3BvO,KAAKgO,oBAAoBtV,EAAQA,EAAOuU,eACpCvU,EAAOI,YACPkH,KAAKiO,sBAAsBvV,EAAOI,cAI9CiR,EAAUlN,UAAUwO,gBAAkB,SAAUqD,GAC5C,IAAItH,EAAQpH,KAERzI,EAAS,EACb,IAAKG,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,EAAG,CACpG,IAAIoX,EAAe3O,KAAKtJ,OAAOwX,aAAaC,eACX,IAA7BnO,KAAKiK,aAAa1S,OAClByI,KAAKiK,aAAe0E,EAGhB3O,KAAKiK,eAAiB0E,IACtB3O,KAAKiK,aAAe0E,GAI5B3O,KAAKiK,aAAa1S,OAAS,IACtByI,KAAKtJ,OAAOsB,eAAeV,QAAQC,QAAUyI,KAAKiK,aAAa1S,SAChEyI,KAAKiK,iBAGb,IAAIxL,GAAS/G,oBAAkBsI,KAAKtJ,OAAOwX,eACtClO,KAAKiK,aAAa1S,OAAS,EAAMyI,KAAKiK,aACvCjK,KAAKtJ,OAAO8G,SAEhB,GADAiB,EAAOhI,EAAauJ,KAAKtJ,QAAUsJ,KAAKtJ,OAAOyF,wBAA0BsC,GACpE/G,oBAAkBgX,GACnB,IAAK,IAAIrX,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAC7B,GAAIqX,EAAU,CACV,GAA8B,UAA1BjQ,EAAKpH,GAAG4V,cACR,SAEJxO,EAAKpH,GAAG4V,cAAgB,QACxBjN,KAAKgO,oBAAoBvP,EAAKpH,GAAIoH,EAAKpH,GAAG4V,oBAGlCjN,KAAKgK,cAAcxL,QAAQC,EAAKpH,KAC3B,IACToH,EAAKpH,GAAG4V,cAAgB,UACxBjN,KAAKgO,oBAAoBvP,EAAKpH,GAAIoH,EAAKpH,GAAG4V,eACtCjN,KAAKtJ,OAAOyU,oBACZnL,KAAKiO,sBAAsBxP,EAAKpH,MAMnC,IAAbqX,GAAsB1O,KAAKtJ,OAAO0H,uBAClC4B,KAAKgK,iBACLhK,KAAKgI,mBACLvJ,EAAKhB,OAAO,SAAUmR,GAClBA,EAAI3B,cAAgB,UACpB7F,EAAM4G,oBAAoBY,EAAKA,EAAI3B,kBAG3C1V,EAASyI,KAAKgK,cAAczS,OAC5B,IAAI6V,EAAWpN,KAAKtJ,OAAOwV,mBAAmB3D,iBAAiB,YAAY,GACvEhR,EAAS,GAAKkH,EAAKlH,OAAS,EACxBA,IAAWkH,EAAKlH,QAAWmX,GAK3BrB,eAAaD,IAAY,WACzBA,EAAShF,UAAUuE,IAAI,aALvBU,eAAaD,IAAY,YACzBA,EAAShF,UAAUuE,IAAI,WAQ3BU,eAAaD,IAAY,UAAW,YAG5CrD,EAAUlN,UAAUmR,oBAAsB,SAAUa,EAAevD,GAC/D,IAGIwD,EAGA1B,EANA1U,EAASsH,KAAKtJ,OAAOyF,wBAAwBsB,OAAO,SAAUC,GAC9D,OAAOA,EAAE1E,WAAa6V,EAAc7V,WAGpC+V,EAAc/O,KAAKtJ,OAAOyF,wBAAwBqC,QAAQ9F,EAAO,IACjEsW,EAAiBjW,EAAciH,KAAKtJ,OAAQmY,EAAc7V,UAE9D,GAAI+V,GAAe,EAAG,CAClB,IAAIE,EAAKjP,KAAKtJ,OAAOmI,UAAUkQ,GAC3BG,OAAY,GACZlP,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,sBACtCiQ,EAAYlP,KAAKtJ,OAAOyY,qBAAqBJ,IAEjD3B,EAAW6B,EAAG1G,iBAAiB,YAAY,GAAK0G,EAAG1G,iBAAiB,YAAY,GAC1E2G,EAAU3G,iBAAiB,YAAY,GACxC7Q,oBAAkB0V,IACnBC,eAAaD,IAAY,UAAW,SAAU,cAQtD,GALA0B,EAAgBE,EACZtX,oBAAkBoX,KAClBA,EAAgBD,GAEpBC,EAAc7B,cAAgB3B,EACX,UAAfA,GAA0B5T,oBAAkBmX,EAAcP,eACrC,IAAjBS,IAAqE,IAA/C/O,KAAKgI,gBAAgBxJ,QAAQuQ,IACnD/O,KAAKgI,gBAAgBxP,KAAKuW,IAEqB,IAA/C/O,KAAKgK,cAAcxL,QAAQsQ,KAA2C,IAAjBC,IACnDrX,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAClGyI,KAAKgK,cAAcxR,KAAKsW,IAEuB,IAA/C9O,KAAKgK,cAAcxL,QAAQsQ,IAAyB9O,KAAKtJ,OAAO0H,uBAA2B1G,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,GAC3LyI,KAAKgK,cAAcxR,KAAKsW,IAEuB,IAA/C9O,KAAKgK,cAAcxL,QAAQsQ,IAA2BpX,oBAAkBsI,KAAKtJ,OAAOwX,eACjC,IAAnDlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,QACxCyI,KAAKgK,cAAcxR,KAAKsW,IAEuB,IAA/C9O,KAAKgK,cAAcxL,QAAQsQ,IAAyBpX,oBAAkBsI,KAAKtJ,OAAOwX,eAClFlO,KAAKgK,cAAcxR,KAAKsW,QAG3B,IAAoB,YAAfxD,GAA2C,kBAAfA,IAAmC5T,oBAAkBmX,EAAcP,cAAe,CACpH,IAAIpU,EAAQ8F,KAAKgK,cAAcxL,QAAQsQ,GAIvC,IAHe,IAAX5U,GACA8F,KAAKgK,cAAc7M,OAAOjD,EAAO,IAEc,IAA/C8F,KAAKgI,gBAAgBxJ,QAAQuQ,GAAqB,CAClD,IAAIK,EAAepP,KAAKgI,gBAAgBxJ,QAAQuQ,GAChD/O,KAAKgI,gBAAgB7K,OAAOiS,EAAc,IAGlD,IAAIC,EAA+B,kBAAf/D,EAAiC,SAAW,KAAOA,EACnEyD,GAAe,IACVrX,oBAAkB0V,IACnBA,EAAShF,UAAUuE,IAAI0C,KAInCtF,EAAUlN,UAAUyN,kBAAoB,SAAUvH,GAC9C,IAEI8G,EACAyF,EAHAlI,EAAQpH,KACRH,EAAckD,EAAKlD,YAGvB,GAAIzI,EAAiB4I,KAAKtJ,SAClBsJ,KAAKtJ,OAAOyU,mBACZ,GAAqB,YAAhBtL,GAA6C,WAAhBA,EAA2B,CACzD,IAAIiI,EAAO9H,KAAKtJ,OAAOiB,KAAKkH,UAE5ByQ,GADAzF,EAAY7J,KAAKtJ,OAAOyF,yBACA5E,OACxByI,KAAKgI,mBACL,IAAK,IAAI3Q,EAAI,EAAGA,EAAIiY,EAAajY,IACxByQ,EAAKzQ,GAAG+Q,UAAUC,SAAS,iBAC5BrI,KAAKgO,oBAAoBnE,EAAUxS,GAAIwS,EAAUxS,GAAG4V,oBAI3D,GAAoB,WAAhBpN,GAA4C,QAAhBkD,EAAKzH,OAAkB,CACxD,IAAIiU,KACgB,WAAhB1P,EACA0P,EAAcxM,EAAKtE,KAGnB8Q,EAAY/W,KAAKuK,EAAKtE,MAE1B,IAASpH,EAAI,EAAGA,EAAIkY,EAAYhY,OAAQF,IAAK,CACzC,GAAoB,WAAhBwI,EAA0B,CAC1B,IAAI3F,EAAQ8F,KAAKtJ,OAAO8G,SAASgB,QAAQ+Q,EAAYlY,IACjD+X,EAAepP,KAAKgI,gBAAgBxJ,QAAQtE,GAChD8F,KAAKgI,gBAAgB7K,OAAOiS,EAAc,GAC1CpP,KAAKgO,oBAAoBuB,EAAYlY,GAAI,WAExCK,oBAAkB6X,EAAYlY,GAAGyB,aAClCkH,KAAKiO,sBAAsBsB,EAAYlY,GAAGyB,iBAIxB,QAArBiK,EAAKlD,aAAyBG,KAAKtJ,OAAOyU,mBAC/CpI,EAAKtE,KAAKwO,cAAgB,WAEL,cAAhBpN,GAA+C,cAAhBA,GAA+C,YAAhBA,IAC/DpJ,EAAauJ,KAAKtJ,WACtBsJ,KAAKgK,iBACLhK,KAAKgI,oBACL6B,GAAcnS,oBAAkBsI,KAAKtJ,OAAOwX,eAAiBlO,KAAKtJ,OAAOwX,aAAaC,eAAe5W,OAAS,EAC1GyI,KAAKtJ,OAAOyF,wBAA0B6D,KAAKtJ,OAAO8G,UAC5CgS,QAAQ,SAAU9W,GACxB,GAAI0O,EAAM1Q,OAAO0H,qBAAsB,CAC/B1F,EAAOW,gBACP+N,EAAM6G,sBAAsBvV,GAG5B0O,EAAM4G,oBAAoBtV,EAAQA,EAAOuU,eAE7C,IAAIjP,EAAQ5E,EAAoBV,GAChCsF,EAAQoJ,EAAMgH,wBAAwBpQ,GACtC,IAAK,IAAI3G,EAAI,EAAGA,EAAI2G,EAAMzG,OAAQF,IAC1B2G,EAAM3G,GAAGgC,gBACT+N,EAAM6G,sBAAsBjQ,EAAM3G,IAE3B2G,EAAM3G,GAAkB,iBAAMK,oBAAkBsG,EAAM3G,KAC7D+P,EAAM4G,oBAAoBhQ,EAAM3G,GAAI2G,EAAM3G,GAAG4V,oBAKjDvU,EAAOW,gBACP+N,EAAM6G,sBAAsBvV,GAG5B0O,EAAM4G,oBAAoBtV,EAAQA,EAAOuU,iBAIrDjN,KAAKqL,oBAKrBtB,EAAUlN,UAAU4S,kBAAoB,WACpC,OAAOzP,KAAKgK,eAEhBD,EAAUlN,UAAU6S,qBAAuB,WACvC,OAAO1P,KAAKgI,iBAET+B,KCjdP4F,GAAuB,WAMvB,SAASA,EAAMjZ,GACXsJ,KAAKtJ,OAASA,EACd+L,OAAKC,OAAOkN,SACZ5P,KAAKkK,mBAyCT,OAjCAyF,EAAM9S,UAAU+F,cAAgB,WAC5B,MAAO,SAMX+M,EAAM9S,UAAUqN,iBAAmB,WAC/BlK,KAAKtJ,OAAOiB,KAAKwS,GAAG0F,EAAsB7P,KAAK8P,cAAe9P,OAElE2P,EAAM9S,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAOiB,KAAK+S,IAAImF,EAAsB7P,KAAK8P,gBAEpDH,EAAM9S,UAAUiT,cAAgB,SAAUC,GACtC,IAAIpY,EAAOY,YAAU,YAAawX,GAC9BC,EAAczX,YAAU,UAAWwX,GACvCpY,EAAKuS,iBAAiB+F,EAAsBjQ,KAAKtJ,OAAOiB,KAAK4M,eAC7D5M,EAAKuS,iBAAiBgG,EAAqBlQ,KAAKtJ,OAAOiB,KAAK2M,cAC5D3M,EAAKuS,iBAAiBiG,EAAwBnQ,KAAKtJ,OAAOiB,KAAK6M,iBAC/D4L,YAAUJ,GAAc,eAE5BL,EAAM9S,UAAUwT,MAAQ,WACpBrQ,KAAKtJ,OAAOiB,KAAK0Y,SAQrBV,EAAM9S,UAAU+M,QAAU,WACtB5J,KAAKwK,uBAEFmF,KC1DPlP,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5D8O,GAAgC,SAAUxO,GAE1C,SAASwO,IACL,OAAkB,OAAXxO,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAiB/D,OAnBAS,GAAU6P,EAAgBxO,GAI1BZ,IACIc,cACDsO,EAAezT,UAAW,cAAU,GACvCqE,IACIc,YAAS,IACVsO,EAAezT,UAAW,kBAAc,GAC3CqE,IACIc,WAAS,aACVsO,EAAezT,UAAW,gBAAY,GACzCqE,IACIc,cACDsO,EAAezT,UAAW,WAAO,GACpCqE,IACIc,cACDsO,EAAezT,UAAW,qBAAiB,GACvCyT,GACTrO,iBC5CExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5D+O,GAAmC,SAAUzO,GAE7C,SAASyO,IACL,OAAkB,OAAXzO,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAuB/D,OAzBAS,GAAU8P,EAAmBzO,GAI7BZ,IACIc,WAAS,QACVuO,EAAkB1T,UAAW,YAAQ,GACxCqE,IACIc,WAAS,SACVuO,EAAkB1T,UAAW,yBAAqB,GACrDqE,IACIc,WAAS,WACVuO,EAAkB1T,UAAW,YAAQ,GACxCqE,IACIc,YAAS,IACVuO,EAAkB1T,UAAW,wBAAoB,GACpDqE,IACIc,WAAS,YACVuO,EAAkB1T,UAAW,oBAAgB,GAChDqE,IACIc,YAAS,IACVuO,EAAkB1T,UAAW,oBAAgB,GAChDqE,IACIc,YAAS,IACVuO,EAAkB1T,UAAW,oBAAgB,GACzC0T,GACTtO,iBCxCEuO,GAAwB,WAMxB,SAASA,EAAO9Z,GACZsJ,KAAKtJ,OAASA,EACdsJ,KAAKyQ,eAAiB,KACtBzQ,KAAKtJ,OAAOiB,KAAKwS,GAAG,kBAAmBnK,KAAK0Q,qBAAsB1Q,MAClEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,sBAAuBnK,KAAK2Q,oBAAqB3Q,MA+QzE,OAvQAwQ,EAAO3T,UAAU+T,YAAc,SAAU7N,GACrC,GAAKA,EAAKtE,KAAV,CAGA,IAAIA,EAAOsE,EAAKtE,KACZlB,EAAakB,EAAK3F,WACtB,IAAKpB,oBAAkB+G,EAAK3F,cAAgBrB,EAAuBuI,KAAKtJ,WACjEsJ,KAAKtJ,OAAOma,aAA2D,SAA1C7Q,KAAKtJ,OAAOoa,aAAaC,cACpDta,EAAauJ,KAAKtJ,UAAY8C,EAAUwG,KAAKtJ,SAAW,EAC5CsJ,KAAKtJ,OAAOuC,kBAAoBvB,oBAAkB6F,EAAWyC,KAAKtJ,OAAOwC,sBACtFqE,EAAWyC,KAAKtJ,OAAOwC,sBAAwB8G,KAAKtJ,OAAOsa,qBAC1DvY,EAAgBuH,KAAKtJ,OAAQqM,EAAKtE,KAAMuB,KAAKtJ,OAAOiB,KAAKwE,4BAE1D4G,EAAKpE,IAAInE,MAAMG,QAAU,QAGjC,GAAIlE,EAAauJ,KAAKtJ,UAAY8C,EAAUwG,KAAKtJ,QAAS,CACtD,IAAIua,EAAUjR,KAAKtJ,OACfwa,EAAYlR,KAAKtJ,OAAOyF,wBAAwBsB,OAAO,SAAUmR,GACjE,OAAOvQ,WAAS4S,EAAQ/T,UAAW0R,KAASvQ,WAAS4S,EAAQhU,gBAAiBwB,KAElF,GAAIyS,EAAU3Z,OAAS,EAAG,CACtB,IAAIoD,EAAUuW,EAAU,GAAG/X,SAAW,YAAc,OACpD4J,EAAKpE,IAAIqO,aAAa,QAAS,YAAcrS,EAAU,MAI9CpC,YAAU,eAAgBwK,EAAKtE,OAE5C2R,YAAUrN,EAAKpE,KAAM,gBAErBoE,EAAKpE,IAAImM,cAAc,qBACvB/H,EAAKpE,IAAIqO,aAAa,gBAAiB,QAElCjK,EAAKpE,IAAImM,cAAc,wBAC5B/H,EAAKpE,IAAIqO,aAAa,gBAAiB,SAEvChN,KAAKtJ,OAAOsa,mBAAqBhR,KAAKtJ,OAAOuC,gBACxCvB,oBAAkB+G,EAAK3F,cACxBiK,EAAKpE,IAAInE,MAAMG,QAAU,SAGjCqF,KAAKtJ,OAAOuS,QAAQiH,EAAqBnN,KAQ7CyN,EAAO3T,UAAU2C,WAAa,SAAUuD,GACpC,GAAKA,EAAKtE,KAAV,CAGA,IAEIvE,EAIAiX,EANAxZ,EAAOqI,KAAKtJ,OAAOiB,KACnB8G,EAAOsE,EAAKtE,KAGZ2S,EADc1Z,oBAAkB+G,EAAK4S,aACjB5S,EAAKtE,MAAQsE,EAAK4S,YACtCC,EAAkB,EAElB3R,EAASK,KAAKtJ,OAAO6a,eAAexO,EAAKpD,OAAOqM,KAChDwF,EAAa/S,EAAK6P,aAClBmD,EAAgBzR,KAAKtJ,OAAOuI,mBAK5B/E,EAJCxC,oBAAkB+G,EAAK3F,YAIhB2F,EAAKvE,MAHLuE,EAAK3F,WAAWoB,MAa5B,IANI8F,KAAKtJ,OAAOgb,6BAA+B1R,KAAKtJ,OAAOuC,cACzC+G,KAAKtJ,OAA8B,wBAAEqM,EAAKpD,OAAOqM,KAGjDrU,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,QAEnChM,KAAKtJ,OAAO0I,iBAAyC,QAArB2D,EAAKlD,aACjD,mBAD0EkD,EAAKlD,aACtC,WAArBkD,EAAKlD,cAA4BnI,oBAAkBqL,EAAKtD,KAAKqL,cAAc,gBAqD9F9K,KAAKyQ,iBACVzQ,KAAKyQ,eAAiB,UAtD+F,CAMrH,IAAK,IALDnD,EAAYhB,gBAAc,OAASC,UAAW,2BAC9CqF,EAAkBtF,gBAAc,QAChCC,UAAW,iBACXsF,OAAQ,uCAEHC,EAAI,EAAGA,EAAIV,EAAKU,IACrBR,GAAmB,GACnBhE,EAAUK,YAAYiE,EAAgB/E,aAE1C,IAAIkF,EAAgBra,oBAAkB+G,EAAKuT,yBACNvT,EAAKpF,gBAApCoF,EAAKuT,wBAIX,GAHID,IAAiBra,oBAAkB+G,EAAKnF,gBACxCyY,IAA8C,IAA7BtT,EAAKnF,aAAa/B,SAEnCwa,EAAc,CACd3B,YAAUrN,EAAKtD,MAAO,iBACtB,IAAIwS,EAAa3F,gBAAc,QAAUC,UAAW,YAChD2F,OAAS,EAETA,EADAlS,KAAKtJ,OAAOuC,cACHwF,EAAKtF,WACTzB,oBAAkB+G,EAAKuB,KAAKtJ,OAAOwC,sBAAwBuF,EAAKuB,KAAKtJ,OAAOwC,uBAC5E8G,KAAKtJ,OAAOsa,qBAGLvS,EAAKtF,WAAaV,EAAgBuH,KAAKtJ,OAAQ+H,EAAMuB,KAAKtJ,OAAOiB,KAAKwE,0BAEtFiU,YAAU6B,GAAa,EAAW,mBAAqB,sBACvDX,GAAmB,GACnBhE,EAAUK,YAAYsE,GACtBL,EAAgBpX,MAAM2S,MAAQ,MAC9BmE,GAAmB,EACnBhE,EAAUK,YAAYiE,EAAgB/E,kBAEjCuE,IAAQA,IAAQ3S,EAAKtE,SAE1BmX,GAAmB,GACnBhE,EAAUK,YAAYiE,EAAgB/E,aACtCS,EAAUK,YAAYiE,EAAgB/E,cAM1CsE,EAAc7E,gBAAc,QAAUC,UAAW,eAC7CvM,KAAKtJ,OAAOwW,gBACZiE,EAAY3W,MAAM2S,MAAQ,eAAiBmE,EAAkB,OAEjElB,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAChE6F,KAAKmS,eAAepP,EAAMoO,GAC1B7D,EAAUK,YAAYwD,GACtBpO,EAAKtD,KAAKkO,YAAYL,GAM1B,GADc3V,EAAKya,4BAA8B,GAAKza,EAAK0a,6BAA+B,EAgBrF,CACD,IAAIC,EAAqB3a,EAAK4a,wBAC1BC,EAAoB7a,EAAK8a,uBACzBC,EAAiB/a,EAAKgb,oBACrBL,EAAmB/a,OAAS,GAAM+a,EAAmB,GAAGM,QAAU7P,EAAKpD,OAAOiT,MAC/ExC,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE1DqY,EAAkBjb,OAAS,GAAMib,EAAkB,GAAGI,QAAU7P,EAAKpD,OAAOiT,MAClFxC,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE1DuY,EAAenb,OAAS,GAAMmb,EAAe,GAAGE,QAAU7P,EAAKpD,OAAOiT,OAC5ExC,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,YAzBhEsX,EAAgBzR,KAAKtJ,OAAO0I,iBAAmBqS,EAAgB,GAC/D9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAASyF,EAC9CrB,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE3DsX,EAAgBzR,KAAKtJ,OAAO0I,iBAAmBqS,EAAgB,IACnE9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAASyF,GACxC9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAASyF,EAAgB,GACrErB,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAE3DsX,IAAkBzR,KAAKtJ,OAAO0I,iBAAmBqS,EAAgB,GACtE9Z,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAAkB,GAC5EgR,YAAUrN,EAAKtD,MAAO,iBAAmBvF,EAAQ,QAAUuE,EAAKtE,OAiBxE,IAAKzC,oBAAkBiI,IAAWA,EAAOnI,eACrCwI,KAAKtJ,OAAOmc,OAAO,iBAAkB9P,GACjC/C,KAAKtJ,OAAOwW,eAAe,CAC3B,IAAI4F,EAAkB/P,EAAKtD,KAAK8I,iBAAiB,YAAY,GAE7D+I,GADYyB,SAASD,EAAgBtY,MAAM2S,MAAO,IAElDmE,GAAmB,IAEfH,EADAxZ,EAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAC5C2D,EAAKtD,KAAKqL,cAAc,eAGxB/H,EAAKtD,KAAKqL,cAAc,oBAE9BtQ,MAAM2S,MAAQ,eAAiBmE,EAAkB,MAGrE,GAAIE,EAAY,CACZpB,YAAUrN,EAAKtD,MAAO,iBACtB,IAAIuT,EAAcza,YAAUwK,EAAKpD,OAAOiT,MAAO7P,EAAKtE,MACN,MAA1CsE,EAAKtD,KAAKqL,cAAc,eACxB/H,EAAKtD,KAAKqL,cAAc,eAAe2C,UAAYuF,EAGnDjQ,EAAKtD,KAAKgO,UAAYuF,EAG1Btb,oBAAkBsI,KAAKtJ,OAAOuc,cAC9BjT,KAAKtJ,OAAOuS,QAAQgH,EAAsBlN,KAGlDyN,EAAO3T,UAAUsV,eAAiB,SAAUpP,EAAMoO,GAC9C,IACI+B,EADc7U,WAAS,cAAe2B,KAAKtJ,QAClBsJ,KAAKtJ,OAAO0I,iBACrC+T,EAAa,aACbC,EAAWrQ,EAAKpD,OAAOzF,MACvBxC,oBAAkBwb,EAAWN,QAC7B7P,EAAKtD,KAAKuN,aAAa,gBAAiBoG,EAAW,IAEnDF,EAAWN,QAAU7P,EAAKpD,OAAOiT,OAAUlb,oBAAkBwb,EAAWG,YACxEtQ,EAAKpD,OAAO0T,SAAWH,EAAWG,SAClCtQ,EAAKpD,OAAOwT,GAAcG,mBAAiBvQ,EAAKpD,OAAO0T,UACvDtQ,EAAKtD,KAAK2I,UAAUuE,IAAI,mBAE5B,IAAI4G,EAAwD,MAA1CxQ,EAAKtD,KAAKqL,cAAc,eACtC/H,EAAKtD,KAAKqL,cAAc,eAAe2C,UAAY1K,EAAKtD,KAAKgO,UACjE,GAAsC,iBAA1B1K,EAAKpD,OAAe,UAAkBK,KAAKyQ,eACnD+C,iBAAerC,EAAanR,KAAKyQ,gBACjCzQ,KAAKyQ,eAAiB,KACtB1N,EAAKtD,KAAKgO,UAAY,QAErB,GAAI1K,EAAKtD,KAAK2I,UAAUC,SAAS,kBAAmB,CACrD,IAAIjQ,EAAM2K,EAAKtD,KAAKgU,SAASlc,OACzBmc,EAAS1T,KAAKtJ,OAAOid,QAAQC,GAAK7Q,EAAKpD,OAAOqM,IAClD,GAAIkH,EAAWN,QAAU7P,EAAKpD,OAAOiT,OAAUlb,oBAAkBwb,EAAWG,UAqBxE,KAAa,EAAOjb,EAAKA,EAAM2K,EAAKtD,KAAKgU,SAASlc,OAC9C4Z,EAAYxD,YAAY5K,EAAKtD,KAAKgU,SADzB,QArBsE,CACnF,IAAII,EAAU,UAEd,GAAI7T,KAAKtJ,OAAOod,SAA6C,iBAA1B/Q,EAAKpD,OAAe,SACnDoD,EAAKpD,OAAOwT,GAAYpQ,EAAKtE,KAAMuB,KAAKtJ,OAAQ,WAAYgd,EAAQ,KAAM,KAAMvC,GAC5EzZ,oBAAkBsI,KAAKtJ,OAAOiB,KAAKkc,MACnC7T,KAAKtJ,OAAOiB,KAAKkc,GAAW7T,KAAKtJ,OAAOmd,IAE5C7T,KAAKtJ,OAAOmc,OAAO,sBAAuB7S,KAAKtJ,OAAOmd,IACtD7T,KAAKtJ,OAA2B,2BAE/B,CACD,IACIqd,EAAShR,EAAKpD,OAAOwT,GAAY/W,UAASlC,MAAS,IAAM6I,EAAKtE,MAAOuB,KAAKtJ,OAAQ,WAAYgd,EAAQ1T,KAAKtJ,OAAU,kBACzH8c,iBAAerC,EAAa4C,UAEzBhR,EAAKpD,OAAO0T,gBACZtQ,EAAKpD,OAAOwT,GACnBpQ,EAAKtD,KAAKgO,UAAY,SAS1B0D,EAAY1D,UAAY8F,EACxBxQ,EAAKtD,KAAKgO,UAAY,IAG9B+C,EAAO3T,UAAU6T,qBAAuB,SAAU3N,GAC9C/C,KAAKyQ,eAAiB1N,EAAKsQ,UAE/B7C,EAAO3T,UAAU8T,oBAAsB,SAAU5N,GAG7C/C,KAAKtJ,OAAc,QAAIqM,EACvB/C,KAAKtJ,OAAOmc,OAAO,sBAAuB7S,KAAKtJ,OAAc,SAC7DsJ,KAAKtJ,OAA2B,wBAEpC8Z,EAAO3T,UAAU+M,QAAU,WACvB5J,KAAKtJ,OAAOiB,KAAK+S,IAAI,kBAAmB1K,KAAK0Q,sBAC7C1Q,KAAKtJ,OAAOiB,KAAK+S,IAAI,sBAAuB1K,KAAK2Q,sBAE9CH,KCxRPwD,GAAkC,WAClC,SAASA,EAAiBrc,GACtBqI,KAAKiU,aAAe,eACpBjU,KAAKtJ,OAASiB,EACdqI,KAAKkU,eACLlU,KAAKmU,WACLnU,KAAKoU,iBACLpU,KAAKqU,aAAe,EACpBrU,KAAKsU,cACLtU,KAAKuU,cAAe,EACpBvU,KAAKkK,mBACLlK,KAAKwU,eACLxU,KAAKhF,iBAAmBtD,oBAAkBsI,KAAKtJ,OAAOuG,iBA4jB1D,OAtjBA+W,EAAiBnX,UAAUqN,iBAAmB,WAC1ClK,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKyU,uBAAwBzU,MACjEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,gBAAiBnK,KAAK0U,aAAc1U,MACxDA,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAK2U,WAAY3U,MAChDA,KAAKtJ,OAAOyT,GAAGyK,EAAqB5U,KAAK6U,qBAAsB7U,MAC/DA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAK8U,cAAe9U,OAMxDgU,EAAiBnX,UAAU2N,oBAAsB,WACzCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIkK,EAAqB5U,KAAK6U,sBAC1C7U,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKyU,wBAC1CzU,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAK2U,YACrC3U,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAK8U,eACtC9U,KAAKtJ,OAAOiB,KAAK+S,IAAI,gBAAiB1K,KAAK0U,gBAQ/CV,EAAiBnX,UAAU+M,QAAU,WACjC5J,KAAKwK,uBAMTwJ,EAAiBnX,UAAUkY,SAAW,WAClC,OAAM/U,KAAKtJ,OAAOC,sBAAsBC,eAc5Cod,EAAiBnX,UAAUmY,kBAAoB,SAAUvW,GACrD,IAAI2I,EAAQpH,KAIZ,GAHAA,KAAKtJ,OAAO8G,SAAyC,IAA7BnF,OAAOC,KAAKmG,GAAMlH,QAAkByI,KAAKtJ,OAAOC,sBAAsBC,iBAC1FoJ,KAAKtJ,OAAOC,WAChBqJ,KAAKtJ,OAAO6G,cACP9G,EAAauJ,KAAKtJ,UAAY8C,EAAUwG,KAAKtJ,SAAY+H,aAAgB7H,iBAAiB6H,aAAgB/B,OAAQ,CACnH,IAAIjD,EAAKuG,KAAKtJ,OAAOC,WACrB,GAAIqJ,KAAKtJ,OAAOuG,gBAAiB,CAG7B,GAFA+C,KAAKtJ,OAAOue,MAAQvd,oBAAkBsI,KAAKtJ,OAAOue,OAC9C,IAAIC,QAAUlV,KAAKtJ,OAAOue,MAC1BjV,KAAKtJ,OAAOuG,gBAAiB,CAC7B,IAAIkY,EAAYnV,KAAKtJ,OAAOue,MAAMG,OAAO3X,OAAO,SAAU4X,GAAS,MAAqB,cAAdA,EAAMxd,MAC5EmI,KAAKtJ,OAAOuC,gBAAkBkc,EAAU5d,SACxCyI,KAAKtJ,OAAOue,MAAMK,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAAS,MAC9D+C,KAAKtJ,OAAOue,MAAMM,UAAU,YAAavV,KAAKtJ,OAAOwG,YAG7D,IAAK8C,KAAKtJ,OAAO8e,gBAAiB,CAC9B,IAAIC,EAAMzV,KAAKtJ,OAAOue,MAAMS,QAC5BD,EAAIE,YACJF,EAAMA,EAAInM,QAAQtJ,KAAKtJ,OAAOuG,mBAC1B9F,iBAAkB,EACtBsC,EAAGmc,aAAaH,GAAKI,KAAK,SAAUnY,GAChC0J,EAAM8M,YAAc4B,WAASC,SAASrY,EAAEqW,OAAQ3M,EAAM1Q,OAAOuG,iBAAiB,GAIlE,IAHF1E,YAAU,sBAAuB6O,EAAM1Q,QAAQ+G,OAAO,SAAUC,GACtE,MAAoC,OAA7BA,EAAEsY,YAAYC,aACtB1e,SAEC2e,WAAS,+BAA+B,EAAM9O,EAAM1Q,QAC/CgB,oBAAkB0P,EAAM+O,mBACzBD,WAAS,UAAU,EAAO9O,EAAM+O,iBAChC9X,WAAS,oBAAqB+I,EAAM1Q,QAAQ0f,mBAAmBhP,EAAM+O,iBACrE/O,EAAM+O,gBAAkB,MAE5B/O,EAAM1Q,OAAOiB,KAAK0e,wBAM7B5X,aAAgB/B,OACrBsD,KAAKsW,gBAAgB7X,IAG7BuV,EAAiBnX,UAAUyZ,gBAAkB,SAAU7X,GAGnD,GAFAuB,KAAKoU,iBACLpU,KAAKmU,WACAnU,KAAKtJ,OAAOwG,UAIb,IAAK,IAAI7F,EAAI,EAAGA,EAAIgB,OAAOC,KAAKmG,GAAMlH,OAAQF,IAAK,CAC/C,IAAIkf,EAAW9X,EAAKpH,GACpB2I,KAAKoU,cAAc5b,KAAK4D,YAAWma,IAC9B7e,oBAAkB6e,EAASvW,KAAKtJ,OAAOwG,aACxC8C,KAAKmU,QAAQ3b,KAAK+d,EAASvW,KAAKtJ,OAAOwG,iBAP/C8C,KAAKoU,cAAgB3V,EAWzB,GAAIuB,KAAKhF,gBAAiB,CAIjB,IAHDwb,KACAC,EAAc,IAAI7f,cAAYoJ,KAAKoU,eAAesC,cAAa,IAAIxB,SAClEyB,MAAM3W,KAAKtJ,OAAOuG,kBACvB,IAAS5F,EAAI,EAAGA,EAAIof,EAAYlf,OAAQF,IAAK,CACzC,IAAIuf,EAAYH,EAAYpf,GACxB6C,EAAQ8F,KAAKmU,QAAQ3V,QAAQoY,EAAU/e,KAC3C,IAAKH,oBAAkBkf,EAAU/e,MACzBqC,GAAS,EADjB,CAEQ,IAAI2P,EAAa+M,EAAe,MAChC5W,KAAKoU,cAAcla,GAAO8F,KAAKtJ,OAAO0G,cAAgByM,OAI9D2M,EAAShe,KAAKuJ,MAAMyU,EAAUI,EAAUC,OAE5C7W,KAAKoU,cAAgBpU,KAAK8W,oBAAoBN,GAElD,GAAKne,OAAOC,KAAK0H,KAAKoU,eAAe7c,OAMjCyI,KAAK+W,cAAc/W,KAAKoU,mBANiB,CACzC,IACI4C,IAAkBhX,KAAKtJ,OAAOC,sBAAsBC,gBAAgBoJ,KAAKtJ,OAAc,QAC3FsJ,KAAKtJ,OAAO8G,SAAWwZ,EAAiBhX,KAAKtJ,OAAiB,cAKlEsJ,KAAKqU,aAAe,GAYxBL,EAAiBnX,UAAUia,oBAAsB,SAAUN,GAEvD,IADA,IAAIzC,KACG/T,KAAKoU,cAAc7c,OAAS,GAAKif,EAASjf,OAAS,GAAG,CACzD,IAAI2C,EAAQsc,EAAShY,QAAQwB,KAAKoU,cAAc,KACjC,IAAXla,EACA8F,KAAKoU,cAAc6C,SAGnBlD,EAAOvb,KAAKwH,KAAKoU,cAAc6C,SAC/BT,EAASrZ,OAAOjD,EAAO,IAG/B,OAAO6Z,GASXC,EAAiBnX,UAAU4X,uBAAyB,SAAU1R,GAC1D,IAAI7K,EAAU6K,EAAKgR,OACnB,GAAK/T,KAAKtJ,OAAO8e,iBAAoBxV,KAAKkU,YAAY3c,QAChDyI,KAAKtJ,OAAOwgB,kBAKd,GAAKlX,KAAKtJ,OAAOwgB,kBAoBRxf,oBAAkBQ,IACnB8H,KAAKgV,kBAAkB9c,QApB3B,IAAK,IAAI0W,EAAM,EAAGA,EAAM1W,EAAQX,OAAQqX,IAChCzX,EAAgB6I,KAAKtJ,SAAWwB,EAAQ0W,GAAKvV,iBAAmB2G,KAAKtJ,OAAOuC,gBAC5Ef,EAAQ0W,GAAKzV,UAAW,GAExBzB,oBAAkBQ,EAAQ0W,GAAK1U,SAC/BhC,EAAQ0W,GAAKxU,SAAWgC,YAAWlE,EAAQ0W,IAC3C1W,EAAQ0W,GAAK5V,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACxDsC,WAAS,sBAAwBhe,EAAQ0W,GAAK5V,SAAUd,EAAQ0W,GAAM5O,KAAKtJ,QAC3EwB,EAAQ0W,GAAKzU,MAAQ,EACrBjC,EAAQ0W,GAAK1U,MAAQkd,KAAKC,KAAqB,IAAhBD,KAAKE,WAC/Bpf,EAAQ0W,GAAK5O,KAAKtJ,OAAO8e,mBACyC,IAAnExV,KAAKkU,YAAY1V,QAAQtG,EAAQ0W,GAAK5O,KAAKtJ,OAAOwG,eAClDhF,EAAQ0W,GAAKvV,iBAAkB,GAEnCnB,EAAQ0W,GAAK3B,cAAgB,gBAnBzCjN,KAAKmW,gBAAkBpT,EACvBmT,WAAS,UAAU,EAAMnT,GA4B7BA,EAAKgR,OAAS/T,KAAKtJ,OAAOwgB,kBAAoBlX,KAAKtJ,OAAO8G,SAAWtF,EACrE8H,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,IAaxCiR,EAAiBnX,UAAUgY,qBAAuB,SAAU0C,EAAYC,GACpE,IAAIC,EAAWzX,KAAKtJ,OAAOmI,UAC3B,GAAImB,KAAKtJ,OAAOuc,YAAa,CACzB,IAAInL,EAAO9H,KAAKtJ,OAAOghB,kBAAkB5P,KACzC2P,KAAcnP,MAAMvL,KAAK+K,GAE7B,IAAI6P,EACJ,GAAIJ,EAAWzP,KAAKvQ,OAAS,EAAG,CACvBigB,IACDD,EAAW7e,OAAOS,UAAW,GAEjC,IAAK,IAAI9B,EAAI,EAAGA,EAAIkgB,EAAWzP,KAAKvQ,OAAQF,IAAK,CAE7C,GADAkgB,EAAWzP,KAAKzQ,GAAGmD,MAAMG,QAAU,YAC/BqF,KAAKtJ,OAAOwgB,kBAAmB,CAC/B,IAAIU,EAAYL,EAAWzP,KAAKzQ,GAAGwgB,uBAAuB,sBAAsB,GAChFF,EAAc3X,KAAKtJ,OAAOuc,YAAcjT,KAAKtJ,OAAOiB,KAAKwE,wBAAwBob,EAAWzP,KAAKzQ,GAAGqS,UAChG1J,KAAKtJ,OAAOiB,KAAKmgB,oBAAoBP,EAAWzP,KAAKzQ,GAAG8U,aAAa,aAAa1N,MACjF/G,oBAAkBkgB,IAAcD,EAAYxe,WAC7CiX,YAAUwH,GAAY,oBACtBvK,eAAauK,GAAY,uBAE7B,IAAIG,MACJA,EAAYN,EAASha,OAAO,SAAU+D,GAClC,OAAOA,EAAEsJ,cAAc,kBAAoB6M,EAAYzd,MAAQ,SAAWyd,EAAYxd,MAAQ,OAEpF5C,QAAUogB,EAAYxe,UAChC6G,KAAK6U,sBAAuBnc,OAAQif,EAAa7P,KAAMiQ,EAAWC,UAAWT,EAAWS,YAAa,GAG7G,IAAIC,EAAcV,EAAWzP,KAAKzQ,GAAGyT,cAAc,wBAC9CpT,oBAAkBugB,IACnBjY,KAAKtJ,OAAOiB,KAAKugB,gBAAgBhG,OAAO+F,SAKhDjY,KAAKmY,sBAAuBzf,OAAQ6e,EAAW7e,OAAQoP,KAAMyP,EAAWzP,KAAMkQ,UAAWT,EAAWS,aAG5GhE,EAAiBnX,UAAUsb,qBAAuB,SAAUZ,GACxD,IAAInQ,EAAQpH,KACR+C,GAASpE,IAAK4Y,EAAWS,UAAWvZ,KAAM8Y,EAAW7e,QACrDe,EAAKuG,KAAKtJ,OAAOC,WACjB8e,EAAMzV,KAAKtJ,OAAOiB,KAAKygB,gBAAgBC,gBACvCC,EAAc7C,EAAIE,QAAQlY,OAAO,SAAUC,GAAK,MAAgB,WAATA,EAAE6a,IAA4B,YAAT7a,EAAE6a,KAClF9C,EAAIE,QAAU2C,EACd7C,EAAIte,iBAAkB,EACtBse,EAAIH,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAASsa,EAAW7e,OAAOsH,KAAKtJ,OAAOwG,YAC9Esb,cAAYxY,KAAKtJ,OAAOid,SACxBla,EAAGmc,aAAaH,GAAKI,KAAK,SAAUnY,GAChC,IAAIvF,EAAQiP,EAAM1Q,OAAOiB,KAAK8gB,gBAAgBnQ,QAC1CoQ,EAAMvgB,EAAMqG,QAAQ+Y,EAAW7e,SACtB,IAATggB,GACAtR,EAAM1Q,OAAOiB,KAAKghB,gBAAgBnJ,QAAQ,SAAU1H,GAC5CA,EAAKrJ,KAAKzF,WAAaue,EAAW7e,OAAOM,WACzC0f,EAAM5Q,EAAK5N,SAIvB,IAAI0e,EAAYrgB,YAAU,mBAAoBmF,GAC1CqW,EAASrW,EAAEqW,OACfwD,EAAW7e,OAAOY,aAAeya,EACjC,IAAK,IAAIvS,EAAI,EAAGA,EAAIuS,EAAOxc,OAAQiK,IAAK,CACpCuS,EAAOvS,GAAGpH,SAAWgC,YAAW2X,EAAOvS,IACvCuS,EAAOvS,GAAGrH,MAAQod,EAAW7e,OAAOyB,MAAQ,EAC5C4Z,EAAOvS,GAAGtH,MAAQkd,KAAKC,KAAqB,IAAhBD,KAAKE,UACjC,IAAI/Z,EAAanB,YAAWmb,EAAW7e,eAChC6E,EAAWjE,aAClBya,EAAOvS,GAAG1I,WAAayE,EACvBwW,EAAOvS,GAAGlD,eAAiBiZ,EAAW7e,OAAOM,SAC7C+a,EAAOvS,GAAGxI,SAAWme,SAAO/P,EAAM1Q,OAAOid,QAAQC,GAAK,UACtDG,EAAOvS,GAAGyL,cAAgB,UAC1BiJ,WAAS,sBAAwBnC,EAAOvS,GAAGxI,SAAU+a,EAAOvS,GAAI4F,EAAM1Q,SAEjEqd,EAAOvS,GAAG4F,EAAM1Q,OAAO8e,mBAAsF,IAAlEpO,EAAM8M,YAAY1V,QAAQuV,EAAOvS,GAAG4F,EAAM1Q,OAAOwG,aACxF0b,IAAcA,EAAUpX,KAC7BuS,EAAOvS,GAAGnI,iBAAkB,EAC5B0a,EAAOvS,GAAGrI,UAAW,GAEzBhB,EAAMgF,OAAOub,EAAMlX,EAAI,EAAG,EAAGuS,EAAOvS,IAMxC,GAJA0U,WAAS,SAAU/d,EAAOuF,GAC1BwY,WAAS,SAAU,sBAAuBxY,GAC1C0J,EAAM1Q,OAAOuS,QAAQ4P,EAAuBnb,GAC5C2Y,cAAYjP,EAAM1Q,OAAOid,SACrBvM,EAAM1Q,OAAOiB,KAAKmhB,WAAWvhB,OAAS,IAAM6P,EAAM1Q,OAAO0H,qBAAsB,CAC/E,IAAI2a,EAAYxgB,YAAU,QAASmF,GAKnC,GAHIhG,oBAAkBqhB,KAClBA,EAAY1a,WAAS,yBAA0B+I,EAAM1Q,QAAQsiB,eAAe,IAAI9D,WAE/Exd,oBAAkBqhB,GAAY,CAC/B,IAAIE,EAAeF,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KACpE7a,EAAU,OAAI0J,EAAM1Q,OAAOyiB,cAAcC,sBAAsBH,EAAcvb,EAAU,QAAG,IAGlGA,EAAE2Q,MAAQjH,EAAM1Q,OAAOiB,KAAKmZ,aAAauI,kBACzC,IAAIC,KACAlS,EAAM1Q,OAAO0H,sBACbgJ,EAAMmS,oBAAoBD,GAE9B,IAAIE,GAAetf,MAAOwe,EAAK7O,UAAWkK,GACtC3M,EAAM1Q,OAAO+iB,wBACbrS,EAAM1Q,OAAOmc,OAAO,yBAA0B2G,GAG9Cnb,WAAS,oBAAqB+I,EAAM1Q,QAAQ0f,mBAAmB1Y,EAAG4b,GAEtElS,EAAM1Q,OAAOuS,QAAQyQ,EAAiB3W,MAG9CiR,EAAiBnX,UAAU0c,oBAAsB,SAAUD,GACvDA,EAAYzZ,YAAc,UAC1BqW,WAAS,oBAAoB,EAAMoD,GACnC,IAAIK,EAAgBtb,WAAS,qBAAsB2B,KAAKtJ,QACpDkjB,EAAcvb,WAAS,cAAesb,GACtCE,EAAWxb,WAAS,WAAYsb,GAChCC,EAAYE,UAAY9Z,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,cAAgBH,EAAYI,SAASC,OAC3Fja,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YAAcF,EAASI,OAG7DjG,EAAiBnX,UAAU6X,aAAe,WACtC1U,KAAKuU,cAAe,GAExBP,EAAiBnX,UAAUka,cAAgB,SAAUtY,EAAMyb,GAEvD,IAAK,IADDC,KACK9iB,EAAI,EAAGe,EAAMC,OAAOC,KAAKmG,GAAMlH,OAAQF,EAAIe,EAAKf,IAAK,CAC1D,IAAI+iB,EAAche,YAAWqC,EAAKpH,IAClC+iB,EAAYhgB,SAAWqE,EAAKpH,GAC5B,IAAI8C,EAAQ,EAyBZ,GAxBA6F,KAAKqU,cACAhc,OAAOwE,UAAUC,eAAeC,KAAKqd,EAAa,WACnDA,EAAYlgB,MAAQ8F,KAAKqU,eAExB3c,oBAAkB0iB,EAAYpa,KAAKtJ,OAAO0G,gBAC1Cgd,EAAYpa,KAAKtJ,OAAO8e,kBAAoBre,EAAgB6I,KAAKtJ,WAClE0jB,EAAY/gB,iBAAkB,EAC1B2G,KAAKtJ,OAAOsa,oBAAsBtZ,oBAAkBsI,KAAKtJ,OAAOkN,kBAC7DlM,oBAAkB0iB,EAAYpa,KAAKtJ,OAAO0G,eAC7Cgd,EAAYjhB,UAAW,EAGvBihB,EAAYjhB,WAAYzB,oBAAkB0iB,EAAYpa,KAAKtJ,OAAOwC,sBAC5DkhB,EAAYpa,KAAKtJ,OAAOwC,qBAGjCb,OAAOwE,UAAUC,eAAeC,KAAKqd,EAAa,WACnDA,EAAYlgB,OAAQkgB,EAAY/gB,gBAAkB2G,KAAKqU,cAEvDrU,KAAKhF,iBAAmBtD,oBAAkB0iB,EAAYpa,KAAKtJ,OAAOuG,mBAClE+C,KAAKtJ,OAAO6G,WAAW/E,KAAK4hB,GAEhCA,EAAYphB,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACvDsC,WAAS,sBAAwBkE,EAAYphB,SAAUohB,EAAapa,KAAKtJ,SACpEgB,oBAAkBwiB,GAAgB,CACnC,IAAI3c,EAAanB,YAAW8d,UACrB3c,EAAWjE,oBACXiE,EAAWyC,KAAKtJ,OAAO0G,cAC1B4C,KAAKhF,wBACEuC,EAAWnD,SAAS4F,KAAKtJ,OAAO0G,cAE3Cgd,EAAYthB,WAAayE,EACzB6c,EAAY9b,eAAiBf,EAAWvE,SACxCmB,EAAQ+f,EAAc/f,MAAQ,EAYlC,GAVK9B,OAAOwE,UAAUC,eAAeC,KAAKqd,EAAa,WACnDA,EAAYjgB,MAAQA,GAExBigB,EAAYnN,cAAgB,WACxBvV,oBAAkB0iB,EAAYpa,KAAKtJ,OAAOuG,mBAAqBmd,EAAYthB,aAC3EkH,KAAKtJ,OAAO8G,SAAShF,KAAK4hB,GAEzBpa,KAAKhF,iBAAyC,IAAtBof,EAAYjgB,OACrC6F,KAAKtJ,OAAO6G,WAAW/E,KAAK4hB,IAE3B1iB,oBAAkB0iB,EAAYpa,KAAKtJ,OAAO0G,eAAiBgd,EAAYpa,KAAKtJ,OAAO0G,cAAc7F,QAAS,CAC3G,IAAImB,EAASsH,KAAK+W,cAAcqD,EAAYpa,KAAKtJ,OAAO0G,cAAegd,GACvEA,EAAY9gB,aAAeZ,EAE/ByhB,EAAa3hB,KAAK4hB,GAEtB,OAAOD,GASXnG,EAAiBnX,UAAUiY,cAAgB,SAAU/R,GACjD,IAIIsX,EAJAC,EAAW/hB,YAAU,WAAYwK,GACjCwX,EAAahiB,YAAU,aAAcwK,GACrCyX,EAAajiB,YAAU,aAAcwK,GACrC0X,EAAaliB,YAAU,aAAcwK,GAErC2X,EAAaniB,YAAU,aAAcwK,GACrClD,EAActH,YAAU,cAAewK,GACvC4X,EAAapiB,YAAU,OAAQwK,GAC/BzH,EAAS/C,YAAU,SAAUwK,GAC7B6X,EAAgBF,EAChBG,EAAuB7a,KAAKtJ,OAAO6E,0BAA0B,GAC7Duf,EAAYviB,YAAU,OAAQqiB,GAC5BljB,oBAAkBkjB,IAAqBljB,oBAAkBkjB,EAActf,SAAsC,QAAzBsf,EAActf,QAC/F5D,oBAAkBkjB,EAAcnc,QAAU/G,oBAAkBkjB,EAAcnc,KAAKoc,MACpFD,EAAcnc,KAAKoc,GAAwB9X,EAAKgR,OAAO6G,EAAc1gB,OAAO2gB,GAC5EC,EAAU1gB,SAASygB,GAAwB9X,EAAKgR,OAAO6G,EAAc1gB,OAAO2gB,MAE1EnjB,oBAAkBgjB,IAAeriB,OAAOC,KAAKoiB,GAAYnjB,QAA2B,SAAhBsI,KACtEA,EAAcA,GAA4B6a,EAAW7a,YACrD8a,EAAaA,GAA0BpiB,YAAU,OAAQmiB,GACzDpf,EAASA,GAAkB/C,YAAU,SAAUmiB,GACT,UAAlC1a,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAK3E,aAAe2E,KAAKtJ,OAAOiB,KAAKoE,WAAWC,mBAEhDgE,KAAKtJ,OAAOqkB,aACZ/a,KAAKgb,aAAaL,EAAYrf,EAAQuE,IAU9C,IAKIob,EACAC,EANAC,GANAd,EADAC,IAAa5iB,oBAAkB6iB,GACrBA,EAGApjB,EAAgB6I,KAAKtJ,QAAU2H,WAAS,SAAU2B,KAAKtJ,OAAOiB,KAAKhB,YACvEqJ,KAAKtJ,OAAOiB,KAAKhB,sBAEMC,cAAcyjB,EAAQ1jB,WAAW8E,KAAO4e,EACrEhM,EAAQlX,EAAgB6I,KAAKtJ,QAAU2H,WAAS,QAAS2B,KAAKtJ,OAAOC,YACnEwkB,EAAQ5jB,OACVke,EAAM,IAAIP,QACV6D,EAAYxgB,YAAU,QAASwK,GAOnC,GAJKrL,oBAAkBqhB,KACnBkC,EAAclC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,YAATA,EAAEX,KAC/D2C,EAAcnC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,aAATA,EAAEX,MAE9DvY,KAAKtJ,OAAOiB,KAAKI,gBAAkBiI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC3EyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAIN,OAAS,IAAQG,oBAAkBqhB,KACvEkC,EAAY1jB,QAAU2jB,EAAY3jB,SAAWyI,KAAKtJ,OAAOqkB,YAAc,CACpErjB,oBAAkBqhB,KAClBA,EAAY,IAAI7D,QAChB6D,EAAY1a,WAAS,yBAA0B2B,KAAKtJ,QAAQukB,YAAYlC,GACxEA,EAAY1a,WAAS,yBAA0B2B,KAAKtJ,QAAQwkB,YAAYnC,IAE5E,IAAIqC,EAAYrC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,YAATA,EAAEX,KAC7D8C,EAAYtC,EAAUpD,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,aAATA,EAAEX,KACjE9C,EAAIE,QAAUyF,EAAU7hB,OAAO8hB,GAC/B,IAAIC,EAAe,IAAI1kB,cAAYukB,GAASzE,aAAajB,GAIzD,GAHAzV,KAAKtJ,OAAOmc,OAAO,oBAAsBpU,KAAM6c,IAC/CH,EAAUnb,KAAKwU,YAAYT,OAC3B/T,KAAKwU,YAAYT,OAAS,KACtB/T,KAAKtJ,OAAOiB,KAAKmhB,WAAWvhB,OAAS,EAAG,CACxC,IAAI0d,EAAQ1c,YAAU,QAASwK,GAI/B,GAHIrL,oBAAkBqhB,KAClBA,EAAY1a,WAAS,yBAA0B2B,KAAKtJ,QAAQsiB,eAAe,IAAI9D,WAE9Exd,oBAAkBud,GAAQ,CAC3B,IAAIgE,EAAehE,EAAMU,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KAChE4C,EAAUnb,KAAKtJ,OAAOyiB,cAAcC,sBAAsBH,EAAckC,GAAS,KAI7F,GAAInb,KAAKtJ,OAAOiB,KAAKmhB,WAAWvhB,QAA2D,IAAjDyI,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQC,QACtB,IAAnDyI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,SAAiByI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAIN,OAAQ,CACxG,IAAIgkB,EAAchjB,YAAU,QAASwK,GACjCrL,oBAAkB6jB,KAClBA,EAAcld,WAAS,yBAA0B2B,KAAKtJ,QAAQsiB,eAAe,IAAI9D,UAEjF+D,EAAesC,EAAY5F,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KACtE4C,EAAUnb,KAAKtJ,OAAOyiB,cAAcC,sBAAsBH,EAAcjZ,KAAKtJ,OAAO8G,UAAU,GAElG,GAAIwC,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQC,OAAS,GAAKyI,KAAKuU,aAAc,CACvEvU,KAAKuU,cAAe,EAIpB,IAAK,IAHDhX,EAAayC,KAAKtJ,OAAO6G,WAEzBie,GADAvG,EAAQ1c,YAAU,QAASwK,GAClB,IAAImS,SACRuG,EAAMzb,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQC,OAAS,EAAGkkB,GAAO,EAAGA,IAAO,CAC9E,IACI1P,EAAM/L,KAAKtJ,OAAOiB,KAAK4H,aAAad,KAAqB,iBAAEuB,KAAKtJ,OAAOiB,KACvE4G,aAAajH,QAAQmkB,GAAK7I,OAC1B8I,EAAU3P,EAAI4P,cAAgBniB,EAAUwG,KAAKtJ,QAC7CqV,EAAI4P,aAAaC,KAAK7P,GACtB/L,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQmkB,GAAKI,UAC/CL,EAAOM,OAAO9b,KAAKtJ,OAAOiB,KAAK4G,aAAajH,QAAQmkB,GAAK7I,MAAO8I,GAEpE,IACIK,GAAargB,aADE,IAAI9E,cAAY2G,GAAYmZ,aAAa8E,GACfF,aAAcH,EAASK,OAAQA,GAM5E,GALAxb,KAAKtJ,OAAOmc,OAAO,aAAckJ,GACjCZ,EAAUY,EAASrgB,aACnBsE,KAAKwU,YAAYT,OAAS,KAC1B/T,KAAKsU,WAAa6G,EAClBnb,KAAKtJ,OAAOmc,OAAO,kBACf7S,KAAKtJ,OAAOiB,KAAKmhB,WAAWvhB,OAAS,IAAMG,oBAAkBud,GAAQ,CAGjEgE,EADU1gB,YAAU,QAASwK,GACN4S,QAAQlY,OAAO,SAAUyb,GAAK,MAAgB,iBAATA,EAAEX,KAClE4C,EAAUnb,KAAKtJ,OAAOyiB,cAAcC,sBAAsBH,EAAcjZ,KAAKsU,YAHhE,IAMrBjG,EAAQlX,EAAgB6I,KAAKtJ,QAAU2H,WAAS,QAAS2B,KAAKtJ,OAAOC,YAC/DwkB,EAAQ5jB,OACd,IAAIykB,EAAOhc,KAAKic,OAAOd,EAAS9M,EAAOiM,EAAUG,EAAYD,EAAYzX,GACzEoY,EAAUa,EAAKjI,OACf1F,EAAQ2N,EAAK3N,MACbtL,EAAKgR,OAASoH,EACdpY,EAAKsL,MAAQA,EACbrO,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,IAExCiR,EAAiBnX,UAAUof,OAAS,SAAUd,EAAS9M,EAAOiM,EAAUG,EAAYD,EAAYzX,GAC5F,IAAI/C,KAAKtJ,OAAOma,aAAiByJ,GAA2B,gBAAfE,GACpCC,GAAwC,gBAA1Bza,KAAKtJ,OAAOwlB,WAM9B,IAAKlc,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,4BAA8Ba,GAA2B,gBAAfE,IAC3D,SAAlCnc,WAAS,cAAe0E,GAAkB,CAC7C,IAAIoZ,EAAUnc,KAAKtJ,OAAO+iB,wBAA0B1W,EAAO1E,WAAS,aAAc0E,GAClF/C,KAAKtJ,OAAOmc,OAAOuJ,GAAwBrI,OAAQoH,EAAS9M,MAAOA,EAAOqM,WAAYyB,IACtFhB,EAAUnb,KAAKwU,YAAYT,OAC3B1F,EAAQrO,KAAKwU,YAAYnG,YAVzBrO,KAAKtJ,OAAOmc,OAAOuJ,GAAwBrI,OAAQoH,EAAS9M,MAAOA,IACnE8M,EAAUnb,KAAKwU,YAAYT,OAC3B1F,EAAQlX,EAAgB6I,KAAKtJ,QAAU2H,WAAS,QAAS2B,KAAKtJ,OAAOC,YAC/DqJ,KAAKwU,YAAYnG,MAS3B,IACIgO,EAA0B,0BAC9B,KAAoB,IAAf5B,GAAwB1X,EAAgB,cAAMrL,oBAAkBqL,EAAKsZ,KACnEtZ,EAAKsZ,MAAyD,aAA1Brc,KAAKtJ,OAAOwlB,UAA0B,CAE7E,IAAK,IADDI,KACKjlB,EAAI,EAAGA,EAAI8jB,EAAQ5jB,OAAQF,IAAK,CAClBoB,EAAgBuH,KAAKtJ,OAAQykB,EAAQ9jB,GAAI2I,KAAKtJ,OAAO6G,aAEpE+e,EAAc9jB,KAAK2iB,EAAQ9jB,IAInCgX,GADA8M,EAAUmB,GACM/kB,OAGpB,OADcwc,OAAQoH,EAAS9M,MAAOA,IAG1C2F,EAAiBnX,UAAU8X,WAAa,SAAU4H,GAC9Cvc,KAAKwU,YAAc+H,GAEvBvI,EAAiBnX,UAAUme,aAAe,SAAUL,EAAYrf,EAAQuE,GAC/C,WAAhBA,GAA4C,SAAhBA,GAC7BG,KAAKtJ,OAAOmc,OAAO2J,IAAqBviB,MAAO0gB,EAAYrf,OAAQA,GAAUuE,IAE7D,cAAhBA,GAAiE,UAAlCG,KAAKtJ,OAAOmF,aAAaC,MACxDkE,KAAKtJ,OAAOmc,OAAO4J,QAGpBzI,MC7kBX,SAAW0I,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,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAmB,MAAI,IAAM,QACzCA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAwB,WAAI,IAAM,aAdlD,CAeGA,gBAAgBA,mBAOnB,SAAWC,GACPA,EAAiBA,EAA0B,QAAI,GAAK,UACpDA,EAAiBA,EAA6B,WAAI,GAAK,aACvDA,EAAiBA,EAAgC,cAAI,GAAK,gBAC1DA,EAAiBA,EAAiC,eAAI,GAAK,iBAC3DA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAA4B,UAAI,GAAK,YACtDA,EAAiBA,EAA8B,YAAI,GAAK,cACxDA,EAAiBA,EAA4B,UAAI,IAAM,YACvDA,EAAiBA,EAA4B,UAAI,IAAM,YACvDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAAyB,OAAI,IAAM,SAhBxD,CAiBGA,qBAAqBA,wBC7CxB,IAAIlc,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Dob,GAA8B,SAAU9a,GAExC,SAAS8a,IACL,OAAkB,OAAX9a,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KA0B/D,OA5BAS,GAAUmc,EAAc9a,GAIxBZ,IACIc,WAAS,KACV4a,EAAa/f,UAAW,gBAAY,GACvCqE,IACIc,WAAS,IACV4a,EAAa/f,UAAW,iBAAa,GACxCqE,IACIc,WAAS,IACV4a,EAAa/f,UAAW,mBAAe,GAC1CqE,IACIc,cACD4a,EAAa/f,UAAW,yBAAqB,GAChDqE,IACIc,YAAS,IACV4a,EAAa/f,UAAW,yBAAqB,GAChDqE,IACIc,YAAS,IACV4a,EAAa/f,UAAW,iBAAa,GACxCqE,IACIc,WAAS,OACV4a,EAAa/f,UAAW,gBAAY,GACvCqE,IACIc,WAAS,QACV4a,EAAa/f,UAAW,oBAAgB,GACpC+f,GACT3a,iBCrDExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAQ5Dqb,GAAiC,SAAU/a,GAE3C,SAAS+a,IACL,IAAIzV,EAAmB,OAAXtF,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAGhE,OAFAoH,EAAM0V,KAAO,IAAIC,uBACjB3V,EAAM+L,cACC/L,EAiFX,OAtFA3G,GAAUoc,EAAiB/a,GAe3B+a,EAAgBhgB,UAAUmgB,aAAe,SAAUC,GAC3Cjd,KAAKkd,SAAWld,KAAKkd,OAAOC,UAAYnd,KAAKkd,OAAOA,UACpDld,KAAKod,SAAWpd,KAAKqd,kBAAkBrd,KAAKkd,UAQpDL,EAAgBhgB,UAAUwgB,kBAAoB,SAAUH,GACpD,OAAIA,EAAOla,KACAhD,KAAK8c,KAAKQ,cAAcJ,GAGxBld,KAAK8c,KAAKS,gBAAgBL,IAOzCL,EAAgBhgB,UAAU2gB,aAAe,WACrC,OAAOxd,KAAKod,UAOhBP,EAAgBhgB,UAAU4gB,YAAc,SAAUC,QAC/B,IAAXA,IAAqBA,WACGC,IAAxB3d,KAAK4d,iBACL5d,KAAKmT,WAAW0K,eAAaC,WAAUA,WAASC,WAAcxF,GAAIyF,UAAQhe,KAAK4d,eAAgBF,GAC3FO,SAAU,oBAQtBpB,EAAgBhgB,UAAUqhB,YAAc,SAAUlb,GAC9C,OAAOhD,KAAKmT,WAAW0K,eAAaC,WAAU9a,KAOlD6Z,EAAgBhgB,UAAUshB,oBAAsB,SAAUC,GACtDpe,KAAKqe,cAAcD,GAAM,IAE7Bld,IACIc,cACD6a,EAAgBhgB,UAAW,YAAQ,GACtCqE,IACIc,cACD6a,EAAgBhgB,UAAW,sBAAkB,GAChDqE,IACIc,cACD6a,EAAgBhgB,UAAW,aAAS,GACvCqE,IACIc,cACD6a,EAAgBhgB,UAAW,cAAU,GACxCqE,IACIc,cACD6a,EAAgBhgB,UAAW,kBAAc,GAC5CqE,IACIc,cACD6a,EAAgBhgB,UAAW,uBAAmB,GAC1CggB,GACT5a,iBAEEqc,GAA8B,SAAUxc,GAExC,SAASwc,IACL,OAAkB,OAAXxc,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAQ/D,OAVAS,GAAU6d,EAAcxc,GAIxBZ,IACIiB,gBAAe0a,KAChByB,EAAazhB,UAAW,eAAW,GACtCqE,IACIc,YAAS,IACVsc,EAAazhB,UAAW,wBAAoB,GACxCyhB,GACTrc,iBC/HExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5D+c,GAA8B,SAAUzc,GAExC,SAASyc,IACL,OAAkB,OAAXzc,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAmC/D,OArCAS,GAAU8d,EAAczc,GAIxBZ,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,mBAAe,GAC1CqE,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,oBAAgB,GAC3CqE,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,qBAAiB,GAC5CqE,IACIc,WAAS,SACVuc,EAAa1hB,UAAW,YAAQ,GACnCqE,IACIc,WAAS,QACVuc,EAAa1hB,UAAW,sBAAkB,GAC7CqE,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,2BAAuB,GAClDqE,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,yBAAqB,GAChDqE,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,+BAA2B,GACtDqE,IACIc,WAAS,KACVuc,EAAa1hB,UAAW,gBAAY,GACvCqE,IACIc,gBACDuc,EAAa1hB,UAAW,cAAU,GACrCqE,IACIc,YAAS,IACVuc,EAAa1hB,UAAW,wBAAoB,GACxC0hB,GACTtc,iBC9DExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Dgd,GAAgC,SAAU1c,GAE1C,SAAS0c,IACL,OAAkB,OAAX1c,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAQ/D,OAVAS,GAAU+d,EAAgB1c,GAI1BZ,IACIc,cACDwc,EAAe3hB,UAAW,aAAS,GACtCqE,IACIc,cACDwc,EAAe3hB,UAAW,iBAAa,GACnC2hB,GACTvc,iBAKEwc,GAA8B,SAAU3c,GAExC,SAAS2c,IACL,OAAkB,OAAX3c,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAQ/D,OAVAS,GAAUge,EAAc3c,GAIxBZ,IACIiB,gBAAeqc,KAChBC,EAAa5hB,UAAW,eAAW,GACtCqE,IACIc,YAAS,IACVyc,EAAa5hB,UAAW,mBAAe,GACnC4hB,GACTxc,iBCpDExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Dkd,GAAwC,SAAU5c,GAElD,SAAS4c,IACL,OAAkB,OAAX5c,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAW/D,OAbAS,GAAUie,EAAwB5c,GAIlCZ,IACIc,YAAS,IACV0c,EAAuB7hB,UAAW,mBAAe,GACpDqE,IACIc,WAAS,IACV0c,EAAuB7hB,UAAW,iBAAa,GAClDqE,IACIc,WAAS,IACV0c,EAAuB7hB,UAAW,qBAAiB,GAC/C6hB,GACTzc,iBCtCExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GA0C5Dmd,GAA0B,SAAU7c,GAEpC,SAAS6c,EAAS5e,EAAS4T,GACvB,IAAIvM,EAAQtF,EAAO/E,KAAKiD,KAAMD,EAAS4T,IAAY3T,KACnDoH,EAAMoN,eACNpN,EAAMwX,sBACNxX,EAAMyX,4BACNzX,EAAM0X,eAAiB,iBACvB1X,EAAM2X,eAAiB,iBACvB3X,EAAM6M,aAAe,eACrB7M,EAAM4X,sBAAwB,SAAUC,EAAKC,GACzC,GAAID,EAAK,CAIL,IAAK,IAHD3mB,EAAOD,OAAOC,KAAK2mB,GACnBE,GAAU,EACVC,GAAe,WAAY,eAAgB,WAAY,WAAY,aAAc,iBAAkB,SAC9F/nB,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAC7B,GAAI4nB,EAAI3mB,EAAKjB,MAAQ6nB,EAAQ5mB,EAAKjB,MAAyC,IAAlC+nB,EAAY5gB,QAAQlG,EAAKjB,IAAY,CAE1E,KADa4nB,EAAI3mB,EAAKjB,cAAegoB,MAAQH,EAAQ5mB,EAAKjB,cAAegoB,OACzDJ,EAAI3mB,EAAKjB,IAAIioB,YAAcJ,EAAQ5mB,EAAKjB,IAAIioB,UAAY,CACpEH,GAAU,EACV,OAIZ,OAAOA,EAGP,OAAO,GAGfI,EAAW7c,OAAO8c,IAClBtJ,WAAS,mBAAoB9O,EAAMqY,yBAA0BrY,GAM7D,OAJK1P,oBAAkB0P,EAAMsY,gBAAsB,SAC/Cjd,OAAKC,OAAOF,UAEhB4E,EAAMzP,KAAO,IAAI8K,OACV2E,EApCX3G,GAAUke,EAAU7c,GAsCpByd,EAAaZ,EAWbA,EAAS9hB,UAAU8iB,YAAc,SAAUC,EAAuBC,EAAkBC,EAAUC,GAE1F,OAAO/f,KAAKggB,kBAAkBC,IAAIL,EAAuBC,EAAkBC,EAAUC,GAAQ,IAYjGpB,EAAS9hB,UAAUqjB,UAAY,SAAUN,EAAuBC,EAAkBC,EAAUC,GAExF,OAAO/f,KAAKggB,kBAAkBC,IAAIL,EAAuBC,EAAkBC,EAAUC,GAAQ,IAWjGpB,EAAS9hB,UAAUsjB,UAAY,SAAUC,EAAqBP,EAAkBQ,EAAQN,GACpF,OAAO/f,KAAKsgB,gBAAgBL,IAAIG,EAAqBP,EAAkBQ,EAAQN,IAQnFpB,EAAS9hB,UAAU+F,cAAgB,WAC/B,MAAO,YAQX+b,EAAS9hB,UAAU0jB,UAAY,WAC3BvgB,KAAKwgB,iBACLxgB,KAAKygB,iBACLzgB,KAAK0gB,eACDC,MAAO,QACPC,MAAO,QACPC,MAAO,QACPC,OAAQ,UACRC,UAAW,aACXC,YAAa,eACbC,UAAW,SACXC,WAAY,WAEhBlhB,KAAKmhB,KAAO,IAAIC,OAAK,WAAYphB,KAAK0gB,cAAe1gB,KAAKqhB,QACtDrhB,KAAKhF,iBAAmBtD,oBAAkBsI,KAAK5C,gBAC/C4C,KAAK5C,aAAe,aAW5BuhB,EAAS9hB,UAAUykB,aAAe,SAAUnmB,EAAY0gB,EAAW0F,GAC/DvhB,KAAKwhB,WAAWC,WAAWtmB,EAAY0gB,EAAW0F,IAOtD5C,EAAS9hB,UAAU6kB,aAAe,WAC1B1hB,KAAKwhB,YACLxhB,KAAKwhB,WAAWE,gBAUxB/C,EAAS9hB,UAAU8kB,iBAAmB,SAAU/O,GAC5C5S,KAAKwhB,WAAWG,iBAAiB/O,IAUrC+L,EAAS9hB,UAAU+kB,OAAS,SAAUC,GAClC7hB,KAAKrI,KAAKiqB,OAAOC,IAarBlD,EAAS9hB,UAAUilB,eAAiB,SAAUC,GAC1C/hB,KAAKgiB,aAAaF,eAAeC,GACjC/hB,KAAKiiB,qBASTtD,EAAS9hB,UAAUqlB,eAAiB,SAAUC,EAAWC,GACrDpiB,KAAKrI,KAAKuqB,eAAeC,EAAWC,IAExCzD,EAAS9hB,UAAU2jB,eAAiB,WAEhC,IAAIa,EAASD,OAAKC,OACdgB,KACJnM,WAASlW,KAAKqhB,UAAYgB,GAC1B,IAAIC,EACJA,KACAA,EAAa/pB,YAAUyH,KAAKqhB,OAAQA,GACpC,IAAIkB,EACJA,KACAA,EAAiBhqB,YAAUyH,KAAK4C,gBAAiB0f,GACjDpM,WAAS,OAAQqM,EAAgBhqB,YAAUyH,KAAKqhB,OAAQgB,IACxDjB,OAAKoB,KAAKH,IASd1D,EAAS9hB,UAAUwT,MAAQ,WACvBrQ,KAAKyiB,YAAYpS,SAErBsO,EAAS9hB,UAAU6lB,yBAA2B,SAAUhlB,GACpD,GAAIsC,KAAK2iB,cAAe,CACpB,IACIC,OAAe,EAEfjkB,OAAM,EACNkkB,OAAiB,EACrB,OAAQnlB,EAAEpC,QACN,IAAK,gBACD0E,KAAK8iB,YACL,MACJ,IAAK,cACD9iB,KAAK+iB,cACL,MACJ,IAAK,mBAIW,QADZpkB,EAFSjB,EAAE0D,OACK2J,QAAQ,cACXA,QAAQ,aACO4S,IAARhf,GAChBqB,KAAKgjB,sBAAsBrkB,EAAImM,cAAc,sBAEjD,MACJ,IAAK,qBAIW,QADZnM,EAFSjB,EAAE0D,OACK2J,QAAQ,cACXA,QAAQ,aACO4S,IAARhf,GAChBqB,KAAKgjB,sBAAsBrkB,EAAImM,cAAc,wBAEjD,MACJ,IAAK,YACD,IAAK9K,KAAK5B,qBAGN,GAFAwkB,EAAellB,EAAE0D,OAAO6hB,cAED,QADvBJ,EAAiB7iB,KAAKkjB,mBAAmBN,IACZ,CACzB,IAAIlZ,EAAWmZ,EAAenZ,SAC9B1J,KAAKmjB,UAAUzZ,GACf,IAAI0Z,EAAY1lB,EAAE0D,OAAOgiB,UACrBC,EAAQR,EAAepP,SAAS2P,GACpChT,YAAUiT,GAAQ,aAClBjT,YAAUiT,GAAQ,gBAGlBrjB,KAAKsjB,iBAGb,MACJ,IAAK,UACD,IAAKtjB,KAAK5B,qBAGN,GAFAwkB,EAAellB,EAAE0D,OAAO6hB,cAED,QADvBJ,EAAiB7iB,KAAKujB,uBAAuBX,IAChB,CACzB,IAAIY,EAASX,EAAenZ,SAC5B1J,KAAKmjB,UAAUK,GACf,IAAIC,EAAS/lB,EAAE0D,OAAOgiB,UAClBtb,EAAO+a,EAAepP,SAASgQ,GACnCrT,YAAUtI,GAAO,aACjBsI,YAAUtI,GAAO,gBAGjB9H,KAAKsjB,oBAO7B3E,EAAS9hB,UAAUqmB,mBAAqB,SAAUQ,GAC9C,IAAInY,EAAamY,EAAkBxY,mBAKnC,OAJmB,OAAfK,IAA0E,IAAlDA,EAAWgB,UAAU/N,QAAQ,iBACxB,SAA7B+M,EAAW/Q,MAAMG,UACjB4Q,EAAavL,KAAKkjB,mBAAmB3X,IAElCA,GAGXoT,EAAS9hB,UAAU0mB,uBAAyB,SAAUG,GAClD,IAAInY,EAAamY,EAAkBC,uBAKnC,OAJmB,OAAfpY,IAA0E,IAAlDA,EAAWgB,UAAU/N,QAAQ,iBACxB,SAA7B+M,EAAW/Q,MAAMG,UACjB4Q,EAAavL,KAAKujB,uBAAuBhY,IAEtCA,GAEXoT,EAAS9hB,UAAU4jB,eAAiB,WAChCzgB,KAAK0gB,iBACL1gB,KAAKxC,YACLwC,KAAKzC,cACLyC,KAAK4jB,eACL5jB,KAAK6jB,aAAc,EACnB7jB,KAAK8jB,eAAgB,EACrB9jB,KAAK+jB,YACDC,cAAe,iBACfC,YAAa,eACbC,iBAAkB,qBAClBC,mBAAoB,uBACpBC,UAAW,YACXC,QAAS,WAEbrkB,KAAK+a,cAAiB/a,KAAKrJ,sBAAsBC,gBAAgBoJ,KAAKrJ,WAAWA,WAAW2tB,UACnF5sB,oBAAkBsI,KAAKrJ,WAAW+C,QAAWsG,KAAKrJ,WAAWE,mBAAmB0tB,oBACzFvkB,KAAKhF,iBAAmBtD,oBAAkBsI,KAAK/C,kBAQnD0hB,EAAS9hB,UAAU2nB,WAAa,WAC5BC,eAAa9X,IAAI3M,KAAKrI,KAAKgc,QAAS,QAAS3T,KAAK0kB,kBAAmB1kB,MACrEykB,eAAa9X,IAAI3M,KAAK2T,QAAS,WAAY3T,KAAK0kB,kBAAmB1kB,MACnEA,KAAK2kB,eAAiB,IAAIC,iBAAe5kB,KAAK2T,SAC1CkR,UAAW7kB,KAAK0iB,yBAAyB9G,KAAK5b,MAC9C+jB,WAAY/jB,KAAK+jB,WACjBe,UAAW,YAEX9kB,KAAK2iB,gBACL3iB,KAAK2T,QAAQoR,UAAsC,IAA3B/kB,KAAK2T,QAAQoR,SAAkB,EAAI/kB,KAAK2T,QAAQoR,WAShFpG,EAAS9hB,UAAUmoB,gBAAkB,WACjC,IAAIC,KAGJ,OADAjlB,KAAKrI,KAAqB,iBAAEqI,KAAKklB,eAAellB,KAAK1I,UACjD0I,KAAKyK,YACEwa,GAEXA,EAAQzsB,MACJ2sB,OAAQ,SAAUpiB,MAAO/C,KAAMA,KAAKhI,kBAEnCN,oBAAkBsI,KAAKolB,UACxBH,EAAQzsB,MACJ2sB,OAAQ,UACRpiB,MAAO/C,QAGXA,KAAKqlB,kBACLJ,EAAQzsB,MACJ2sB,OAAQ,cACRpiB,MAAO/C,QAGXA,KAAK6Q,aACLoU,EAAQzsB,MACJ2sB,OAAQ,QACRpiB,MAAO/C,KAAMA,KAAK8Q,gBAGtB9Q,KAAKI,iBACL6kB,EAAQzsB,MACJ2sB,OAAQ,UACRpiB,MAAO/C,QAGXA,KAAKM,cACL2kB,EAAQzsB,MACJ2sB,OAAQ,OACRpiB,MAAO/C,QAGXA,KAAK8Y,WAAWvhB,OAAS,GACzB0tB,EAAQzsB,MACJ2sB,OAAQ,UAAWpiB,MAAO/C,QAGlCilB,EAAQzsB,MACJ2sB,OAAQ,SAAUpiB,MAAO/C,QAEzBA,KAAKslB,kBACLL,EAAQzsB,MACJ2sB,OAAQ,cAAepiB,MAAO/C,SAGlCA,KAAKyR,eAAiBzR,KAAKhB,YAAcgB,KAAKf,oBAC9Ce,KAAKrI,KAAKya,6BAA+BpS,KAAKrI,KAAK0a,+BACnD4S,EAAQzsB,MACJ2sB,OAAQ,SAAUpiB,MAAO/C,QAG7BA,KAAKulB,gBACLN,EAAQzsB,MACJ2sB,OAAQ,YAAapiB,MAAO/C,QAGhCA,KAAKwlB,gBACLP,EAAQzsB,MACJ2sB,OAAQ,YAAapiB,MAAO/C,QAGhCA,KAAKK,gBACL4kB,EAAQzsB,MACJ2sB,OAAQ,aAAcpiB,MAAO/C,QAGjCA,KAAKylB,mBACLR,EAAQzsB,MACJ2sB,OAAQ,gBAAiBpiB,MAAO/C,QAGxCA,KAAK0lB,sBAAsBT,GACpBA,IAEXtG,EAAS9hB,UAAU6oB,sBAAwB,SAAUT,GAC7CjlB,KAAKX,qBACL4lB,EAAQzsB,MACJ2sB,OAAQ,iBACRpiB,MAAO/C,SAGXA,KAAKnE,aAAa8pB,aAAe3lB,KAAKnE,aAAa+pB,eAAiB5lB,KAAKnE,aAAaoE,eACtFglB,EAAQzsB,MACJ2sB,OAAQ,OACRpiB,MAAO/C,QAGXA,KAAK6lB,gBAAgB7lB,KAAK1I,UAC1B2tB,EAAQzsB,MACJ2sB,OAAQ,gBACRpiB,MAAO/C,QAGXA,KAAK8lB,gBACLb,EAAQzsB,MACJ2sB,OAAQ,YACRpiB,MAAO/C,QAGXA,KAAK5B,sBACL6mB,EAAQzsB,MACJ2sB,OAAQ,gBACRpiB,MAAO/C,QAGXA,KAAKyZ,yBACLwL,EAAQzsB,MACJ2sB,OAAQ,iBACRpiB,MAAO/C,QAGfilB,EAAQzsB,MACJ2sB,OAAQ,SACRpiB,MAAO/C,KAAKrI,SAGpBgnB,EAAS9hB,UAAUgpB,gBAAkB,SAAUvuB,GAC3C,IAAI8P,EAAQpH,KACZ,OAAO1I,EAAQyuB,KAAK,SAAUha,GAC1B,OAAIA,EAAIzU,QACG8P,EAAMye,gBAAgB9Z,EAAIzU,YAE3ByU,EAAIia,WAAYja,EAAIka,qBAStCtH,EAAS9hB,UAAUqpB,aAAe,WAC1BlmB,KAAKrI,MAAQqI,KAAKrI,KAAKgc,SACvB8Q,eAAa0B,OAAOnmB,KAAKrI,KAAKgc,QAAS,QAAS3T,KAAK0kB,oBAY7D/F,EAAS9hB,UAAUgG,IAAM,SAAUC,EAAOC,GAClC/C,KAAKomB,cACLpmB,KAAKomB,aAAariB,QAAQjB,EAAOC,EAAM/C,OAS/C2e,EAAS9hB,UAAUwpB,OAAS,WACxB,IAAIjf,EAAQpH,KACRA,KAAK8T,UACL9T,KAAKrI,KAAKmc,SAAU,EACpB9T,KAAKrI,KAAKkc,YAEdyS,iBAAgBllB,OAAQpB,KAAK2T,SAAW3T,KAAKsM,eAC7CtM,KAAK6C,KAAK,2BACV7C,KAAKT,aAAe,IAAIiR,GAAOxQ,MAC/BA,KAAKumB,WAAa,IAAIvS,GAAiBhU,MACvCA,KAAKyiB,YAAc,IAAI9S,GAAM3P,MAC7BA,KAAKiJ,QdljBK,QcmjBVjJ,KAAKwmB,sBACLxmB,KAAK/G,eAAgB,EAChBvB,oBAAkBsI,KAAKrJ,aACxBqJ,KAAKymB,gBAAgBzmB,KAAKrJ,YAE9BqJ,KAAK0mB,WACD1mB,KAAK2T,QAAQvL,UAAUC,SAAS,eAAiBrI,KAAK2mB,gBAAgBC,WACtE5mB,KAAKrI,KAAKgvB,gBAAgBC,UAAY,gBAE1C5mB,KAAK6mB,cACL,IAAIC,EAAgBxa,gBAAc,OAASsH,GAAI5T,KAAK2T,QAAQC,GAAK,iBACjExD,YAAUpQ,KAAK2T,SAAU,cACpBjc,oBAAkBsI,KAAK+mB,SAAoC,iBAAjB/mB,KAAW,SAAgD,IAA9BA,KAAK+mB,OAAOvoB,QAAQ,OAC5FwB,KAAK2T,QAAQnZ,MAAMusB,OAAS/mB,KAAK+mB,QAEhCrvB,oBAAkBsI,KAAKmN,QAAkC,iBAAhBnN,KAAU,QAA+C,IAA7BA,KAAKmN,MAAM3O,QAAQ,OACzFwB,KAAK2T,QAAQnZ,MAAM2S,MAAQnN,KAAKmN,OAEpCnN,KAAK2T,QAAQhG,YAAYmZ,GACzB,IAAIE,EAAsBhnB,KAAKrI,KAAKqtB,gBACpChlB,KAAKrI,KAAKqtB,gBAAkB,WACxB,IAAIC,KACJA,EAAU+B,EAAoBjlB,MAAM/B,MACpC,IAAK,IAAI3I,EAAI,EAAGA,EAAI4tB,EAAQ1tB,OAAQF,IACN,kBAAtB4tB,EAAQ5tB,GAAG8tB,SACXF,EAAQ5tB,GAAG8tB,OAAS,qBAG5B,OAAOF,GAEXjlB,KAAKrI,KAAKsvB,SAASH,GACnB9mB,KAAKwkB,aACLxkB,KAAKknB,iBACL,IACIC,EAAoBnnB,KAAKrI,KAAoB,gBAEjDqI,KAAKrI,KAAoB,gBAAI,SAAUoL,EAAM7I,GACzCitB,EAAkBplB,MAAMqF,EAAMzP,MAExByP,EAAM0M,SAAWpc,oBAAkB0P,EAAa,UAClDA,EAAMggB,cAAcrkB,EAAM7I,KAItCykB,EAAS9hB,UAAUwqB,gBAAkB,WAC5B3vB,oBAAkBsI,KAAKrI,KAAK2vB,kBAC7BtnB,KAAKrI,KAAK2vB,gBAAgB1d,UAE9B5J,KAAKsnB,gBAAkBtnB,KAAKrI,KAAK2vB,gBAAkB,IAAIngB,GAAcnH,OAEzE2e,EAAS9hB,UAAU4pB,gBAAkB,SAAUhoB,GAC3C,IAAI2I,EAAQpH,KAIZ,GAHI7I,EAAgB6I,QAChBvB,EAAOJ,WAAS,SAAUI,IAE1BA,aAAgB/B,OAAS+B,EAAKlH,OAAS,GAAKc,OAAOwE,UAAUC,eAAeC,KAAK0B,EAAK,GAAI,SAC1FuB,KAAKxC,SAAWiB,EAChBuB,KAAKxC,SAASC,OAAO,SAAUC,GAC3BwY,WAAS,sBAAwBxY,EAAE1E,SAAU0E,EAAG0J,GAChC,IAAZ1J,EAAEvD,OACFiN,EAAM7J,WAAW/E,KAAKkF,UAK9B,GAAIvG,EAAgB6I,MAAO,CACvB,IAAIunB,EAAWlpB,WAAS,SAAU2B,KAAKrJ,YACvCqJ,KAAKumB,WAAWvR,kBAAkBuS,QAGlCvnB,KAAKumB,WAAWvR,kBAAkBvW,IAa9CkgB,EAAS9hB,UAAU2qB,mBAAqB,WACpCxnB,KAAKynB,mBACLznB,KAAKrI,KAAK+vB,UAAY1nB,KAAK0nB,UAC3B1nB,KAAKrI,KAAKgrB,cAAgB3iB,KAAK2iB,cAC/B3iB,KAAKrI,KAAKL,QAAU0I,KAAKklB,eAAellB,KAAK1I,SAC7C0I,KAAKrI,KAAK2tB,iBAAmBtlB,KAAKslB,iBAClCtlB,KAAKrI,KAAK6tB,eAAiBxlB,KAAKwlB,eAChCxlB,KAAKrI,KAAKsd,MAAQjV,KAAKiV,MACvBjV,KAAKrI,KAAKgwB,gBAAkB3nB,KAAK2nB,gBACjC3nB,KAAKrI,KAAKkZ,YAAc7Q,KAAK6Q,YAC7B7Q,KAAKrI,KAAKmZ,aAAe8W,sBAAoB5nB,KAAK8Q,cAClD9Q,KAAKrI,KAAKkwB,cAAgB7nB,KAAK6nB,cAC/B7nB,KAAKrI,KAAK0I,eAAiBL,KAAKK,eAChCL,KAAKrI,KAAK2I,aAAeN,KAAKM,aAC9BN,KAAKrI,KAAKI,eAAiBiI,KAAKjI,eAChCiI,KAAKrI,KAAKyG,qBAAuB4B,KAAK5B,qBACtC4B,KAAKrI,KAAK+Z,2BAA6B1R,KAAK0R,2BAC5C1R,KAAKrI,KAAK8hB,wBAA0BzZ,KAAKyZ,wBACzCzZ,KAAKrI,KAAKmwB,uBAAyB9nB,KAAK8nB,uBACxC9nB,KAAKrI,KAAKwV,MAAQnN,KAAKmN,MACvBnN,KAAKrI,KAAKovB,OAAS/mB,KAAK+mB,OACxB/mB,KAAKrI,KAAKowB,aAAe/nB,KAAK+nB,aAC9B/nB,KAAKrI,KAAKyI,gBAAkBJ,KAAKI,gBACjCJ,KAAKrI,KAAKuV,cAAgBlN,KAAKkN,cAC/BlN,KAAKrI,KAAK4I,cAAgBP,KAAKO,cAC/BP,KAAKrI,KAAKqwB,YAAchoB,KAAKgoB,YAC7BhoB,KAAKrI,KAAKswB,eAAiBjoB,KAAKioB,eAChCjoB,KAAKrI,KAAK2H,oBAAsBU,KAAKV,oBACrCU,KAAKrI,KAAK0H,oBAAsBW,KAAKX,oBACrCW,KAAKrI,KAAKgvB,gBAAkBiB,sBAAoB5nB,KAAK2mB,iBACrD3mB,KAAKrI,KAAKuwB,UAAYloB,KAAKkoB,UAC3BloB,KAAKrI,KAAKwwB,UAAYnoB,KAAKmoB,UAC3BnoB,KAAKrI,KAAKmuB,eAAiB9lB,KAAK8lB,eAChC9lB,KAAKrI,KAAKytB,QAAUwC,sBAAoB5nB,KAAKooB,kBAC7CpoB,KAAKrI,KAAK0wB,gBAAkBroB,KAAKqoB,gBACjCroB,KAAKrI,KAAK8tB,kBAAoBzlB,KAAKylB,kBACnCzlB,KAAKrI,KAAKK,eAAiB4vB,sBAAoB5nB,KAAKhI,gBACpDgI,KAAKrI,KAAKoQ,kBAAoB6f,sBAAoB5nB,KAAK+H,mBACvD/H,KAAKrI,KAAK4G,aAAeqpB,sBAAoB5nB,KAAKzB,cAClDyB,KAAKrI,KAAKC,eAAiBgwB,sBAAoB5nB,KAAKpI,gBACpDoI,KAAKrI,KAAKmhB,WAAa8O,sBAAoB5nB,KAAK8Y,YAChD9Y,KAAKrI,KAAK2wB,iBAAmBV,sBAAoB5nB,KAAKsoB,kBACtDtoB,KAAKrI,KAAKukB,UAAY0L,sBAAoB5nB,KAAKkc,WAC/Clc,KAAKrI,KAAK0pB,OAASuG,sBAAoB5nB,KAAKqhB,QAC5CrhB,KAAKrI,KAAK4wB,iBAAmBvoB,KAAKuoB,iBAClCvoB,KAAKrI,KAAK0tB,iBAAmBuC,sBAAoB5nB,KAAKwoB,kBACtDxoB,KAAKrI,KAAK8wB,gBAAkBb,sBAAoB5nB,KAAKyoB,iBACrDzoB,KAAKrI,KAAKkE,aAAemE,KAAK0oB,sBAC9B1oB,KAAKrI,KAAKsb,YAAc2U,sBAAoB5nB,KAAKiT,aACjDjT,KAAKrI,KAAK4tB,eAAiBqC,sBAAoB5nB,KAAKulB,gBACpDvlB,KAAKrI,KAAKqH,WAAagB,KAAKhB,WAC5BgB,KAAKrI,KAAK8Z,cAAgBzR,KAAKyR,cAC/BzR,KAAKrI,KAAKgxB,SAAWf,sBAAoB5nB,KAAK2oB,UAC9C,IAAIC,EAAmB,yBACvB5oB,KAAKrI,KAAKixB,GAAoB5oB,KAAK4oB,GAEnC5oB,KAAKrI,KAAkB,eAAI,GAE/BgnB,EAAS9hB,UAAUgsB,cAAgB,SAAU9lB,GACzC/C,KAAKiJ,QAAQ1Q,YAAU,OAAQwK,GAAOA,IAE1C4b,EAAS9hB,UAAUisB,eAAiB,WAChC,IAAI1hB,EAAQpH,KACZA,KAAKrI,KAAKoxB,aAAe,SAAUhmB,GAC1BrL,oBAAkBqL,EAAK3B,WAAY2B,EAAK3B,OAAOgH,UAAUC,SAAS,qBAChEtF,EAAK3B,OAAOgH,UAAUC,SAAS,uBAAyBtF,EAAK3B,OAAOgH,UAAUC,SAAS,kBAI9FjB,EAAM6B,Qd3rBQ,ec2rBqBlG,GAH/BA,EAAKiG,QAAS,GAKtBhJ,KAAKrI,KAAKgN,YAAc,SAAU5B,GAC9B,GAAIqE,EAAMhJ,sBAAwB2E,EAAKimB,yBACnC5hB,EAAMzP,KAAK8gB,gBAAgBlhB,SAAW6P,EAAMzP,KAAKsxB,gBAAgBC,mBAAmB3xB,OAEpF,IAAK,IAAIF,EAAI,EAAGA,EAAI+P,EAAMvI,UAAUtH,OAAQF,IACpC+P,EAAMvI,UAAUxH,GAAGwgB,uBAAuB,6BAA6BtgB,QACvE6P,EAAMzP,KAAKsxB,gBAAkC,mBAAE7hB,EAAMvI,UAAUxH,GAAI+P,EAAMjL,wBAAwB9E,GAAG6C,OAIhHkN,EAAMmhB,iBAAmBnhB,EAAMzP,KAAK4wB,iBACpCnhB,EAAMyL,OAAOsW,EAAoBpmB,GACjCqE,EAAM6B,QAAQkgB,EAAoBpmB,IAEtC/C,KAAKrI,KAAKkN,cAAgB,SAAU9B,GAChCqE,EAAMmhB,iBAAmBnhB,EAAMzP,KAAK4wB,iBACpCnhB,EAAM6B,QAAQmgB,EAAsBrmB,IAExC/C,KAAKrI,KAAK0xB,WAAa,SAAUtmB,GAC7BqE,EAAM6a,oBACN7a,EAAM6B,QdnsBM,acmsBqBlG,IAErC/C,KAAKrI,KAAK2xB,mBAAqB,SAAUvmB,GACrCqE,EAAMyL,OAAO,gBAAiB9P,GAC9BA,EAAOqE,EAAMoN,aAEjBxU,KAAKrI,KAAK4xB,iBAAmB,SAAUxmB,GACnCqE,EAAMyL,OAAO,cAAe9P,GAC5BA,EAAOqE,EAAMoN,aAEjBxU,KAAKrI,KAAK6xB,eAAiB,SAAUzmB,GACjCqE,EAAM6B,QAAQ0C,EAAuB5I,IAEzC/C,KAAKrI,KAAK8xB,kBAAoBzpB,KAAK6oB,cAAcjN,KAAK5b,MACtDA,KAAKrI,KAAK+xB,oBAAsB1pB,KAAK6oB,cAAcjN,KAAK5b,MACxDA,KAAKrI,KAAKgyB,yBAA2B3pB,KAAK6oB,cAAcjN,KAAK5b,MAC7DA,KAAKrI,KAAKiyB,uBAAyB5pB,KAAK6oB,cAAcjN,KAAK5b,MAC3DA,KAAKrI,KAAKkyB,kBAAoB7pB,KAAK6oB,cAAcjN,KAAK5b,MACtDA,KAAKrI,KAAKgO,kBAAoB3F,KAAK6oB,cAAcjN,KAAK5b,MACtDA,KAAKrI,KAAKmyB,eAAiB9pB,KAAK6oB,cAAcjN,KAAK5b,MACnDA,KAAKrI,KAAKoyB,eAAiB/pB,KAAK6oB,cAAcjN,KAAK5b,MACnDA,KAAKrI,KAAKqyB,gBAAkBhqB,KAAK6oB,cAAcjN,KAAK5b,MACpDA,KAAKrI,KAAKsyB,eAAiBjqB,KAAK6oB,cAAcjN,KAAK5b,MACnDA,KAAKrI,KAAKuyB,gBAAkBlqB,KAAK6oB,cAAcjN,KAAK5b,MACpDA,KAAKrI,KAAKwyB,aAAenqB,KAAK6oB,cAAcjN,KAAK5b,MACjDA,KAAKrI,KAAKyyB,eAAiBpqB,KAAK6oB,cAAcjN,KAAK5b,MACnDA,KAAKrI,KAAK0yB,YAAcrqB,KAAK6oB,cAAcjN,KAAK5b,MAChDA,KAAKrI,KAAK2yB,SAAWtqB,KAAK6oB,cAAcjN,KAAK5b,MAC7CA,KAAKrI,KAAK4yB,WAAavqB,KAAK6oB,cAAcjN,KAAK5b,MAC/CA,KAAKrI,KAAK6yB,gBAAkBxqB,KAAK6oB,cAAcjN,KAAK5b,MACpDA,KAAKrI,KAAK8yB,WAAazqB,KAAK6oB,cAAcjN,KAAK5b,MAC/CA,KAAKrI,KAAK+yB,YAAc1qB,KAAK6oB,cAAcjN,KAAK5b,MAChDA,KAAKrI,KAAKgzB,WAAa3qB,KAAK6oB,cAAcjN,KAAK5b,MAC/CA,KAAKrI,KAAKizB,YAAc,SAAU7nB,GAG9B,IAFA,IAAI+E,EAAOV,EAAMvI,UAEViJ,EAAK/E,EAAa,UAAGqF,UAAUC,SAAS,iBAC3CtF,EAAa,WAEjBqE,EAAM6B,QdltBO,ccktBqBlG,IAEtC/C,KAAKrI,KAAK6qB,KAAO,WAEb,GADApb,EAAMzP,KAAKwS,GAAG,cAAe/C,EAAMigB,gBAAiBjgB,IAC/C1P,oBAAkB0P,EAAMgf,cAAe,CAExChf,EAAMgf,aAAehf,EAAMzP,KAAiB,aAAI,IAAIkzB,EAAWzjB,EAAMzP,QAG7EqI,KAAKrI,KAAKmzB,cAAgB9qB,KAAK6oB,cAAcjN,KAAK5b,MAClDA,KAAKrI,KAAKozB,cAAgB/qB,KAAK6oB,cAAcjN,KAAK5b,MAClDA,KAAKgrB,6BACLhrB,KAAKirB,qBACLjrB,KAAKkrB,2BACLlrB,KAAKmrB,yBACLnrB,KAAKorB,qBACLprB,KAAKqrB,sBAET1M,EAAS9hB,UAAUyuB,cAAgB,SAAUC,EAAYC,GACrD,IAAK,IAAIzxB,EAAI,EAAGA,EAAIwxB,EAAW7rB,MAAMnI,OAAQwC,IACrCyxB,EACApb,YAAUmb,EAAW7rB,MAAM3F,IAAK,iBAGhCsT,eAAake,EAAW7rB,MAAM3F,IAAK,kBAI/C4kB,EAAS9hB,UAAU4uB,cAAgB,WAC/B,MAAoB,SAAhBzrB,KAAK+mB,SAA8D,IAAzC/mB,KAAK+mB,OAAOnf,WAAWpJ,QAAQ,MAOjEmgB,EAAS9hB,UAAUmuB,2BAA6B,WAC5C,IAAI5jB,EAAQpH,KACZA,KAAKrI,KAAK+zB,UAAY,SAAU3oB,GAK5B,GAJAqE,EAAMukB,oBACNvkB,EAAM6a,oBACN7a,EAAMwkB,aAAaxkB,EAAMvI,WACzBuI,EAAMyL,OAAO,eAAgB9P,GACzBtM,EAAa2Q,KAAW5N,EAAU4N,KAAWA,EAAMoO,gBAAiB,CACpE,IAAIqW,EAAMtzB,YAAU,sBAAuB6O,GAAO3J,OAAO,SAAUC,GAC/D,MAAoC,OAA7BA,EAAEsY,YAAYC,aACtB1e,OACH2e,WAAS,gCAAiC2V,EAAM,GAAIzkB,GAExD,GAAIA,EAAMqkB,iBAAmBrkB,EAAMnO,cAG/B,IAAK,IAFD6O,EAAOV,EAAMsQ,kBAAkB5P,KAC/BgkB,KAAexjB,MAAMvL,KAAK+K,GACrBzQ,EAAIy0B,EAAUv0B,OAAS,EAAGF,EAAI,EAAGA,IACtC,IAAKiD,EAASwxB,EAAUz0B,IAAK,CACrBy0B,EAAUz0B,GAAG6T,oBACb9D,EAAMkkB,cAAcQ,EAAUz0B,IAAI,GAEtC,MAIZ+P,EAAM6B,Qdj0BK,Yci0BqBlG,GAChCqE,EAAMnO,eAAgB,GAG1B,IAAI+K,EAAWhE,KACfA,KAAKrI,KAAK6M,gBAAkB,SAAUzB,GAClC,IACIlD,EAActH,YAAU,SAAUwK,GACtC,IAAMtM,EAAauN,KAAcxK,EAAUwK,IAAc7M,EAAgB6I,QAA0B,SAAhBH,EAC/EmE,EAAS6O,OAAO,oBAAqB9P,GACrCA,EAAQiB,EAAoB,iBAE3B,GAAiC,IAA7BA,EAASxG,SAASjG,QAAgBiC,EAAUwK,IAAaA,EAASrN,sBAAsBC,cAAa,CAC1G,IAAI6C,EAAKuK,EAASrN,WAClBqN,EAASuiB,WAAWvR,kBAAkBvb,EAAG9C,WAAW8E,MACpDsH,EAAKgR,OAAS/P,EAASrM,KAAKhB,WAAqB,WAAE8E,KAAOuI,EAASxG,SAiBvE,GAfK/G,EAAauN,IAAc7M,EAAgB6I,OAAUtI,oBAAkBsM,EAASrN,cAC7EqJ,KAAKya,YACLvE,WAAS,cAAc,EAAMnT,GAEjCiB,EAAS6O,OAAO,gBAAiB9P,IAGrC3G,SAAO2G,EAAMiB,EAASwQ,aAClBxQ,EAAS1E,sBACTyD,EAAKgR,OAAShR,EAAKgR,OAAOzL,SAE1BtE,EAAS/K,gBACT+G,KAAK2Z,cAAcqF,sBAAwBhb,EAASgb,wBAGnDhf,KAAKya,WAAY,CAClB,IAAIsR,EAAoB,IAAIC,WAI5B,OAHAhoB,EAASiF,QAAQkH,EAAwBpN,EAAM,SAAUkpB,GACrDF,EAAkBG,QAAQD,KAEvBF,IAGf/rB,KAAKrI,KAAKkL,IAAM,SAAUG,EAAMD,GACxBqE,EAAMgf,cACNhf,EAAMgf,aAAavjB,IAAIG,EAAMD,KAIzC4b,EAAS9hB,UAAUwuB,mBAAqB,WACpC,IAAIjkB,EAAQpH,KACZA,KAAKrI,KAAKmN,aAAe,SAAU/B,GAC/B,KAAKA,EAAKE,KAAK2Q,KAAOxM,EAAMzP,KAAKgc,QAAQC,GAAK,iBAA6C,IAA3BxM,EAAMke,kBACjEviB,EAAKE,KAAK2Q,KAAOxM,EAAMzP,KAAKgc,QAAQC,GAAK,eAAyC,IAAzBxM,EAAMoe,gBAC/DziB,EAAKE,KAAK2Q,KAAOxM,EAAMzP,KAAKgc,QAAQC,GAAK,eAA2C,IAA3BxM,EAAMke,kBAFpE,CAKA,IAAI6G,EAAkB,IAAIH,WAO1B,OANA5kB,EAAM6B,QAAQmjB,EAAqBrpB,EAAM,SAAUspB,GAC1CA,EAAYrjB,QACb5B,EAAMyL,OAAOuZ,EAAqBrpB,GAEtCopB,EAAgBD,QAAQG,KAErBF,IAEXnsB,KAAKrI,KAAK20B,cAAgB,SAAUvpB,GAChC,IAAIopB,EAAkB,IAAIH,WAI1B,OAHA5kB,EAAM6B,QAAQ1Q,YAAU,OAAQwK,GAAOA,EAAM,SAAUwpB,GACnDJ,EAAgBD,QAAQK,KAErBJ,GAEXnsB,KAAKrI,KAAK8N,UAAY,SAAU1C,GAC5B,GAAKrL,oBAAkBqL,EAAKpE,OAAQoE,EAAKpE,IAAIyJ,UAAUC,SAAS,gBAAhE,CAIA,IAAI8jB,EAAkB,IAAIH,WAI1B,OAHA5kB,EAAM6B,QAAQujB,GAAkBzpB,EAAM,SAAU0pB,GAC5CN,EAAgBD,QAAQO,KAErBN,EAPHppB,EAAKiG,QAAS,IAU1B2V,EAAS9hB,UAAUsuB,uBAAyB,WACxC,IAAI/jB,EAAQpH,KACZA,KAAKrI,KAAKiM,gBAAkB,SAAUb,GAC9BqE,EAAMslB,iBACNtlB,EAAMslB,iBAAkB,EACxBtlB,EAAMzP,KAAKhB,YAAeod,OAAQ3M,EAAM5J,SAAU6Q,MAAOhQ,WAAS,QAAS+I,EAAMzP,KAAKhB,cAGtFyQ,EAAM6B,QAAQ0jB,EAAwB5pB,IAG9C/C,KAAKrI,KAAKiO,SAAW,SAAU7C,GAC3B,GAAIqE,EAAMzP,KAAKi1B,oBAAqB,CAChC,IAAIC,EAAezlB,EAAMzP,KAAKm1B,kBAAkBC,YAAYpZ,QAAQkE,uBAAuB,cAAc,IACpGngB,oBAAkBm1B,IAAiBA,EAAajZ,KAAOxM,EAAMuM,QAAQC,GAAK,6BAC3E7Q,EAAKiG,QAAS,GAGtB,IAAImjB,EAAkB,IAAIH,WAO1B,OANA5kB,EAAM6B,QAAQ+jB,GAAiBjqB,EAAM,SAAUkqB,GACtCA,EAAajkB,QACd5B,EAAMyL,OAAOma,GAAiBC,GAElCd,EAAgBD,QAAQe,KAErBd,GAEXnsB,KAAKrI,KAAKkO,UAAY,SAAU9C,GAC5BqE,EAAM6B,QAAQikB,GAAkBnqB,GAChCqE,EAAMyL,OAAOqa,GAAkBnqB,IAEnC/C,KAAKrI,KAAKmO,SAAW,SAAU/C,GAC3B,IACIoqB,EAAU,IAAInB,WAGlB,OAFAjpB,EAAS,QAAIoqB,EACb/lB,EAAMyL,OAAOua,GAAiBrqB,GACvBoqB,GAEXntB,KAAKrI,KAAKsO,SAAW,SAAUlD,GAC3BqE,EAAM6B,QAAQokB,GAAiBtqB,GAC/BqE,EAAMyL,OAAOwa,GAAiBtqB,IAElC/C,KAAKrI,KAAKyO,gBAAkB,SAAUrD,GAClCqE,EAAM6B,QAAQqkB,GAAwBvqB,GACtCqE,EAAMyL,OAAOya,GAAwBvqB,IAEzC/C,KAAKrI,KAAKwO,eAAiB,SAAUpD,GACjCqE,EAAM6B,QAAQskB,GAAuBxqB,GACrCqE,EAAMyL,OAAO0a,GAAuBxqB,IAExC/C,KAAKrI,KAAKoO,YAAc,SAAUhD,GAC9BqE,EAAM6B,QAAQukB,GAAoBzqB,GAClCqE,EAAMyL,OAAO2a,GAAoBzqB,IAErC/C,KAAKrI,KAAKuO,kBAAoB,SAAUnD,GACpCqE,EAAM6B,QAAQwkB,GAA0B1qB,GACxCqE,EAAMyL,OAAO4a,GAA0B1qB,IAE3C/C,KAAKrI,KAAKqO,YAAc,SAAUjD,GACE,SAA5BqE,EAAMvL,aAAaC,MACnBsL,EAAM6B,QAAQykB,GAAoB3qB,GAEtCqE,EAAMyL,OAAO6a,GAAoB3qB,KAGzC4b,EAAS9hB,UAAU8uB,kBAAoB,WACnC3rB,KAAK2tB,yBAEThP,EAAS9hB,UAAU4qB,iBAAmB,WAClC,IAAI9wB,EAAa,aAIjB,GAAIqJ,KAAKrJ,YAAcQ,EAAgB6I,MAAO,CAC1C,IAAIvB,EAAOuB,KAAKxC,SACZowB,EAAYvvB,WAAS,QAAS2B,KAAKrJ,YACvCqJ,KAAKrI,KAAKhB,YAAeod,OAAQtV,EAAM4P,MAAOuf,QAG9C5tB,KAAKrI,KAAKhB,WAAeqJ,KAAKrJ,sBAAsBC,cAChC,IAAIA,cAAYoJ,KAAKrJ,WAAWA,WAAYqJ,KAAKrJ,WAAWk3B,aAAc7tB,KAAKrJ,WAAWE,SAA1GmJ,KAAKxC,SAEb,GAAIwC,KAAKrJ,sBAAsBC,gBAAgBoJ,KAAKrJ,WAAWA,WAAW2tB,SAAWtkB,KAAKrJ,WAAW+C,OAAQ,CACzGsG,KAAKrI,KAAKhB,WAAWA,GAAY8E,KAAO9B,EAAYqG,KAAKrJ,WAAWA,GAAY8E,MAChFuE,KAAKrI,KAAKhB,WAAgB,MAAIqJ,KAAKrJ,WAAW+C,MAE9C,IAAIuX,EAAUjR,KACTtI,oBAAkBsI,KAAKrI,KAAKhB,WAAgB,QAC7CqJ,KAAKrI,KAAKhB,WAAgB,MAAEkf,KAAK,SAAUnY,GACvC,IAAIjE,EAAKwX,EAAQtZ,KAAKhB,WACtB8C,EAAG9C,GAAY2tB,SAAU,EACzB7qB,EAAkB,iBAAI,EACtBA,EAAG9C,GAAY8E,KAAOiC,EAAEqW,OACxBta,EAAU,QAAI,IAAIq0B,kBAKlCnP,EAAS9hB,UAAUquB,yBAA2B,WAC1C,IAAI9jB,EAAQpH,KACZA,KAAKrI,KAAK8M,YAAc,SAAU1B,GACL,YAArBA,EAAKlD,aAA6BkD,EAAK3B,QAAU2B,EAAK3B,OAAO6hB,eAC7DlgB,EAAK3B,OAAO6hB,cAAc7a,UAAUC,SAAS,yBAC7CtF,EAAKiG,QAAS,GAGE,YADFzQ,YAAU,cAAewK,IAEvCqE,EAAMyL,OAAO,qBAEjBzL,EAAMyL,OAAO,eAAiBhY,WAAYkI,IACrCtM,EAAa2Q,IAAW1P,oBAAkB0P,EAAM8G,eAAkB/W,EAAgBiQ,IAClC,IAA7CA,EAAMzP,KAAKK,eAAeV,QAAQC,QAAyD,IAAzC6P,EAAMzP,KAAKC,eAAeC,IAAIN,SACpF6P,EAAMyL,OAAO,gBAAkBrV,SAAU4J,EAAMzP,KAAKhB,aACpDyQ,EAAMzP,KAAK0mB,eAAgB1nB,WAAYyQ,EAAMoN,YAAYT,SAAU,GAC/Drc,oBAAkB0P,EAAMzP,KAAwB,kBAAEhB,cAClDyQ,EAAMzP,KAAK4H,aAAad,KAAKsvB,YAAc3mB,EAAMzP,KAAKhB,sBAAsBC,cAAcwQ,EAAMzP,KAAKhB,WAChGe,oBAAkB0P,EAAMzP,KAAKhB,YAAc,IAAIC,cAAgB,IAAIA,cAAYwQ,EAAMzP,KAAKhB,cAGvG,IAAIw1B,EAAkB,IAAIH,WAO1B,OANA5kB,EAAM6B,QAAQ+kB,EAAoBjrB,EAAM,SAAU2X,GACzCA,EAAW1R,QACZ5B,EAAMyL,OAAO2Z,GAAkB9R,GAEnCyR,EAAgBD,QAAQxR,KAErByR,GAEXnsB,KAAKrI,KAAK+M,eAAiB,SAAU3B,GACjCqE,EAAMyL,OAAO,iBAAkB9P,GAC/BqE,EAAM6a,oBACN7a,EAAM6mB,sBACmB,YAArBlrB,EAAKlD,aACLuH,EAAMyL,OAAO,qBAEjBzL,EAAMyL,OAAO,kBAAoBhY,WAAYkI,IACpB,QAArBA,EAAKlD,aAAgE,QAAtCuH,EAAMvL,aAAaQ,gBAAkE,WAAtC+K,EAAMvL,aAAaQ,gBACjG+K,EAAMyL,OAAOqb,GAAiBnrB,GAET,cAArBA,EAAKlD,aACLuH,EAAMyL,OAAO4J,GAAkB1Z,GAEnCqE,EAAMyL,OAAO,oBAAqB9P,GACT,SAArBA,EAAKlD,aAA0BuH,EAAM0R,WAAW3a,IAAI,SAAUgwB,GAAM,OAA+B,IAAxBA,EAAGC,mBAA8B72B,QAC5G6P,EAAMzP,KAAK02B,UAEfjnB,EAAM6B,QAAQ4P,EAAuB9V,KAG7C4b,EAAS9hB,UAAUouB,mBAAqB,WACpC,IAAI7jB,EAAQpH,KAERgE,EAAWhE,KACfA,KAAKrI,KAAKgO,kBAAoB,SAAU5C,GACpCqE,EAAM6B,QAAQqlB,GAA0BvrB,GACxCqE,EAAMyL,OAAOyb,GAA0BvrB,IAE3C/C,KAAKrI,KAAKkP,gBAAkB,SAAU9D,GAClCqE,EAAMyL,OAAO,kBAAmB9P,GAChCqE,EAAM6B,QAAQslB,GAAwBxrB,IAE1C/C,KAAKrI,KAAK2M,aAAe,SAAUvB,GAC3BrL,oBAAkBsI,KAAKya,YACvBvE,WAAS,cAAc,EAAOnT,GAG9BmT,WAAS,aAAclW,KAAKya,WAAY1X,GAE5CiB,EAASzE,aAAaqR,YAAY7N,IAEtC/C,KAAKrI,KAAK4M,cAAgB,SAAUxB,GAC5BrL,oBAAkBsI,KAAKya,YACvBvE,WAAS,cAAc,EAAOnT,GAG9BmT,WAAS,aAAclW,KAAKya,WAAY1X,GAE5CiB,EAASzE,aAAaC,WAAWuD,IAErC/C,KAAKrI,KAAK4N,iBAAmB,SAAUxC,GACnCqE,EAAMyL,OAAO2b,GAAyBzrB,GACtCqE,EAAM6B,QAAQulB,GAAyBzrB,IAE3C/C,KAAKrI,KAAK2N,gBAAkB,SAAUvC,GAClCqE,EAAMyL,OAAO4b,EAAwB1rB,GACrCqE,EAAM6B,QAAQwlB,EAAwB1rB,IAE1C/C,KAAKrI,KAAK4M,cAAgB,SAAUxB,GAChCqE,EAAM7H,aAAaC,WAAWuD,KAGtC4b,EAAS9hB,UAAUuuB,mBAAqB,WACpC,IAAIhkB,EAAQpH,KACZA,KAAKrI,KAAKmP,mBAAqB,SAAU/D,GACrCqE,EAAM6B,QAAQylB,GAA2B3rB,IAE7C/C,KAAKrI,KAAKg3B,aAAe,SAAU5rB,GAC/BqE,EAAM6B,Qdx+BQ,ecw+BqBlG,IAEvC/C,KAAKrI,KAAKi3B,QAAU,SAAU7rB,GACtBqE,EAAMzP,KAAKk3B,OACX9rB,EAAKiG,QAAS,GAGlB5B,EAAMyL,OAAOic,GAAmB/rB,GAChCqE,EAAM6B,Qdt/BG,Ucs/BqBlG,KAElC/C,KAAKrI,KAAKo3B,QAAU,SAAUhsB,GACtBqE,EAAMzP,KAAKk3B,OACX9rB,EAAKiG,QAAS,GAGlB5B,EAAMyL,OAAOmc,GAAmBjsB,GAChCA,EAAKiG,QAAS,KAStB2V,EAAS9hB,UAAU6pB,SAAW,WAC1B1mB,KAAKwnB,qBACLxnB,KAAK8oB,iBACL5S,WAAS,qBAAsBlW,KAAKivB,mBAAoBjvB,KAAKrI,MAE7Due,WAAS,mBAAoBlW,KAAQ,iBAAGA,KAAKrI,OAQjDgnB,EAAS9hB,UAAU2pB,oBAAsB,WACrC,IAAKxmB,KAAK1I,QAAQC,SAAYyI,KAAKumB,WAAWxR,YAAc1c,OAAOC,KAAK0H,KAAKrJ,YAAYY,OAAS,CAC9FyI,KAAK1I,WAOL,IAAK,IAHDoB,EAASsH,KAAKrJ,WAAW,GAEzB2B,EAAOD,OAAOC,KAAKI,GACdrB,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,KACuC,KAA/D2I,KAAK5C,aAAc4C,KAAK/C,iBAAiBuB,QAAQlG,EAAKjB,KACvD2I,KAAK1I,QAAQkB,KAAKF,EAAKjB,MAKvCsnB,EAAS9hB,UAAU6rB,oBAAsB,WACrC,IAAIxoB,KAaJ,OAXAA,EAAKylB,YAAc3lB,KAAKnE,aAAa8pB,YACrCzlB,EAAKD,aAAeD,KAAKnE,aAAaoE,aACtCC,EAAK0lB,cAAgB5lB,KAAKnE,aAAa+pB,cACvC1lB,EAAK7D,eAAsD,WAArC2D,KAAKnE,aAAaQ,eAA8B,SAAW,MACjF6D,EAAKgvB,oBAAsBlvB,KAAKnE,aAAaqzB,oBAC7ChvB,EAAKivB,kBAAoBnvB,KAAKnE,aAAaszB,kBAC3CjvB,EAAKmT,SAAWrT,KAAKnE,aAAawX,SAClCnT,EAAKkvB,wBAA0BpvB,KAAKnE,aAAauzB,wBACjDlvB,EAAKmvB,iBAAmBrvB,KAAKnE,aAAawzB,iBAC1CnvB,EAAS,KAAIF,KAAKnE,aAAiB,KACnCqE,EAAKovB,OAAStvB,KAAKnE,aAAayzB,OACxBtvB,KAAKnE,aAAaC,MACtB,IAAK,SAGL,IAAK,QACDoE,EAAKpE,KAAOkE,KAAKnE,aAAaC,KAC9B,MACJ,IAAK,MACDoE,EAAKpE,KAAO,SACZ,MACJ,IAAK,OACDoE,EAAKpE,KAAO,SACZoE,EAAKivB,mBAAoB,EAGjC,OAAOjvB,GAQXye,EAAS9hB,UAAU2rB,eAAiB,WAChC,GAAIxoB,KAAKqlB,iBAAkB,CAEvB,IAAK,IADDxO,KACKxf,EAAI,EAAGA,EAAI2I,KAAKqlB,iBAAiB9tB,OAAQF,IAC9C,OAAQ2I,KAAKqlB,iBAAiBhuB,IAC1B,IAAK,SACL,KAAKslB,mBAAiBmE,OAClBjK,EAAMre,MAAO+2B,KAAMvvB,KAAKmhB,KAAKqO,YAAY,UACrCpuB,OAAQ,aAAcwS,GAAI5T,KAAK2T,QAAQC,GAAK,4BAC5CiD,QAAU0Y,KAAMvvB,KAAKmhB,KAAKqO,YAAY,SAAU5b,GAAI,UAAa2b,KAAMvvB,KAAKmhB,KAAKqO,YAAY,SAAU5b,GAAI,UAAa2b,KAAMvvB,KAAKmhB,KAAKqO,YAAY,SAAU5b,GAAI,YACtK,MACJ,QACIiD,EAAMre,KAAKwH,KAAKqlB,iBAAiBhuB,IAG7C,OAAOwf,EAGP,OAAO,MASf8H,EAAS9hB,UAAUurB,eAAiB,WAChC,GAAIpoB,KAAKolB,QAAS,CAGd,IAAK,IAFDvO,KACA4Y,OAAc,EACTp4B,EAAI,EAAGA,EAAI2I,KAAKolB,QAAQ7tB,OAAQF,IACrC,OAAQ2I,KAAKolB,QAAQ/tB,IACjB,IAAK,SACL,KAAKqlB,cAAYgT,OACb7Y,EAAMre,KAAK,UACX,MACJ,IAAK,QACL,KAAKkkB,cAAY/M,MACbkH,EAAMre,KAAK,SACX,MACJ,IAAK,YACL,KAAKkkB,cAAYqE,UACb0O,EAAczvB,KAAKmhB,KAAKqO,YAAY,aACpC3Y,EAAMre,MAAO+2B,KAAME,EAAaA,YAAaA,EACzCE,WAAY,WAAY/b,GAAI5T,KAAK2T,QAAQC,GAAK,2BAClD,MACJ,IAAK,cACL,KAAK8I,cAAYsE,YACbyO,EAAczvB,KAAKmhB,KAAKqO,YAAY,eACpC3Y,EAAMre,MAAO+2B,KAAME,EACfA,YAAaA,EAAaE,WAAY,aAAc/b,GAAI5T,KAAK2T,QAAQC,GAAK,6BAE9E,MACJ,IAAK,SACL,KAAK8I,cAAYuE,UACbwO,EAAczvB,KAAKmhB,KAAKqO,YAAY,aACpC3Y,EAAMre,MACF+2B,KAAME,EAAaA,YAAaA,EAChCE,WAAY,WAAY/b,GAAI5T,KAAK2T,QAAQC,GAAK,wBAElD,MACJ,IAAK,UACL,KAAK8I,cAAYwE,WACbuO,EAAczvB,KAAKmhB,KAAKqO,YAAY,cACpC3Y,EAAMre,MACF+2B,KAAME,EAAaA,YAAaA,EAChCE,WAAY,YAAa/b,GAAI5T,KAAK2T,QAAQC,GAAK,yBAEnD,MACJ,QACIiD,EAAMre,KAAKwH,KAAKolB,QAAQ/tB,IAGpC,OAAOwf,EAGP,OAAO,MAGf8H,EAAS9hB,UAAUqoB,eAAiB,SAAU5tB,EAASs4B,EAAoB11B,QAC5C,IAAvB01B,IAAiCA,GAAqB,QAC5C,IAAV11B,IAAoBA,EAAQ,GAChC,IAAIyF,EAASrI,EAETs4B,IACA5vB,KAAK4jB,gBAET,IAAIiM,EACAC,EACJ51B,EAAkB,IAAVA,GAAe,EAAIA,EAE3B,IAAK,IADD61B,KACK14B,EAAI,EAAGA,EAAIsI,EAAOpI,OAAQF,IAAK,CACpC6C,GAAgB,EAChB,IAAIgZ,EAAalT,KAAKrI,KAAK4Z,eAAe5R,EAAOtI,GAAG2U,KAGpD,GAFA8jB,EAAa5c,MACb2c,KAC+B,iBAApB7vB,KAAK1I,QAAQD,GACpBy4B,EAAWld,MAAQid,EAAejd,MAAQ5S,KAAK1I,QAAQD,QAGvD,IAAK,IAAI24B,EAAK,EAAGC,EAAK53B,OAAOC,KAAKqH,EAAOtI,IAAK24B,EAAKC,EAAG14B,OAAQy4B,IAAM,CAChE,IAAI5R,EAAO6R,EAAGD,GACV91B,IAAU8F,KAAKZ,iBAA4B,aAATgf,EAClCyR,EAAezR,GAAQze,EAAOtI,GAAG+mB,GAEnB,YAATA,GAAuB1mB,oBAAkBiI,EAAOtI,GAAG+mB,IAKxD0R,EAAW1R,GAAQyR,EAAezR,GAAQze,EAAOtI,GAAG+mB,IAJpD0R,EAAW1R,GAAQpe,KAAKklB,eAAevlB,EAAOtI,GAAG+mB,IAAO,EAAOlkB,GAC/D21B,EAAezR,GAAQze,EAAOtI,GAAG+mB,IAOxCyR,EAA4B,SAC7B7vB,KAAK4jB,YAAYprB,KAAK,IAAIsH,EAAO+vB,IAErCE,EAAqBv3B,KAAKs3B,GAE9B,OAAOC,GASXpR,EAAS9hB,UAAUqzB,kBAAoB,SAAUC,GAG7C,IAAK,IADDC,GAAiB,EACZJ,EAAK,EAAGK,EAFAh4B,OAAOC,KAAK63B,GAEeH,EAAKK,EAAa94B,OAAQy4B,IAAM,CACxE,IAAI5R,EAAOiS,EAAaL,GACxB,OAAQ5R,GACJ,IAAK,UACDpe,KAAKrI,KAAKL,QAAU0I,KAAKklB,eAAellB,KAAK1I,SAC7C,MACJ,IAAK,kBACD0I,KAAKrI,KAAK24B,iBACV,MACJ,IAAK,cACDtwB,KAAKrI,KAAKkZ,YAAc7Q,KAAK6Q,YAC7B,MACJ,IAAK,eACD7Q,KAAKrI,KAAKmZ,aAAe8W,sBAAoB5nB,KAAK8Q,cAClDsf,GAAiB,EACjB,MACJ,IAAK,uBACDpwB,KAAKrI,KAAKyG,qBAAuB4B,KAAK5B,qBACtC,MACJ,IAAK,6BACD4B,KAAKrI,KAAK+Z,2BAA6B1R,KAAK0R,2BAC5C,MACJ,IAAK,UACD1R,KAAKrI,KAAKytB,QAAUplB,KAAKooB,iBACzB,MACJ,IAAK,iBACDpoB,KAAKrI,KAAKmuB,eAAiB9lB,KAAK8lB,eAChC,MACJ,IAAK,oBACD9lB,KAAKrI,KAAKoQ,kBAAoB6f,sBAAoB5nB,KAAK+H,mBACvD,MACJ,IAAK,eACD/H,KAAKrI,KAAK2I,aAAeN,KAAKM,aAC9B,MACJ,IAAK,oBACDN,KAAKrI,KAAK44B,kBAAoBvwB,KAAKuwB,kBACnC,MACJ,IAAK,eACDvwB,KAAKrI,KAAK4G,aAAeqpB,sBAAoB5nB,KAAKzB,cAClD,MACJ,IAAK,iBACDyB,KAAKrI,KAAKC,eAAiBgwB,sBAAoB5nB,KAAKpI,gBACpD,MACJ,IAAK,iBACDoI,KAAKrI,KAAKI,eAAiBiI,KAAKjI,eAChC,MACJ,IAAK,iBACIiI,KAAK/G,gBACN+G,KAAKrI,KAAKK,eAAiB4vB,sBAAoB5nB,KAAKhI,iBAExD,MACJ,IAAK,iBACDgI,KAAKrI,KAAK0I,eAAiBL,KAAKK,eAChC,MACJ,IAAK,sBACDL,KAAKrI,KAAK0H,oBAAsBW,KAAKX,oBACrC,MACJ,IAAK,aACDW,KAAKrI,KAAKmhB,WAAa8O,sBAAoB5nB,KAAK8Y,YAChD,MACJ,IAAK,0BACD9Y,KAAKrI,KAAK8hB,wBAA0BzZ,KAAKyZ,wBACzC,MACJ,IAAK,aAID,GAHAzZ,KAAK+a,cAAiB/a,KAAKrJ,sBAAsBC,iBAAkBc,oBAAkBsI,KAAKrJ,WAAW+C,QAC9FsG,KAAKrJ,WAAWE,mBAAmB0tB,oBAC1CvkB,KAAKymB,gBAAgBzmB,KAAKrJ,YACtBqJ,KAAK+a,YAAa,CAClB,GAAI5jB,EAAgB6I,MAAO,CACvB,IAAIqO,EAAQhQ,WAAS,QAAS2B,KAAKrJ,YACnCqJ,KAAKrI,KAAKhB,YAAeod,OAAQ/T,KAAKxC,SAAU6Q,MAAOA,OAEtD,CACD,IAAI5P,EAAOuB,KAAKrJ,WAChBqJ,KAAKrI,KAAKhB,WAAe8H,aAAgB7H,cACrB,IAAIA,cAAY6H,EAAK9H,WAAY8H,EAAKovB,aAAcpvB,EAAK5H,SAAzEmJ,KAAKxC,SAETwC,KAAK5B,uBACL4B,KAAKrI,KAAKgiB,cAAc6W,qBAAsB,QAIlDxwB,KAAKynB,mBACDznB,KAAK5B,uBACL4B,KAAKrI,KAAKgiB,cAAcnP,sBACxBxK,KAAKrI,KAAKgiB,cAAc8W,cAAc,MACtCzwB,KAAKrI,KAAKgiB,cAAc+W,eAGhC,MACJ,IAAK,QACD1wB,KAAKrI,KAAKsd,MAAQjV,KAAKiV,MACvB,MACJ,IAAK,oBACGkb,EAAQ/R,GACRpe,KAAK+iB,cAGL/iB,KAAK8iB,YAET,MACJ,IAAK,qBACD9iB,KAAKrI,KAAK02B,UACV,MACJ,IAAK,YACDruB,KAAKrI,KAAKwwB,UAAYnoB,KAAKmoB,UAC3B,MACJ,IAAK,cACDnoB,KAAKrI,KAAKsb,YAAc2U,sBAAoB5nB,KAAKiT,aACjD,MACJ,IAAK,aACDjT,KAAKrI,KAAKqH,WAAagB,KAAKhB,WAC5B,MACJ,IAAK,gBACDgB,KAAKrI,KAAK8Z,cAAgBzR,KAAKyR,cAC/B,MACJ,IAAK,YACDzR,KAAKrI,KAAKuwB,UAAYloB,KAAKkoB,UAC3B,MACJ,IAAK,SACIxwB,oBAAkBsI,KAAK+mB,SAAoC,iBAAjB/mB,KAAW,SAAgD,IAA9BA,KAAK+mB,OAAOvoB,QAAQ,OAC5FwB,KAAK2T,QAAQnZ,MAAMusB,OAAS/mB,KAAK+mB,QAErC/mB,KAAKrI,KAAKovB,OAAS/mB,KAAK+mB,OACxB,MACJ,IAAK,QACIrvB,oBAAkBsI,KAAKmN,QAAkC,iBAAhBnN,KAAU,QAA+C,IAA7BA,KAAKmN,MAAM3O,QAAQ,OACzFwB,KAAK2T,QAAQnZ,MAAM2S,MAAQnN,KAAKmN,OAEpCnN,KAAKrI,KAAKwV,MAAQnN,KAAKmN,MACvB,MACJ,IAAK,SACDnN,KAAKrI,KAAK0pB,OAASrhB,KAAKqhB,OACxB,MACJ,IAAK,mBACDrhB,KAAKrI,KAAK4wB,iBAAmBvoB,KAAKuoB,iBAClC,MACJ,IAAK,eACDvoB,KAAKrI,KAAKowB,aAAe/nB,KAAK+nB,aAC9B,MACJ,IAAK,cACD/nB,KAAKrI,KAAKqwB,YAAchoB,KAAKgoB,YAC7B,MACJ,IAAK,iBACDhoB,KAAKrI,KAAKswB,eAAiBjoB,KAAKioB,eAChC,MACJ,IAAK,sBACDjoB,KAAKrI,KAAK2H,oBAAsBU,KAAKV,oBACrC,MACJ,IAAK,mBACDU,KAAKrI,KAAK2tB,iBAAmBtlB,KAAKslB,iBAClC,MACJ,IAAK,iBACDtlB,KAAKrI,KAAK6tB,eAAiBxlB,KAAKwlB,eAChC,MACJ,IAAK,YACDxlB,KAAKrI,KAAK+vB,UAAY1nB,KAAK0nB,UAC3B,MACJ,IAAK,kBACD1nB,KAAKrI,KAAKyI,gBAAkBJ,KAAKI,gBACjC,MACJ,IAAK,gBACDJ,KAAKrI,KAAK4I,cAAgBP,KAAKO,cAC/B,MACJ,IAAK,mBACDP,KAAKrI,KAAK2wB,iBAAmBV,sBAAoB5nB,KAAKsoB,kBACtD,MACJ,IAAK,gBACDtoB,KAAKrI,KAAKuV,cAAgB0a,sBAAoB5nB,KAAKkN,eACnDlN,KAAKrI,KAAK02B,UACV,MACJ,IAAK,mBACDruB,KAAKrI,KAAK0tB,iBAAmBrlB,KAAKwoB,iBAClC,MACJ,IAAK,oBACDxoB,KAAKrI,KAAK8tB,kBAAoBzlB,KAAKylB,kBACnC,MACJ,IAAK,iBACDzlB,KAAKrI,KAAK4tB,eAAiBqC,sBAAoB5nB,KAAKulB,gBACpD,MACJ,IAAK,kBACDvlB,KAAKrI,KAAK8wB,gBAAkBb,sBAAoB5nB,KAAKyoB,iBACrD,MACJ,IAAK,eACGzoB,KAAKrI,KAAKk3B,QAA0C,WAAhC7uB,KAAKrI,KAAKkE,aAAaC,MAAqBq0B,EAAQ/R,GAAMtiB,OACtD,SAAvBq0B,EAAQ/R,GAAMtiB,MAA0C,QAAvBq0B,EAAQ/R,GAAMtiB,OAChDkE,KAAKrI,KAAKg5B,YAEd3wB,KAAKrI,KAAKkE,aAAemE,KAAK0oB,sBAGlC0H,GACApwB,KAAKrI,KAAK02B,YAUtB1P,EAAS9hB,UAAU+M,QAAU,WACzB,IAAIgnB,EAAkB5wB,KAAK2T,QAC3B,GAAKid,EAAL,CAGA,IAAIC,KAAmBD,EAAgB9lB,cAAc,mBACjD8lB,EAAgB9lB,cAAc,mBAC9B+lB,GACA7wB,KAAKkmB,eAETlmB,KAAK8wB,iBACDD,GACA/uB,EAAOjF,UAAU+M,QAAQ7M,KAAKiD,MAE9BA,KAAKrI,MACLqI,KAAKrI,KAAKiS,UAEV5J,KAAKumB,YACLvmB,KAAKumB,WAAW3c,UAMpB,IAAK,IAJDqb,GAAW,aAAc,aAAc,eAAgB,eAAgB,cAAe,kBACtF,oBAAqB,kBAAmB,gBAAiB,gBAAiB,gBAAiB,eAC3F,cAAe,iBAAkB,mBAAoB,oBAAqB,aAAc,sBACxF,kBAAmB,YAAa,uBAAwB,gBACnD5tB,EAAI,EAAGA,EAAI4tB,EAAQ1tB,OAAQF,IAC5B2I,KAAKilB,EAAQ5tB,MACb2I,KAAKilB,EAAQ5tB,IAAM,MAG3B2I,KAAK2T,QAAQlG,UAAY,GACzBzN,KAAKrI,KAAO,OAShBgnB,EAAS9hB,UAAUk0B,SAAW,WACtBr5B,oBAAkBsI,KAAKrI,SAGtBD,oBAAkBsI,KAAK2mB,gBAAgBC,WACxClvB,oBAAkBs5B,SAASC,eAAejxB,KAAKrI,KAAKgvB,gBAAgBC,aACpEoK,SAASC,eAAejxB,KAAK2mB,gBAAgBC,UAAUhT,GAAK5T,KAAKrI,KAAKgvB,gBAAgBC,SACtF5mB,KAAK2mB,gBAAgBC,SAAW5mB,KAAKrI,KAAKgvB,gBAAgBC,UAE9D9kB,EAAOjF,UAAUk0B,SAASh0B,KAAKiD,MAC/BA,KAAKrI,KAAKo5B,aAQdpS,EAAS9hB,UAAUq0B,eAAiB,WAWhC,IAAK,IAVDC,GAAa,eAAgB,eAC7B,iBAAkB,UAAW,iBAAkB,mBAAoB,mBACnEC,GACAtgB,cAAe,WAAY,YAAa,eAAgB,oBAAqB,oBAAqB,aAClG9Y,gBAAiB,OAAQ,OAAQ,sBAAuB,qBAAsB,eAAgB,iBAC9FJ,gBAAiB,SAAU,WAAY,cACvC2G,gBAAkBjH,WAAaixB,qBAI1BlxB,EAAI,EAAGA,EAAI85B,EAAU55B,OAAQF,IAElC,IAAK,IADDg6B,EAAgBrxB,KAAKmxB,EAAU95B,IAC1BsF,EAAI,EAAG20B,EAAMF,EAAgBD,EAAU95B,KAAOK,oBAAkB45B,IAAQ30B,EAAI20B,EAAI/5B,OAASoF,IAAK,QAE5F00B,EADMC,EAAI30B,IAKzB,OADAqD,KAAKuxB,gBATiB,SAAU,OAAQ,oBAAqB,iBAAkB,WAC3E,kBAAmB,WAAY,cAQCvxB,KAAK1I,SAClC0I,KAAKwxB,aAAaL,IAE7BxS,EAAS9hB,UAAU00B,eAAiB,SAAUE,EAAgBn6B,GAC1D,IAAK,IAAID,EAAI,EAAGA,EAAIC,EAAQC,OAAQF,IAC5BC,EAAQD,GAAGC,SACX0I,KAAK0xB,eAAeD,EAAgBn6B,EAAQD,IAC5C2I,KAAKuxB,eAAeE,EAAgBn6B,EAAQD,GAAGC,UAG/C0I,KAAK0xB,eAAeD,EAAgBn6B,EAAQD,KAIxDsnB,EAAS9hB,UAAU60B,eAAiB,SAAUD,EAAgB9xB,GAC1D,IAAK,IAAItI,EAAI,EAAGA,EAAIo6B,EAAel6B,OAAQF,WAChCsI,EAAO8xB,EAAep6B,IAC7BsI,EAAOlC,WAGfkhB,EAAS9hB,UAAU6nB,kBAAoB,SAAUhnB,GAC7C,GAAKhG,oBAAkBgG,EAAEi0B,SAAzB,CAGA,IAAIvwB,EAAS1D,EAAE0D,QACVA,EAAOgH,UAAUC,SAAS,sBAC3BjH,EAAOgH,UAAUC,SAAS,uBAA4BrI,KAAK4xB,gBAAmB5xB,KAAKrI,KAAKk3B,QACxF7uB,KAAKgjB,sBAAsB5hB,GAE/BpB,KAAK4xB,gBAAiB,EACtB5xB,KAAK6S,OAAO,qBAAuBzR,OAAQA,MAO/Cud,EAAS9hB,UAAUgC,QAAU,WACzB,OAAOmB,KAAKrI,KAAKkH,WAOrB8f,EAAS9hB,UAAUg1B,SAAW,WAC1B,OAAO7xB,KAAKrI,KAAKk6B,YAWrBlT,EAAS9hB,UAAUi1B,UAAY,SAAUrzB,EAAMvE,EAAO63B,GAClD,GAAI/xB,KAAKjE,WAAY,CAEjBiE,KAAKjE,WAA6B,oBAAI,EACtCiE,KAAKjE,WAAW+1B,UAAUrzB,EAAMvE,EAAO63B,KAQ/CpT,EAAS9hB,UAAU8zB,UAAY,WACvB3wB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAW40B,aAQ7BhS,EAAS9hB,UAAUm1B,SAAW,WACtBhyB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWi2B,YAW7BrT,EAAS9hB,UAAUo1B,WAAa,SAAUvoB,EAAUkJ,EAAO3Y,GACnD+F,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWk2B,WAAWvoB,EAAUkJ,EAAO3Y,IAUzD0kB,EAAS9hB,UAAUq1B,UAAY,SAAUh4B,EAAOuE,GAC5C,GAAIuB,KAAKrI,KAAKoE,WACV,GAAKrE,oBAAkBwC,GAMnB8F,KAAKrI,KAAKoE,WAAWm2B,UAAUh4B,EAAOuE,OANX,CAC3B,IAAI8oB,EAAWvnB,KAAKrI,KAAKwE,wBAAwBjC,GACjDkC,SAAOmrB,EAAU9oB,GACjBuB,KAAKrI,KAAKoE,WAAWm2B,UAAUh4B,EAAOqtB,KAelD5I,EAAS9hB,UAAUs1B,aAAe,SAAUC,EAAW3zB,GAC/CuB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWo2B,aAAaC,EAAW3zB,IASrDkgB,EAAS9hB,UAAUw1B,UAAY,SAAU1zB,GACjCqB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWs2B,UAAU1zB,IAUvCggB,EAAS9hB,UAAUy1B,SAAW,SAAU5oB,EAAUkJ,GAC1C5S,KAAKjE,YACLiE,KAAKjE,WAAWu2B,SAAS5oB,EAAUkJ,IAU3C+L,EAAS9hB,UAAU01B,mBAAqB,SAAU1b,EAAO2b,GACjDxyB,KAAKrI,KAAK86B,eACVzyB,KAAKrI,KAAK86B,cAAcC,YAAY7b,EAAO2b,IAQnD7T,EAAS9hB,UAAU81B,QAAU,WACrB3yB,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAW42B,WAU7BhU,EAAS9hB,UAAU+1B,kBAAoB,SAAUC,EAAGC,GAC5C9yB,KAAK+yB,qBACL/yB,KAAK+yB,oBAAoBH,kBAAkBC,EAAGC,IAStDnU,EAAS9hB,UAAUm2B,UAAY,SAAU/jB,GACjCjP,KAAKrI,KAAKoE,YACViE,KAAKrI,KAAKoE,WAAWi3B,UAAU/jB,IAQvC0P,EAAS9hB,UAAUtB,wBAA0B,WACzC,OAAOyE,KAAKrI,KAAK4D,2BAWrBojB,EAAS9hB,UAAUo2B,aAAe,SAAUp7B,EAAK+a,EAAO3Y,GACpD+F,KAAKrI,KAAKs7B,aAAap7B,EAAK+a,EAAO3Y,GACnC,IAAIyP,EAAW1J,KAAKrI,KAAKmH,wBAAwBjH,GAC7Ca,EAASsH,KAAK7D,wBAAwBuN,GACrChS,oBAAkBgB,IACnBmC,GAAaZ,MAAOvB,EAAQ4C,OAAQ,QAAU0E,KAAMA,KAAKhF,gBAAiBtC,EAAOwB,MAAO8F,KAAKrI,KAAK4wB,iBAAkB3V,IAW5H+L,EAAS9hB,UAAU6B,WAAa,SAAU7G,EAAK4T,GAC3C,IAAIvN,EAAiB8B,KAAK7D,wBACtB+2B,EAAalzB,KAAKrI,KAAK4D,0BAA0B,GACjDpB,EAAQ,EACRzB,KACJwF,EAAe6nB,KAAK,SAAU9rB,GAC1B,OAAIA,EAAMi5B,KAAgBr7B,IACtBa,EAASuB,GACF,KAMfE,EAAQzB,EAAOyB,MACfsR,EAAQtR,MAAQA,EAChBsR,EAAQvR,MAAQxB,EAAOwB,MACvBuR,EAAQnS,aAAeZ,EAAOY,aAC9BmS,EAAQrR,SAAW1B,EAAO0B,SAC1BqR,EAAQzS,SAAWN,EAAOM,SAC1ByS,EAAQ3S,WAAaJ,EAAOI,WAC5B2S,EAAQwB,cAAgBvU,EAAOuU,cAC/BxB,EAAQpS,gBAAkBX,EAAOW,gBACjCoS,EAAQnN,eAAiB5F,EAAO4F,eAChCmN,EAAQtS,SAAWT,EAAOS,SAC1B6G,KAAKrI,KAAK+G,WAAW7G,EAAK4T,IAQ9BkT,EAAS9hB,UAAUs2B,SAAW,SAAUC,GAChCpzB,KAAKrI,KAAK07B,aACVrzB,KAAKrI,KAAK07B,YAAYF,SAASC,IASvCzU,EAAS9hB,UAAUy2B,sBAAwB,SAAUhwB,GAC7CtD,KAAKqzB,aACLrzB,KAAKrI,KAAK07B,YAAYC,sBAAsBhwB,IAUpDqb,EAAS9hB,UAAU02B,iBAAmB,SAAU7pB,EAAUoC,GACtD,OAAO9L,KAAKrI,KAAK47B,iBAAiB7pB,EAAUoC,IAQhD6S,EAAS9hB,UAAU22B,iBAAmB,SAAU5gB,GAC5C,OAAO6gB,uBAAqBzzB,KAAK4jB,YAAa,SAAU3gB,GACpD,GAAIA,EAAK2P,QAAUA,EACf,OAAO3P,IAGZ,IAQP0b,EAAS9hB,UAAU0U,eAAiB,SAAUvF,GAC1C,IAAI0nB,EAAU1zB,KAAK/G,cAAgB+G,KAAKrI,KAAKL,QAAU0I,KAAK1I,QAC5D,OAAOm8B,uBAAqBC,EAAS,SAAUzwB,GAC3C,GAAIA,EAAK+I,MAAQA,EACb,OAAO/I,IAGZ,IAOP0b,EAAS9hB,UAAU82B,oBAAsB,WACrC,OAAO3zB,KAAKrI,KAAKg8B,uBAOrBhV,EAAS9hB,UAAU+2B,iBAAmB,WAClC,OAAO5zB,KAAKrI,KAAKi8B,oBAOrBjV,EAAS9hB,UAAUg3B,sBAAwB,WACvC,OAAO7zB,KAAKrI,KAAKk8B,yBASrBlV,EAAS9hB,UAAUi3B,YAAc,SAAUx7B,EAAMy7B,GAC7C/zB,KAAKrI,KAAKm8B,YAAYx7B,EAAMy7B,GAC5B/zB,KAAKiiB,qBASTtD,EAAS9hB,UAAUm3B,YAAc,SAAU17B,EAAM27B,GAC7Cj0B,KAAKrI,KAAKq8B,YAAY17B,EAAM27B,GAC5Bj0B,KAAKiiB,qBAQTtD,EAAS9hB,UAAUq3B,uBAAyB,SAAUthB,GAClD,OAAO5S,KAAKrI,KAAKu8B,uBAAuBthB,IAQ5C+L,EAAS9hB,UAAUs3B,uBAAyB,SAAUj6B,GAClD,OAAO8F,KAAKrI,KAAKw8B,uBAAuBj6B,IAQ5CykB,EAAS9hB,UAAUu3B,qBAAuB,SAAUpoB,GAChD,OAAOhM,KAAKrI,KAAKy8B,qBAAqBpoB,IAQ1C2S,EAAS9hB,UAAUw3B,sBAAwB,SAAUzhB,GACjD,OAAO5S,KAAKrI,KAAK08B,sBAAsBzhB,IAE3C+L,EAAS9hB,UAAUy3B,wBAA0B,SAAUtoB,GACnD,IACI9R,EAAQu5B,uBAAqBzzB,KAAKrI,KAAgB,YAAG,SAAUsL,EAAM/I,GACrE,GAAI+I,EAAK+I,MAAQA,EACb,OAAO9R,IAGZ,GACH,OAAQxC,oBAAkBwC,IAAkB,EAATA,GAQvCykB,EAAS9hB,UAAU8U,oBAAsB,SAAU3F,GAC/C,OAAOhM,KAAKrI,KAAKga,oBAAoB3F,IAQzC2S,EAAS9hB,UAAU+C,WAAa,SAAU20B,GAEtC,OADAv0B,KAAKiiB,kBAAkBjiB,KAAKrI,KAAKiI,WAAW20B,IACrCv0B,KAAK4jB,aAEhBjF,EAAS9hB,UAAUolB,kBAAoB,SAAUtiB,GAC7C,IAAIqc,EACApJ,EACA4hB,EAAc98B,oBAAkBiI,GAAUK,KAAKrI,KAAKiI,aAAeD,GACzC,IAA1BK,KAAKZ,iBAA0BY,KAAK4jB,YAAY5jB,KAAKZ,mBACpD1H,oBAAkBsI,KAAK4jB,YAAY5jB,KAAKZ,iBAAiBiU,YAC1D2I,EAAOhc,KAAK4jB,YAAY5jB,KAAKZ,iBAAiBiU,SAC9CT,EAAQ5S,KAAK4jB,YAAY5jB,KAAKZ,iBAAiBwT,OAEnD,IACIkd,EADA2E,GAAgB,EAEpB,IAAKz0B,KAAK0R,4BAA+B1R,KAAK0R,4BAA8B1R,KAAK4jB,YAAYrsB,SAAWi9B,EAAYj9B,OAAS,CACzHyI,KAAK4jB,eACL,IAAK,IAAIvsB,EAAI,EAAGA,EAAIm9B,EAAYj9B,OAAQF,IAAK,CACzCy4B,KACA,IAAK,IAAIE,EAAK,EAAGC,EAAK53B,OAAOC,KAAKk8B,EAAYn9B,IAAK24B,EAAKC,EAAG14B,OAAQy4B,IAAM,CACrE,IAAI5R,EAAO6R,EAAGD,GACdF,EAAW1R,GAAQoW,EAAYn9B,GAAG+mB,GAEtCpe,KAAK4jB,YAAYprB,KAAK,IAAIsH,EAAOgwB,IAC7Bld,IAAU5S,KAAK4jB,YAAYvsB,GAAGub,OAAWlb,oBAAkBskB,IAAkB,KAATA,IACpEhc,KAAK4jB,YAAYvsB,GAAGgc,SAAW2I,IAa3C,OARAhc,KAAU,WAAK,WACXA,KAAKrI,KAAKL,QAAQC,SAAWyI,KAAK4jB,YAAYrsB,SAC9Ck9B,GAAgB,GAEfA,GACDz0B,KAAKqe,eAAgB/mB,QAAS0I,KAAK4jB,cAAe,GAEtD5jB,KAAU,eAAI2d,EACP3d,KAAK4jB,aAOhBjF,EAAS9hB,UAAU63B,WAAa,WAC5B,OAAO10B,KAAKrI,KAAK+8B,cAErB/V,EAAS9hB,UAAU4iB,yBAA2B,WAE1Czf,KAAKrI,KAAa,qBAAEoK,MAAM/B,OAE9B2e,EAAS9hB,UAAU83B,aAAe,SAAUC,EAAct9B,GAEtD0I,KAAKrI,KAAa,aAAEoK,MAAM/B,MAAO40B,EAAct9B,KAEnDqnB,EAAS9hB,UAAUoxB,oBAAsB,WACrCjuB,KAAKqe,eAAgBrmB,eAAgBO,YAAU,aAAcyH,KAAKrI,KAAKK,kBAAmB,GAC1FgI,KAAKqe,eAAgBvN,aAAcvY,YAAU,aAAcyH,KAAKrI,KAAKmZ,gBAAiB,GACtF9Q,KAAKqe,eAAgBzmB,eAAgBW,YAAU,aAAcyH,KAAKrI,KAAKC,kBAAmB,GAC1FoI,KAAKqe,eAAgB9f,aAAchG,YAAU,aAAcyH,KAAKrI,KAAK4G,gBAAiB,IAO1FogB,EAAS9hB,UAAU6a,gBAAkB,WACjC,OAAO1X,KAAKrI,KAAK+f,mBAOrBiH,EAAS9hB,UAAUg4B,YAAc,WAG7B,IAAK,IAFDC,KACAhtB,EAAO9H,KAAKrI,KAAKk9B,cACZx9B,EAAI,EAAGe,EAAM0P,EAAKvQ,OAAQF,EAAIe,EAAKf,IACnCyQ,EAAKzQ,GAAG+Q,UAAUC,SAAS,iBAC5BysB,EAAMt8B,KAAKsP,EAAKzQ,IAGxB,OAAOy9B,GAQXnW,EAAS9hB,UAAUV,sBAAwB,WACvC,OAAO6D,KAAKrI,KAAK8gB,iBAOrBkG,EAAS9hB,UAAUb,gBAAkB,WACjC,OAAOgE,KAAKrI,KAAKoE,WAAWC,mBAOhC2iB,EAAS9hB,UAAUqP,iBAAmB,WAClC,OAAOlM,KAAKrI,KAAKuU,oBAOrByS,EAAS9hB,UAAUk4B,eAAiB,WAChC,OAAO/0B,KAAKrI,KAAKo9B,kBAQrBpW,EAAS9hB,UAAU+B,cAAgB,SAAU1E,GACzC,OAAO8F,KAAKrI,KAAKiH,cAAc1E,IAQnCykB,EAAS9hB,UAAUm4B,WAAa,SAAU5zB,GACtC,OAAOpB,KAAKrI,KAAKq9B,WAAW5zB,IAQhCud,EAAS9hB,UAAUo4B,oBAAsB,SAAUriB,GAC/C,OAAO5S,KAAKrI,KAAKs9B,oBAAoBriB,IAOzC+L,EAAS9hB,UAAUiM,kBAAoB,WAEnC,IAAK,IADDosB,KACKlF,EAAK,EAAGC,EAAKjwB,KAAK4jB,YAAaoM,EAAKC,EAAG14B,OAAQy4B,IAAM,CAC1D,IAAIjkB,EAAMkkB,EAAGD,GACTjkB,EAAIopB,SACJD,EAAK18B,KAAKuT,GAGlB,OAAOmpB,GAOXvW,EAAS9hB,UAAU2b,YAAc,WAC7BA,cAAYxY,KAAK2T,UAOrBgL,EAAS9hB,UAAUwZ,YAAc,WAC7BA,cAAYrW,KAAK2T,UAOrBgL,EAAS9hB,UAAUwxB,QAAU,WACzBruB,KAAK4e,sBACL5e,KAAKymB,gBAAgBzmB,KAAKrJ,YACrBQ,EAAgB6I,QACjBA,KAAKrI,KAAKhB,WAAeqJ,KAAKrJ,sBAAsBC,cAChD,IAAIA,cAAYoJ,KAAKrJ,WAAWA,WAAYqJ,KAAKrJ,WAAWk3B,aAAc7tB,KAAKrJ,WAAWE,SAD3BmJ,KAAKxC,UAG5EwC,KAAKrI,KAAK02B,WAQd1P,EAAS9hB,UAAU6O,kBAAoB,WACnC,OAAO1L,KAAKipB,gBAAgBxZ,qBAQhCkP,EAAS9hB,UAAUu4B,kBAAoB,WACnC,IAAIC,KACAn5B,EAAqB8D,KAAK7D,wBAC9B,GAAK6D,KAAK6Q,YASNwkB,EAAiBn5B,OARjB,IAAK,IAAI7E,EAAI,EAAGA,EAAI6E,EAAmB3E,OAAQF,IAC3Cg+B,EAAe78B,KAAK0D,EAAmB7E,IAClC6E,EAAmB7E,GAAG8B,WACvB9B,GAAK+B,EAAoB8C,EAAmB7E,IAAIE,QAO5D,OAAO89B,GAOX1W,EAAS9hB,UAAU6S,qBAAuB,WACtC,OAAO1P,KAAKipB,gBAAgBvZ,wBAQhCiP,EAAS9hB,UAAUmO,iBAAmB,SAAUsqB,GAC5Ct1B,KAAKipB,gBAAgBje,iBAAiBsqB,IAQ1C3W,EAAS9hB,UAAUyzB,eAAiB,SAAUiF,GACtC79B,oBAAkB69B,IAAcA,GAChCv1B,KAAKrI,KAAKL,QAAU0I,KAAKklB,eAAellB,KAAK1I,SAC7C0I,KAAKrI,KAAK24B,kBAGVtwB,KAAKrI,KAAK0mB,eAAgB/mB,QAAS0I,KAAKklB,eAAellB,KAAK1I,WAAY,IAQhFqnB,EAAS9hB,UAAU24B,cAAgB,WAC/Bx1B,KAAKrI,KAAK69B,iBASd7W,EAAS9hB,UAAUmmB,sBAAwB,SAAU5hB,GACjD,GAA+B,UAA3BpB,KAAKnE,aAAaC,KAAkB,CAGpC,GAAIkE,KAAKhE,kBAAkBgE,KAAK8e,gBAAgBvnB,QAC5CyI,KAAKhE,kBAAkBgE,KAAK+e,gBAAgBxnB,QAAUyI,KAAKhE,kBAAkBgE,KAAKiU,cAAc1c,OAAQ,CACxG,IAAIk+B,EAAYz1B,KAAKrI,KAAKoE,WAAc,UAGxC,OAFAiE,KAAKrI,KAAKoE,WAAqB,WAAE,aAAc05B,QAC/Cz1B,KAAK01B,cAAgBt0B,IAI7B,GAAIpB,KAAKiT,YAAa,CAClB,IAAI0iB,EAAUv0B,EAAO2J,QAAQ,kBAAkBkY,cAC3CvqB,EAASsH,KAAK7D,wBAAwBw5B,EAAQjsB,UAC9CtI,EAAOgH,UAAUC,SAAS,oBAC1BrI,KAAK41B,YAAYD,EAASj9B,GAG1BsH,KAAK61B,UAAUF,EAASj9B,OAG3B,CAEGA,GADAi9B,EAAU31B,KAAKrI,KAAKq9B,WAAW5zB,IACdqK,QACjBzL,KAAKV,sBACL5G,EAASsH,KAAK7D,wBAAwBw5B,EAAQjsB,WAE9CtI,EAAOgH,UAAUC,SAAS,oBAC1BrI,KAAK41B,YAAYD,EAAQh3B,IAAKjG,GAG9BsH,KAAK61B,UAAUF,EAAQh3B,IAAKjG,KAWxCimB,EAAS9hB,UAAUg5B,UAAY,SAAUl3B,EAAKjG,GAC1C,IAAI0O,EAAQpH,KACZtH,EAASsH,KAAK81B,yBAAyBn3B,EAAKjG,IACvChB,oBAAkBiH,IAAQA,EAAIe,MAAM,GAAG0I,UAAUC,SAAS,kBAC3DrI,KAAKsrB,cAAc3sB,GAAK,GAE5B,IAAIoE,GAAStE,KAAM/F,EAAQiG,IAAKA,EAAKqK,QAAQ,GAC7ChJ,KAAKiJ,QdrxEU,YcqxEgBlG,EAAM,SAAUgzB,GAC3C,IAAKA,EAAc/sB,OAAQ,CACvB5B,EAAM4uB,eAAe,SAAUr3B,EAAKjG,GAEpC,KAAMjC,EAAa2Q,IAAW5N,EAAU4N,OAAajQ,EAAgBiQ,KAAW1P,oBAAkBgB,EAAe,WAAK,CAClH,IAAIu9B,GAAiBx3B,KAAM/F,EAAQiG,IAAKA,GACxCyI,EAAM8uB,4BACN9uB,EAAM6B,QAAQyQ,EAAiBuc,QAK/CtX,EAAS9hB,UAAUq5B,0BAA4B,WAC3C,IAAIC,EAAUn2B,KAAKrI,KAAKya,4BAA8B,GAAKpS,KAAKrI,KAAK0a,6BAA+B,GAChGrS,KAAKrI,KAAKsH,mBAAqB,GAAKk3B,IACpCn2B,KAAKrI,KAAKgiB,cAAcyc,uBAGhCzX,EAAS9hB,UAAUi5B,yBAA2B,SAAUn3B,EAAKjG,GAUzD,OATIsH,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA0B/Q,KAAK6jB,aAAensB,oBAAkBgB,KACrGjC,EAAauJ,MACdtH,EAASsH,KAAKxC,SAASC,OAAO,SAAUC,GACpC,OAAOA,EAAErE,kBAGR3B,oBAAkBgB,KACvBA,EAASsH,KAAKrI,KAAKwE,wBAAwBwC,EAAI+K,WAE5ChR,GASXimB,EAAS9hB,UAAU+4B,YAAc,SAAUj3B,EAAKjG,GAC5C,IAAI0O,EAAQpH,KAER+C,GAAStE,KADb/F,EAASsH,KAAK81B,yBAAyBn3B,EAAKjG,GACjBiG,IAAKA,EAAKqK,QAAQ,GAC7ChJ,KAAKiJ,Qd1zEW,ac0zEgBlG,EAAM,SAAUszB,GAC5C,IAAKA,EAAertB,OAAQ,CACxB5B,EAAM4uB,eAAe,WAAYr3B,EAAKjG,GACtC,IAAIu9B,GAAiBx3B,KAAM/F,EAAQiG,IAAKA,GACxC,IAAKlI,EAAa2Q,KACdA,EAAM8uB,4BACN9uB,EAAM6B,QAAQqtB,EAAkBL,GAC5B7uB,EAAMqS,yBAAyB,CACZrS,EAAMzP,KAAK+8B,aAAa6B,kBAAkBC,aAC7CpvB,EAAMzP,KAAK+8B,aAAa6B,kBAAkBE,UACzBrvB,EAAMzP,KAAK++B,iBAAkBtvB,EAAM2f,QAChE3f,EAAMzP,KAAK+8B,aAAa6B,kBAAkBI,SAAS,EAAGvvB,EAAMzP,KAAK++B,qBAazF/X,EAAS9hB,UAAU+5B,cAAgB,SAAUz8B,GACzC,IAAM6F,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,wBAA0B3H,EAAauJ,MAAO,CACtH,IAAI4O,EAAM5O,KAAKrI,KAAKhB,WAAW8G,OAAO,SAAUC,GAI5C,OAHIA,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IACjCuD,EAAEvE,UAAW,GAEVuE,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IAE5C6F,KAAK61B,UAAU,KAAMjnB,OAMhB,CAHDA,EAAM5O,KAAK62B,iBAAiB18B,GAGhC,IAAK,IAFDwE,EAAMpG,YAAU,OAAQqW,GACxBlW,EAASH,YAAU,UAAWqW,GACzBvX,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAAK,CACpC,QAA6BsmB,IAAzBjlB,EAAOrB,GAAGyB,WAA0B,CACpC,IAAIg+B,EAAS92B,KAAKxC,SAAS9E,EAAOrB,GAAGyB,WAAWoB,OAAOA,OAChB,IAAnC8F,KAAKxC,SAASs5B,GAAQ39B,WACtBT,EAAOF,KAAKwH,KAAKxC,SAASs5B,IAC1B92B,KAAKxC,SAASs5B,GAAQ39B,UAAW,GAGzC6G,KAAK61B,UAAUl3B,EAAItH,GAAIqB,EAAOrB,OAI1CsnB,EAAS9hB,UAAUg6B,iBAAmB,SAAU18B,GAC5C,IAAI2N,EAAO9H,KAAKnB,UAAUpB,OAAO,SAAUC,GACvC,OAAkD,IAA1CA,EAAE6O,UAAU/N,QAAQ,QAAUrE,KAC9BuD,EAAEoN,cAAc,wBAA0BpN,EAAEoN,cAAc,wBAMtE,OADY5S,QAHE8H,KAAK7D,wBAAwBsB,OAAO,SAAUC,GACxD,OAAOA,EAAEvD,QAAUA,GAASuD,EAAErE,kBAEJyO,KAAMA,IASxC6W,EAAS9hB,UAAUk6B,gBAAkB,SAAU58B,GAC3C,IAAM6F,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,wBAA0B3H,EAAauJ,MAAO,CACtH,IAAItH,EAASsH,KAAKrI,KAAKhB,WAAW8G,OAAO,SAAUC,GAI/C,OAHIA,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IACjCuD,EAAEvE,UAAW,GAEVuE,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IAE5C6F,KAAK41B,YAAY,KAAMl9B,QAMvB,IAAK,IAHDkW,EAAM5O,KAAK62B,iBAAiB18B,GAC5B2N,EAAOvP,YAAU,OAAQqW,GACzB1W,EAAUK,YAAU,UAAWqW,GAC1BvX,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC2I,KAAK41B,YAAY9tB,EAAKzQ,GAAIa,EAAQb,IAG1C,IAAK2I,KAAKrI,KAAKgiB,cAAc6W,qBAAuBxwB,KAAK5B,sBAAwB4B,KAAKnB,WAC/EmB,KAAKzC,WAAWhG,SAAWyI,KAAKnB,UAAUtH,OAAQ,CAErDyI,KAAKrI,KAAKgiB,cAAcqd,YAAc,EACtCh3B,KAAKrI,KAAKgiB,cAAsB,UAAK,IAQ7CgF,EAAS9hB,UAAUimB,UAAY,WAC3B9iB,KAAKi3B,kBAAkB,WAO3BtY,EAAS9hB,UAAUkmB,YAAc,WAC7B/iB,KAAKi3B,kBAAkB,aAE3BtY,EAAS9hB,UAAUo6B,kBAAoB,SAAU37B,GAC7C,IAAIwM,EAAO9H,KAAKnB,UAAUpB,OAAO,SAAUC,GACvC,OAAOA,EAAEoN,cAAc,eAA4B,WAAXxP,EAAsB,WAAa,aAO/E,IALKwM,EAAKvQ,QAAUyI,KAAKnB,UAAUtH,QAC/BuQ,EAAKtP,KAAKwH,KAAKnB,UAAU,IAE7BmB,KAAK6jB,aAAc,EACnB7jB,KAAK8jB,eAAgB,GACf9jB,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,wBAA0B3H,EAAauJ,OAM/G,GALAA,KAAKxC,SAASC,OAAO,SAAUC,GACvBA,EAAErE,kBACFqE,EAAEvE,SAAsB,aAAXmC,KAGjBwM,EAAKvQ,OACU,aAAX+D,EACA0E,KAAK41B,YAAY9tB,EAAK,IAGtB9H,KAAK61B,UAAU/tB,EAAK,SAGvB,GAAI9H,KAAK6Q,YAAa,CACvB,IAAIqmB,EAAsBl3B,KAAKgR,kBAC/BhR,KAAKqe,eAAgBrN,mBAAmB,IAAQ,GAChDhR,KAAKrI,KAAK07B,YAAYF,SAAS,GAC/BnzB,KAAKqe,eAAgBrN,kBAAmBkmB,IAAuB,SAInE,IAAK,IAAI7/B,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IACd,aAAXiE,EACA0E,KAAK41B,YAAY9tB,EAAKzQ,IAGtB2I,KAAK61B,UAAU/tB,EAAKzQ,IAIhC2I,KAAK6jB,aAAc,EACnB7jB,KAAK8jB,eAAgB,GAEzBnF,EAAS9hB,UAAUm5B,eAAiB,SAAU16B,EAAQqD,EAAKjG,EAAQ8e,GAC/D,IAIII,EAJAme,GAAkBp3B,IAAKA,EAAKF,KAAM/F,EAAQmR,aAAehK,YAAavE,GACtEhC,EAAe0G,KAAK7D,wBAAwBsB,OAAO,SAAUC,GAC7D,OAAOA,EAAEY,iBAAmB5F,EAAOM,YAGlCvC,EAAauJ,OAAoB,WAAX1E,GAAuB0E,KAAKhF,iBAAmB7D,EAAgB6I,QAAU1G,EAAa/B,QAC7GyI,KAAKm3B,oBAAoBpB,GAE7B,IAAIte,EAAWzX,KAAKnB,UACpB,GAAImB,KAAKiT,YAAa,CAClB,IAAInL,EAAO9H,KAAK0X,kBAAkB5P,KAClC2P,KAAcnP,MAAMvL,KAAK+K,GAa7B,GAVIpQ,oBAAkBiH,GAElBA,EAAM8Y,EADKzX,KAAK7D,wBAAwBqC,QAAQ9F,KAIpCiG,EAAIwN,aAAa,iBAE5BzU,oBAAkBiH,IACnBA,EAAIqO,aAAa,gBAA4B,WAAX1R,EAAsB,OAAS,WAE/D0E,KAAK6Q,aAAkD,QAAnC7Q,KAAK8Q,aAAaC,cAA2B/Q,KAAK5B,uBAA0B3H,EAAauJ,OAC3G7I,EAAgB6I,MAGnB,CACD,IAAIo3B,OAAgB,EACpB,GAAe,WAAX97B,EAAqB,CAarB,GAZA87B,EAAgB,YACX5f,IACD9e,EAAOS,UAAW,EAClB6G,KAAK4e,mBAAmBlmB,EAAOM,UAAUG,SAAWT,EAAOS,UAE1DzB,oBAAkBiH,KACnBiZ,EAAYjZ,EAAIkZ,uBAAuB,sBAAsB,IAE7DL,IAAY9f,oBAAkBgB,EAAOsH,KAAK9G,sBAC1CR,EAAOsH,KAAK9G,qBAAuBxB,oBAAkBkgB,KACrDA,EAAYjZ,EAAIkZ,uBAAuB,oBAAoB,IAE3DngB,oBAAkBkgB,GAClB,OAECA,EAAUxP,UAAUC,SAAS,qBAC9B+H,YAAUwH,GAAY,oBAE1BvK,eAAauK,GAAY,0BAExB,CAaD,GAZAwf,EAAgB,OACX5f,IAAWrgB,EAAgB6I,QAC5BtH,EAAOS,UAAW,EAClB6G,KAAK4e,mBAAmBlmB,EAAOM,UAAUG,SAAWT,EAAOS,UAE1DzB,oBAAkBiH,KACnBiZ,EAAYjZ,EAAIkZ,uBAAuB,oBAAoB,IAE3DL,IAAY9f,oBAAkBgB,EAAOsH,KAAK9G,uBACzCR,EAAOsH,KAAK9G,qBAAuBxB,oBAAkBkgB,KACtDA,EAAYjZ,EAAIkZ,uBAAuB,sBAAsB,IAE7DngB,oBAAkBkgB,GAClB,OAECA,EAAUxP,UAAUC,SAAS,uBAC9B+H,YAAUwH,GAAY,sBAE1BvK,eAAauK,GAAY,oBAE7B,IAAIyf,EAAa5f,EAASha,OAAO,SAAU+D,GACvC,OAAOA,EAAE4G,UAAUC,SAAS,uBAAyB3P,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAUlG,GARI1D,EAAauJ,QAAUxG,EAAUwG,MACjCA,KAAKkF,aAAa5J,EAAQqD,EAAKjG,GAGzBvB,EAAgB6I,QAAS1G,EAAa/B,QAAsB,aAAX+D,GACnD0E,KAAKs3B,YAAYh8B,EAAQqD,EAAKjG,GAGlCsH,KAAKyrB,kBAAoB9sB,EAAIe,MAAM,GAAG0I,UAAUC,SAAS,iBAIzD,IAAK,IAHDyjB,EAAY9rB,KAAKnB,UAGZxH,GAFLyQ,EAAO9H,KAAK0X,kBAAkB5P,MAClCgkB,KAAexjB,MAAMvL,KAAK+K,IACHvQ,OAAS,GAAGF,EAAI,EAAGA,IACtC,IAAKiD,EAASwxB,EAAUz0B,IAAK,CACzB,IACIkgC,EADQv3B,KAAK0X,kBACG8e,aAChBgB,EAAex3B,KAAK00B,aAAa8C,aACrCx3B,KAAKsrB,cAAcQ,EAAUz0B,GAAIkgC,GAAWC,GAC5C,MAIZx3B,KAAK6S,OAAO,qBAAuBwkB,WAAYA,EAAY/7B,OAAQ87B,EAAe1+B,OAAQA,EAAQiG,IAAKA,IACvGqB,KAAK4rB,aAAanU,QAxElBzX,KAAK6S,OAAO4kB,GAAmCn8B,OAAQA,EAAQqD,IAAKA,EAAKjG,OAAQA,KA2EzFimB,EAAS9hB,UAAUs6B,oBAAsB,SAAUpB,GAC/C,IAAI3uB,EAAQpH,KACR03B,EAAO,IAAI1L,WAEf+J,EAA2B,cAAI2B,EAAKxL,QACpC,IAAIxzB,EAASq9B,EAAct3B,KAC3BuB,KAAKiJ,QAAQ0jB,EAAwBoJ,GACrC2B,EAAKvK,QAAQtX,KAAK,WACd,GAAIkgB,EAAclsB,UAAUtS,OAAQ,CAGhC,IAAK,IAFD6iB,EAAehT,EAAc,SAC7BlN,EAAQ,EACH7C,EAAI,EAAGA,EAAI+iB,EAAY7iB,OAAQF,IACpC,GAAI+iB,EAAY/iB,GAAG+C,WAAa1B,EAAO0B,SAAU,CAC7CF,EAAQ7C,EACR,MAOH,IAJDsgC,EAASt5B,WAAS,SAAU+I,EAAMzQ,YAClCkT,EAAYlQ,EAAYo8B,EAAclsB,WACtC+tB,EAAWl/B,EAAO0O,EAAMhK,eAAgB1E,EAAO0O,EAAMhK,cAAc7F,OAASsS,EAAUtS,OACtFmB,EAAO0O,EAAMhK,cAAc7F,OAA4BsS,EAAUtS,OACrE,IAASF,EAAI,EAAGA,EAAIugC,EAAUvgC,IACtBqB,EAAO0O,EAAMhK,eACbu6B,EAAOl6B,OAAO,SAAUC,EAAGrG,GACnBqG,EAAE0J,EAAMnK,mBAAqBvE,EAAO0O,EAAMlK,YAC1Cy6B,EAAOx6B,OAAO9F,EAAG,KAIzBwS,EAAUxS,IACVwS,EAAUxS,GAAG8C,MAAQzB,EAAOyB,MAAQ,EACpC0P,EAAUxS,GAAG6C,MAAQkd,KAAKC,KAAqB,IAAhBD,KAAKE,UACpCzN,EAAUxS,GAAGyB,WAAasD,YAAW1D,GACrCmR,EAAUxS,GAAG+C,SAAWgC,YAAWyN,EAAUxS,WACtCwS,EAAUxS,GAAGyB,WAAWQ,oBACxBuQ,EAAUxS,GAAG+C,SAAStB,WAC7B+Q,EAAUxS,GAAGiH,eAAiB5F,EAAOM,SACrC6Q,EAAUxS,GAAG2B,SAAWme,SAAO/P,EAAMuM,QAAQC,GAAK,UAClDsC,WAAS,sBAAwBrM,EAAUxS,GAAG2B,SAAU6Q,EAAUxS,GAAI+P,KACjE1P,oBAAkBmS,EAAUxS,GAAG+P,EAAMhK,gBACrCyM,EAAUxS,GAAG+P,EAAMoO,kBAAoBre,EAAgBiQ,MACxDyC,EAAUxS,GAAGgC,iBAAkB,GAEnC+gB,EAAYjd,OAAOjD,EAAQ,EAAI7C,EAAGqB,EAAO0O,EAAMhK,eAAiB1E,EAAO0O,EAAMhK,cAAc/F,GAAK,EAAI,EAAGwS,EAAUxS,KAGjH+iB,EAAYjd,OAAOjD,EAAQ,EAAI7C,EAAG,GAG1C+iB,EAAYlgB,GAAOkN,EAAMhK,cAAgByM,EACzCuQ,EAAYlgB,GAAOZ,aAAeuQ,EAClCuQ,EAAYlgB,GAAOf,UAAW,EAC9B+c,WAAS,sBAAwBkE,EAAYlgB,GAAOlB,SAAUohB,EAAYlgB,GAAQkN,GAClF,IAAK,IAAIrN,EAAI,EAAGA,EAAIg8B,EAAclsB,UAAUtS,OAAQwC,IAChD49B,EAAOn/B,KAAKu9B,EAAclsB,UAAU9P,IAG5CqN,EAAMslB,iBAAkB,EACxBtlB,EAAMzP,KAAK02B,UACXjnB,EAAM8uB,4BACN9uB,EAAM6B,QAAQyQ,EAAiBqc,MAGvCpX,EAAS9hB,UAAUqI,aAAe,SAAU5J,EAAQqD,EAAKjG,GACrD,IAAI+e,EAAWzX,KAAKnB,UACpB,GAAImB,KAAKiT,YAAa,CAClB,IAAI4kB,EAAS73B,KAAK0X,kBAAkB5P,KACpC2P,KAAcnP,MAAMvL,KAAK86B,GAE7B,IAAI90B,GAAStE,KAAM/F,EAAQiG,IAAKA,GAC5BmJ,KAIJ,GAHAA,EAAO2P,EAASha,OAAO,SAAU+D,GAC7B,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAEzE,WAAXmB,EAAqB,CACrB0E,KAAK6S,OAAO+B,GAAuBlc,OAAQA,EAAQoP,KAAMA,EAAMkQ,UAAWrZ,IAC1E,IAAIm5B,GAAWn5B,IAAKA,EAAKF,KAAM/F,GAC3BoP,EAAKvQ,OAAS,IACdyI,KAAKk2B,4BACLl2B,KAAKiJ,QAAQyQ,EAAiBoe,SAIlC93B,KAAK+3B,qBAAsBr/B,OAAQA,EAAQoP,KAAMA,IACjD9H,KAAKk2B,4BACLl2B,KAAKiJ,QAAQqtB,EAAkBvzB,IAGvC4b,EAAS9hB,UAAUy6B,YAAc,SAAUh8B,EAAQqD,EAAKjG,GACpD,IAAIoP,EACAxO,EAAe0G,KAAK7D,wBAAwBsB,OAAO,SAAUC,GAC7D,OAAOA,EAAEY,iBAAmB5F,EAAOM,WAEnCgH,KAAKyrB,iBAAmB9sB,EAAIe,MAAM,GAAG0I,UAAUC,SAAS,kBACxDrI,KAAKsrB,cAAc3sB,GAAK,GAE5B,IAAIq5B,EACAC,EACAxgB,EAAWzX,KAAKnB,UACpB,GAAImB,KAAKiT,YAAa,CAClB,IAAIilB,EAASl4B,KAAK0X,kBAAkB5P,KACpC2P,KAAcnP,MAAMvL,KAAKm7B,GAE7B,IAAId,EAA4B,WAAX97B,EAAuB,YAAc,OACtD68B,EAAkBn4B,KAAKzE,0BAA0B,GACrD,GAAIyE,KAAKV,sBAAwBU,KAAK6Q,YAAa,CAC/C/I,KACA,IAAK,IAAIzQ,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IAAK,CAC1C,IAAIqS,EAAW1J,KAAKrI,KAAKmH,wBAAwBxF,EAAajC,GAAG8gC,IACjErwB,EAAKtP,KAAKwH,KAAKnB,UAAU6K,UAI7B5B,EAAO2P,EAASha,OAAO,SAAU+D,GAC7B,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAG5F,IAAIg8B,EAAUn2B,KAAKrI,KAAKya,4BAA8B,GAAKpS,KAAKrI,KAAK0a,6BAA+B,GAChGrS,KAAKhB,YAAcgB,KAAKyR,eAAiBzR,KAAKf,oBAAsBk3B,KACpE6B,EAAch4B,KAAKo4B,iBAAiB36B,OAAO,SAAU+D,GACjD,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,OAGxFg8B,IACA8B,EAAkBj4B,KAAKq4B,qBAAqB56B,OAAO,SAAU+D,GACzD,OAAOA,EAAEsJ,cAAc,kBAAoBpS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,OAG5F,IAAS9C,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IACxBK,oBAAkBoQ,EAAKzQ,MACxByQ,EAAKzQ,GAAGmD,MAAMG,QAAUy8B,GAEvB1/B,oBAAkBsgC,KACnBA,EAAY3gC,GAAGmD,MAAMG,QAAUy8B,GAE9B1/B,oBAAkBugC,KACnBA,EAAgB5gC,GAAGmD,MAAMG,QAAUy8B,GAEvCp3B,KAAK6S,OAAO,kBAAoBlU,IAAKmJ,EAAKzQ,KACrCK,oBAAkB4B,EAAajC,GAAGiC,eAA6B,WAAXgC,IACrD5D,oBAAkB4B,EAAajC,GAAG8B,YAAaG,EAAajC,GAAG8B,WAC/D6G,KAAKg2B,eAAe16B,EAAQwM,EAAKzQ,GAAIiC,EAAajC,IAAI,GAClD2I,KAAKyR,eAAiBzR,KAAKZ,kBAAoB1H,oBAAkBsgC,IACjEh4B,KAAKg2B,eAAe16B,EAAQ08B,EAAY3gC,GAAIiC,EAAajC,IAAI,KAK7EsnB,EAAS9hB,UAAU+uB,aAAe,SAAU9jB,GACxC,GAAI9H,KAAK+nB,eAAiB/nB,KAAKiT,YAE3B,IAAK,IADDqlB,EAAkB,EACbjhC,EAAI,EAAGyQ,GAAQzQ,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAC1C,IAAIkhC,EAAUzwB,EAAKzQ,GACW,SAA1BkhC,EAAQ/9B,MAAMG,UACV49B,EAAQnwB,UAAUC,SAAS,aAC3BgF,eAAakrB,GAAU,YAEvBD,EAAkB,GAAM,GAAMC,EAAQnwB,UAAUC,SAAS,iBAAoBkwB,EAAQnwB,UAAUC,SAAS,gBACxG+H,YAAUmoB,GAAU,YAEnBA,EAAQnwB,UAAUC,SAAS,iBAAoBkwB,EAAQnwB,UAAUC,SAAS,gBAC3EiwB,OAMpB3Z,EAAS9hB,UAAU8wB,sBAAwB,WACvC,GAAI3tB,KAAKiT,YAAa,CAClB,IAAInL,EAAO9H,KAAK0X,kBAAkB5P,KAClCA,KAAUQ,MAAMvL,KAAK+K,GACrB,IAAK,IAAIzQ,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAClC,IAAImhC,EAAQx4B,KAAKrI,KAAK+f,kBAAkB5P,KAAKzQ,GAAGqI,MAAMM,KAAKZ,iBACvDT,EAAMmJ,EAAKzQ,GAEXohC,GAAQh6B,KADEuB,KAAKrI,KAAKghB,gBAAgBthB,GAAGoH,KAChBE,IAAKA,EAAKc,KAAM+4B,EAAO74B,OAAQK,KAAKJ,aAAaI,KAAKZ,kBACjFY,KAAKT,aAAaC,WAAWi5B,MAIzC9Z,EAAS9hB,UAAUk7B,oBAAsB,SAAUxgB,EAAYC,GACtDA,IACDD,EAAW7e,OAAOS,UAAW,GAEjC,IACIwF,EACAgZ,EAFA7P,EAAOyP,EAAWzP,KAGlB4wB,KACAC,KACAxC,EAAUn2B,KAAKoS,4BAA8B,GAAKpS,KAAKqS,6BAA+B,EACtF8jB,IACAuC,EAAc14B,KAAKo4B,iBAAiB36B,OAAO,SAAU+D,GACjD,OAAOA,EAAEsJ,cAAc,kBAAoByM,EAAW7e,OAAOwB,MAAQ,SAAWqd,EAAW7e,OAAOyB,MAAQ,MAE9Gw+B,EAAY34B,KAAKq4B,qBAAqB56B,OAAO,SAAU+D,GACnD,OAAOA,EAAEsJ,cAAc,kBAAoByM,EAAW7e,OAAOwB,MAAQ,SAAWqd,EAAW7e,OAAOyB,MAAQ,OAGlH,IAAK,IAAI9C,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAClCyQ,EAAKzQ,GAAGmD,MAAMG,QAAU,OACxBgE,EAAMmJ,EAAKzQ,GACX,IAAIuhC,EAAe9wB,EAAKzQ,GAAGyT,cAAc,sBAgBzC,GAfKpT,oBAAkBkhC,IACnB54B,KAAKrI,KAAKugB,gBAAgB2gB,SAASD,GAEnCzC,IACAuC,EAAYrhC,GAAGmD,MAAMG,QAAU,OAC/Bg+B,EAAUthC,GAAGmD,MAAMG,QAAU,OACxBmN,EAAKzQ,GAAGyT,cAAc,+CACnB4tB,EAAYrhC,GAAGyT,cAAc,6CAC7BnM,EAAM+5B,EAAYrhC,GAEbshC,EAAUthC,GAAGyT,cAAc,+CAChCnM,EAAMg6B,EAAUthC,MAIxBsH,EAAImM,cAAc,6CAA8C,CAChE,IAAIguB,EAAgBn6B,EAAImM,cAAc,6CACtC6M,EAAc3X,KAAKiT,YAAcjT,KAAKrI,KAAKwE,wBAAwB2L,EAAKzQ,GAAGqS,UACvE1J,KAAKrI,KAAKmgB,oBAAoBhQ,EAAKzQ,GAAG8U,aAAa,aAAa1N,MAC/D/G,oBAAkBohC,IAAkBnhB,EAAYxe,WACjDkU,eAAayrB,GAAgB,oBAC7B1oB,YAAU0oB,GAAgB,uBAI9B,IAAK,IAFDC,KACAC,EAAQh5B,KAAKnB,UACRo6B,EAAM,EAAGA,EAAMD,EAAMzhC,OAAQ0hC,IAC9BD,EAAMC,GAAKnuB,cAAc,kBAAoB6M,EAAYzd,MAAQ,SAAWyd,EAAYxd,MAAQ,KAChG4+B,EAAKvgC,KAAKwgC,EAAMC,IAGpBF,EAAKxhC,QAAUogB,EAAYxe,UAC3B6G,KAAK+3B,qBAAsBr/B,OAAQif,EAAa7P,KAAMixB,IAAQ,MAS9Epa,EAAS9hB,UAAUgqB,YAAc,WAC7B7mB,KAAKmK,GAAG,gBAAiBnK,KAAKk5B,kBAAmBl5B,MACjDA,KAAKrI,KAAKwS,GAAG,cAAenK,KAAKqnB,gBAAiBrnB,OAEtD2e,EAAS9hB,UAAUq8B,kBAAoB,SAAUC,GAC7Cn5B,KAAKwU,YAAc2kB,GAMvBxa,EAAS9hB,UAAUi0B,eAAiB,WAC5B9wB,KAAKyK,cAGTzK,KAAK0K,IAAI,gBAAiB1K,KAAKk5B,mBAC/Bl5B,KAAKrI,KAAK+S,IAAI,cAAe1K,KAAKqnB,mBAiBtC1I,EAAS9hB,UAAUu8B,eAAiB,SAAUhH,EAAWiH,EAAgBC,EAAaC,EAAWC,EAAWC,EAAcC,EAAmBC,GACzI35B,KAAKrI,KAAKyhC,eAAehH,EAAWiH,EAAgBC,EAAaC,EAAWC,EAAWC,EAAcC,EAAmBC,IAO5Hhb,EAAS9hB,UAAU+8B,eAAiB,WAChC55B,KAAKrI,KAAKiiC,kBAUdjb,EAAS9hB,UAAUg9B,0BAA4B,SAAUjnB,EAAOknB,GAC5D95B,KAAKrI,KAAKkiC,0BAA0BjnB,EAAOknB,IAS/Cnb,EAAS9hB,UAAUsmB,UAAY,SAAUjpB,EAAO6/B,GAC5C/5B,KAAKrI,KAAKwrB,UAAUjpB,EAAO6/B,IAQ/Bpb,EAAS9hB,UAAUm9B,WAAa,SAAUpsB,GACtC5N,KAAKrI,KAAKqiC,WAAWpsB,IAOzB+Q,EAAS9hB,UAAUymB,eAAiB,WAChCtjB,KAAKrI,KAAK2rB,kBAQd3E,EAAS9hB,UAAU2M,KAAO,SAAU/B,GAChCzH,KAAKsnB,gBAAgB9d,KAAK/B,IAU9BkX,EAAS9hB,UAAU4M,MAAQ,SAAUhL,EAAMiL,EAAUC,GACjD3J,KAAKsnB,gBAAgB7d,MAAMhL,EAAMiL,EAAUC,IAS/CgV,EAAS9hB,UAAUo9B,WAAa,SAAU7W,EAAW2W,GACjD/5B,KAAKrI,KAAKsiC,WAAW7W,EAAW2W,IAOpCpb,EAAS9hB,UAAUq9B,gBAAkB,WACjC,OAAOl6B,KAAKrI,KAAKuiC,mBASrBvb,EAAS9hB,UAAUs9B,wBAA0B,SAAUzwB,EAAUoC,GAC7D,OAAO9L,KAAKrI,KAAKwiC,wBAAwBzwB,EAAUoC,IAOvD6S,EAAS9hB,UAAUsS,mBAAqB,WACpC,OAAOnP,KAAKrI,KAAKwX,sBAQrBwP,EAAS9hB,UAAUqC,qBAAuB,SAAUhF,GAChD,OAAO8F,KAAKrI,KAAKuH,qBAAqBhF,IAO1CykB,EAAS9hB,UAAUu7B,eAAiB,WAChC,OAAOp4B,KAAKrI,KAAKygC,kBAQrBzZ,EAAS9hB,UAAUu9B,yBAA2B,SAAUlgC,GACpD,OAAO8F,KAAKrI,KAAKyiC,yBAAyBlgC,IAO9CykB,EAAS9hB,UAAUw7B,mBAAqB,WACpC,OAAOr4B,KAAKrI,KAAK0gC,sBAOrB1Z,EAAS9hB,UAAUw9B,uBAAyB,WACxC,OAAOr6B,KAAKrI,KAAK0iC,0BASrB1b,EAAS9hB,UAAUy9B,4BAA8B,SAAU5wB,EAAUoC,GACjE,OAAO9L,KAAKrI,KAAK2iC,4BAA4B5wB,EAAUoC,IAQ3D6S,EAAS9hB,UAAU09B,iCAAmC,SAAUrgC,GAC5D,OAAO8F,KAAKrI,KAAK4iC,iCAAiCrgC,IAQtDykB,EAAS9hB,UAAU29B,kCAAoC,SAAUtgC,GAC7D,OAAO8F,KAAKrI,KAAK6iC,kCAAkCtgC,IAQvDykB,EAAS9hB,UAAU49B,8BAAgC,SAAUvgC,GACzD,OAAO8F,KAAKrI,KAAK8iC,8BAA8BvgC,IAMnDykB,EAAS9hB,UAAU69B,uBAAyB,WACxC,OAAO16B,KAAKrI,KAAK+iC,0BAMrB/b,EAAS9hB,UAAUuV,0BAA4B,WAC3C,OAAOpS,KAAKrI,KAAKya,6BAMrBuM,EAAS9hB,UAAUwV,2BAA6B,WAC5C,OAAOrS,KAAKrI,KAAK0a,8BAMrBsM,EAAS9hB,UAAU4V,qBAAuB,WAEtC,OADAzS,KAAKiiB,kBAAkBjiB,KAAKrI,KAAK8a,wBAC1BzS,KAAK4jB,aAMhBjF,EAAS9hB,UAAU0V,sBAAwB,WAEvC,OADAvS,KAAKiiB,kBAAkBjiB,KAAKrI,KAAK4a,yBAC1BvS,KAAK4jB,aAMhBjF,EAAS9hB,UAAU89B,uBAAyB,WACxC,OAAO36B,KAAKrI,KAAKgjC,0BAMrBhc,EAAS9hB,UAAU+9B,2BAA6B,WAC5C,OAAO56B,KAAKrI,KAAKijC,8BAMrBjc,EAAS9hB,UAAUg+B,0BAA4B,WAC3C,OAAO76B,KAAKrI,KAAKkjC,6BAMrBlc,EAAS9hB,UAAU8V,kBAAoB,WAEnC,OADA3S,KAAKiiB,kBAAkBjiB,KAAKrI,KAAKgb,qBAC1B3S,KAAK4jB,aAQhBjF,EAAS9hB,UAAUoC,iBAAmB,WAClC,OAAOe,KAAK86B,eAAe96B,KAAK1I,QAAS,GAAK0I,KAAKyR,eAEvDkN,EAAS9hB,UAAUi+B,eAAiB,SAAU5F,EAAM6F,GAChD,IAAK,IAAIhhC,EAAI,EAAG3B,EAAM88B,EAAK39B,OAAQwC,EAAI3B,EAAK2B,IACpCm7B,EAAKn7B,GAAGzC,QACRyjC,EAAM/6B,KAAK86B,eAAe5F,EAAKn7B,GAAGzC,QAASyjC,GAGvC7F,EAAKn7B,GAAGihC,UACRD,IAIZ,OAAOA,GAOXpc,EAAS9hB,UAAUoL,sBAAwB,WACvC,OAAOjI,KAAKrI,KAAKsQ,yBAOrB0W,EAAS9hB,UAAUo+B,0BAA4B,WAC3C,OAAOj7B,KAAKrI,KAAKsjC,6BAQrBtc,EAAS9hB,UAAU4L,mBAAqB,WACpC,OAAOzI,KAAKrI,KAAK8Q,sBAOrBkW,EAAS9hB,UAAUub,cAAgB,WAC/B,OAAS8iB,WAAYl7B,KAAKrI,KAAKygB,gBAAiB+iB,WAAYn7B,KAAKumB,aAUrE5H,EAAS9hB,UAAUu+B,YAAc,SAAUC,EAAaC,EAASvJ,GAC7D/xB,KAAKu7B,qBAAqBH,YAAYC,EAAaC,EAASvJ,IAEhE,IAAIxS,EA8XJ,OA7XAre,IACIc,WAAS,IACV2c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIc,WAAS,IACV2c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIc,WAAS,aACV2c,EAAS9hB,UAAW,gBAAY,GACnCqE,IACIc,gBACD2c,EAAS9hB,UAAW,eAAW,GAClCqE,IACIc,WAAS,OACV2c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIc,WAAS,OACV2c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIc,WAAS,IACV2c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIc,WAAS,OACV2c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIc,WAAS,OACV2c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIc,WAAS,OACV2c,EAAS9hB,UAAW,0BAAsB,GAC7CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,2BAAuB,GAC9CqE,IACIc,gBACD2c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIc,cACD2c,EAAS9hB,UAAW,aAAS,GAChCqE,IACIc,cACD2c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIc,WAAS,aACV2c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIs6B,aAAYp5B,IACbuc,EAAS9hB,UAAW,wBAAoB,GAC3CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,0BAAsB,GAC7CqE,IACIs6B,aAAY5e,KACb+B,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIs6B,aAAYC,oBACb9c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIc,cACD2c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIs6B,aAAY/c,KACbE,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIiB,gBAAemc,KAChBK,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIs6B,aAAYjd,KACbI,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIc,cACD2c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIs6B,aAAYt5B,IACbyc,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIs6B,aAAYlrB,KACbqO,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIc,cACD2c,EAAS9hB,UAAW,eAAW,GAClCqE,IACIc,cACD2c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIc,WAAS,YACV2c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIc,cACD2c,EAAS9hB,UAAW,wBAAoB,GAC3CqE,IACIc,cACD2c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIc,cACD2c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIc,WAAS,WACV2c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIc,WAAS,OACV2c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,2BAAuB,GAC9CqE,IACIc,WAAS,SACV2c,EAAS9hB,UAAW,cAAU,GACjCqE,IACIc,WAAS,SACV2c,EAAS9hB,UAAW,aAAS,GAChCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,4BAAwB,GAC/CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,kCAA8B,GACrDqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,+BAA2B,GAClDqE,IACIs6B,aAAY9c,KACbC,EAAS9hB,UAAW,8BAA0B,GACjDqE,IACIc,WAAS,QACV2c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,eAAW,GAClCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,YAAQ,GAC/BqE,IACIw6B,WACD/c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,gBAAY,GACnCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,gBAAY,GACnCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,gBAAY,GACnCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,gBAAY,GACnCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,iBAAa,GACpCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,gBAAY,GACnCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,qBAAiB,GACxCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,wBAAoB,GAC3CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,kBAAc,GACrCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,mBAAe,GACtCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,eAAW,GAClCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,oBAAgB,GACvCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,0BAAsB,GAC7CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,eAAW,GAClCqE,IACIc,YAAU,IACX2c,EAAS9hB,UAAW,wBAAoB,GAC3CqE,IACIs6B,aAAYjrB,KACboO,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,wBAAoB,GAC3CqE,IACIc,YAAS,IACV2c,EAAS9hB,UAAW,sBAAkB,GACzCqE,IACIw6B,WACD/c,EAAS9hB,UAAW,wBAAoB,GAC3CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,8BAA0B,GACjDqE,IACIw6B,WACD/c,EAAS9hB,UAAW,0BAAsB,GAC7CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,gCAA4B,GACnDqE,IACIw6B,WACD/c,EAAS9hB,UAAW,yBAAqB,GAC5CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,2BAAuB,GAC9CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,uBAAmB,GAC1CqE,IACIw6B,WACD/c,EAAS9hB,UAAW,yBAAqB,GAC5C8hB,EAAWY,EAAare,IACpBy6B,yBACDhd,IAELid,aCxiHEC,GAAyB,WAMzB,SAASA,EAAQnlC,GACb+L,OAAKC,OAAOo5B,WACZ97B,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAgDT,OAxCA2xB,EAAQh/B,UAAU+F,cAAgB,WAC9B,MAAO,WAMXi5B,EAAQh/B,UAAUqN,iBAAmB,WACjClK,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAK+7B,cAAe/7B,OAEzD67B,EAAQh/B,UAAU2N,oBAAsB,WAChCxK,KAAKtJ,OAAO+T,aAGhBzK,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAK+7B,gBAQ3CF,EAAQh/B,UAAU+M,QAAU,WACxB5J,KAAKwK,uBAETqxB,EAAQh/B,UAAUk/B,cAAgB,WAK9B,IAAK,IAFDC,EADA9oB,EAAalT,KAAKtJ,OAAkB,YAAEsJ,KAAKtJ,OAAO0I,iBAElD68B,EAAcj8B,KAAKtJ,OAAOkJ,aACrBs8B,EAAI,EAAGA,EAAID,EAAY1kC,OAAQ2kC,IAAK,CAGzC,GAFsB3jC,YAAU,QAAS2a,KACjB3a,YAAU,QAAS0jC,EAAYC,IACZ,CACvCF,EAAYE,EACZ,OAGRl8B,KAAKtJ,OAAO2nB,eAAgBjf,gBAAiB48B,IAAa,IAEvDH,KCzDPM,GAAwB,WAMxB,SAASA,EAAOzlC,GACZ+L,OAAKC,OAAO05B,UACZp8B,KAAKtJ,OAASA,EAgClB,OAxBAylC,EAAOt/B,UAAUilB,eAAiB,SAAUua,GACxCr8B,KAAKtJ,OAAOiB,KAAKmqB,eAAeua,IAQpCF,EAAOt/B,UAAU+F,cAAgB,WAC7B,MAAO,UAQXu5B,EAAOt/B,UAAU+M,QAAU,WACnB5J,KAAKtJ,OAAO+T,aAGhBzK,KAAKtJ,OAAOiB,KAAKqqB,aAAapY,WAE3BuyB,KClCPG,GAAuB,WAMvB,SAASA,EAAM5lC,GAEXsJ,KAAKu8B,SAAU,EAEfv8B,KAAKw8B,oBAAqB,EAE1Bx8B,KAAKy8B,eAAgB,EACrBh6B,OAAKC,OAAOg6B,SACZ18B,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAqnCT,OAnnCAoyB,EAAMz/B,UAAU8/B,0BAA4B,SAAU/oB,GAWlD,OATI5T,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QAC3CsJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAGvCuE,KAAKtJ,OAAOiB,KAAKhB,YAEV8G,OAAO,SAAUC,GAC7C,OAAOA,EAAE1E,WAAa4a,KAQ9B0oB,EAAMz/B,UAAUqN,iBAAmB,WAC/BlK,KAAKtJ,OAAOyT,GAAG2kB,GAAmB9uB,KAAK48B,WAAY58B,MACnDA,KAAKtJ,OAAOyT,GAAG6kB,GAAmBhvB,KAAKkH,WAAYlH,MACnDA,KAAKtJ,OAAOyT,GAAG0yB,GAAgB78B,KAAK88B,UAAW98B,MAC/CA,KAAKtJ,OAAOyT,GAAG4yB,GAAmB/8B,KAAKg9B,YAAah9B,OAUxDs8B,EAAMz/B,UAAUu+B,YAAc,SAAUC,EAAaC,EAASvJ,GAC1D,IAAIkL,EAAOj9B,KAAKtJ,OAChB,GAAI2kC,EAAY,KAAOC,IAA8D,KAAlD,QAAS,QAAS,SAAS98B,QAAQuzB,GAAtE,CACqB,UAAbA,IACA/xB,KAAKk9B,aAAe,cAEP,UAAbnL,IACA/xB,KAAKk9B,aAAe,iBAEP,UAAbnL,IACA/xB,KAAKk9B,aAAe,iBAGxB,IAAK,IADDz+B,KACKpH,EAAI,EAAGA,EAAIgkC,EAAY9jC,OAAQF,IACpCoH,EAAKpH,GAAK2I,KAAKtJ,OAAOyF,wBAAwBk/B,EAAYhkC,IAE9D,IACI0L,GACAtE,KAAMA,EACN0+B,UAAW7B,GAUf,GARKnkC,EAAgB6I,KAAKtJ,SACtBsJ,KAAKo9B,SAASr6B,GAND,GASbk6B,EAAKliB,cACLkiB,EAAKz/B,SAAWwC,KAAKq9B,aAAaJ,EAAKz/B,WAE3CwC,KAAKtJ,OAAOiB,KAAK02B,UACbruB,KAAKtJ,OAAO4I,qBAA6C,kBAAtBU,KAAKk9B,aAAkC,CAC1E,IAAIhjC,EAAQ8F,KAAKtJ,OAAO0I,gBAAkB,EACtCT,EAAMqB,KAAKtJ,OAAOmI,UAAUw8B,EAAY,IACxCiC,EAAWv6B,EAAKtE,KAAK,GACrB8+B,KACAz1B,KACJy1B,EAAY/kC,KAAK8kC,GACjBx1B,EAAKtP,KAAKmG,GACV,IACIpB,EAAaxE,EAAciH,KAAKtJ,OAAQqM,EAAKtE,KAAK,GAAiB,gBACnE++B,EAAYx9B,KAAKtJ,OAAOmI,UAAUy8B,GACtCiC,EAAY/kC,KAAK+E,GACjBuK,EAAKtP,KAAKglC,GACV,IAASnmC,EAAI,EAAGA,EAAIkmC,EAAYhmC,OAAQF,IACpC2I,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAM8+B,EAAYlmC,GAAIoI,KAAMqI,EAAKzQ,GAAGqI,MAAMxF,GAC1CyF,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,iBAClDS,YAAa,sBASjCy8B,EAAMz/B,UAAUwgC,aAAe,SAAUjjB,GAUrC,IAAK,IATDxd,EAAU,SAAUvF,GAEpB,GADA+iB,EAAY/iB,GAAG6C,MAAQ7C,GAClBK,oBAAkB0iB,EAAY/iB,GAAGyB,YAAa,CAC/C,IAAI2kC,EAAgBrjB,EAAY3c,OAAO,SAAUgB,GAC7C,OAAOA,EAAKzF,WAAaohB,EAAY/iB,GAAGiH,iBACzC,GACH8b,EAAY/iB,GAAGyB,WAAWoB,MAAQujC,EAAcvjC,QAG/C7C,EAAI,EAAGA,EAAI+iB,EAAY7iB,OAAQF,IACpCuF,EAAQvF,GAEZ,OAAO+iB,GAEXkiB,EAAMz/B,UAAUigC,UAAY,SAAUp/B,GAGlC,IAAK,IAFDggC,EACAC,EAAcjgC,EAAExF,QACXb,EAAIqG,EAAExF,QAAQX,OAAS,EAAGF,GAAK,EAAGA,IAEvC,IADAqmC,EAAgBC,EAAYtmC,IACViH,eAAgB,CAC9B,IAAI5F,EAASilC,EAAYlgC,OAAO,SAAUgB,GACtC,OAAOA,EAAKzF,WAAa0kC,EAAcp/B,iBAE3C,GAAI5F,EAAOnB,OAAQ,CACf,IAAI2C,EAAQxB,EAAO,GAAGY,aAAakF,QAAQk/B,GACvC7kC,EAAeH,EAAO,IACX,IAAXwB,IACIxC,oBAAkBsI,KAAKtJ,OAAOwG,aAC9BrE,EAAaS,aAAa6D,OAAOjD,EAAO,GACnCrB,EAAaS,aAAa/B,SAC3BsB,EAAaQ,iBAAkB,EAC/BR,EAAamZ,yBAA0B,IAG/ChS,KAAKw8B,oBAAqB,IAK1C,GAAI9kC,oBAAkBsI,KAAKtJ,OAAOC,cAAgBqJ,KAAKtJ,OAAOC,WAAWY,OAAQ,CAKxE,IAHDqmC,EADAX,EAAOj9B,KAAKtJ,OAEZmnC,EAAgBngC,EAAExF,QAEtB,IAASb,EADQqG,EAAExF,QAAQX,OACD,EAAGF,GAAK,EAAGA,IAAK,CACtCumC,EAAkBC,EAAcxmC,IAC3BA,GAAKumC,EAAgBvkC,kBACtBukC,EAAgBxjC,SAAS4F,KAAKtJ,OAAOuG,iBAAmB,MAU5D,GAPKvF,oBAAkBulC,EAAKhgC,mBACxBggC,EAAK7/B,aAAe,MAEnB1F,oBAAkBkmC,EAAgBxjC,WAAc1C,oBAAkBulC,EAAK7/B,eACvE/E,OAAOwE,UAAUC,eAAeC,KAAK6gC,EAAgBxjC,SAAU6iC,EAAK7/B,gBACrEwgC,EAAgBxjC,SAAS6iC,EAAK7/B,kBAE9B/E,OAAOwE,UAAUC,eAAeC,KAAK6gC,EAAiBX,EAAK7/B,eAC1DwgC,EAAgBX,EAAK7/B,cAAe7F,SAAWyI,KAAKw8B,qBACpD9kC,oBAAkBulC,EAAKhgC,iBAExB,IAAK,IADD4M,EAAa+zB,EAAgBX,EAAK7/B,cAC7BrD,EAAI,EAAGA,EAAI8P,EAAUtS,OAAQwC,KACW,IAAzC8jC,EAAcr/B,QAAQqL,EAAU9P,MAChC8jC,EAAc1gC,OAAOpD,EAAG,EAAG8P,EAAU9P,IACrC8P,EAAU9P,GAAGK,SAAWgC,YAAWyN,EAAU9P,IAC7C1C,GAAK,GAIbgB,OAAOwE,UAAUC,eAAeC,KAAK6gC,EAAiBX,EAAKhgC,kBAA6D,MAAzC2gC,EAAgBX,EAAKhgC,mBAChG+C,KAAKw8B,qBACToB,EAAgBxjC,SAAS6iC,EAAKhgC,iBAAmB,YAC1C2gC,EAAgB9kC,kBAChB8kC,EAAgBt/B,gBAEvB5G,oBAAkBulC,EAAKtmC,cACvBsmC,EAAKtmC,eAETsmC,EAAKtmC,WAAWwG,OA7BG,EA6BkB,EAAGygC,EAAgBxjC,UAE5D6iC,EAAK5e,eAAgB1nB,WAAYsmC,EAAKtmC,aAAc,OAEnD,CACD,IAASU,EAAI,EAAGA,EAAIsmC,EAAYpmC,OAAQF,IACpC6e,WAAS,sBAAwBynB,EAAYtmC,GAAG2B,SAAU2kC,EAAYtmC,GAAI2I,KAAKtJ,QAEnF,IAAIqM,GAAStE,KAAMf,EAAExF,QAASilC,UAAWz/B,EAAE49B,SACvCt7B,KAAKtJ,OAAOC,sBAAsBC,eAClCoJ,KAAKma,aAAena,KAAKtJ,OAAOC,WAAWA,WAAW8E,KACtDuE,KAAKxE,SAAWwE,KAAKtJ,OAAOC,WAAWA,WAAW8E,OAGlDuE,KAAKma,aAAena,KAAKtJ,OAAOiB,KAAKhB,WACrCqJ,KAAKxE,SAAWwE,KAAKtJ,OAAOC,YAE5Be,oBAAkBsI,KAAKk9B,gBACvBl9B,KAAKk9B,aAAe,gBACpBn6B,EAAKo6B,UAAYn9B,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,EAAIyI,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,EAC3GwL,EAAKo6B,UACTp6B,EAAKtE,KAAOsE,EAAKtE,KAAKN,IAAI,SAAU9G,GAChC,OAAIA,EAAEgC,iBAAmB3B,oBAAkBL,EAAEyB,aACzCzB,EAAE8C,MAAQ,EACH9C,WAGAA,EAAEyB,kBACFzB,EAAEiH,eACTjH,EAAE8C,MAAQ,EACH9C,MAInB2I,KAAKo9B,SAASr6B,KAGtBu5B,EAAMz/B,UAAUmgC,YAAc,SAAUt/B,GACpC,IAAK,IAAIrG,EAAI,EAAGA,EAAIqG,EAAExF,QAAQX,OAAQF,IAClC2I,KAAK09B,cAAgBhgC,EAAExF,QAAQb,IAC3B2I,KAAK09B,cAAcrkC,iBAAmB2G,KAAK09B,cAAc5kC,aAE8B,IADvFkH,KAAKtJ,OAAOiB,KAAKhB,WACb6H,QAAQwB,KAAK28B,0BAA0B38B,KAAK09B,cAAcp/B,gBAAgB,KACjD,IAA7B0B,KAAK09B,cAAcvjC,QACnB6F,KAAK89B,iBAIjBxB,EAAMz/B,UAAUkhC,sBAAwB,WACpC,IAGIC,EACAC,EAJAP,EAAgB19B,KAAK09B,cACrBQ,EAAgBl+B,KAAKk+B,cACrBC,EAAQn+B,KAAKtJ,OAUjB,KANIsnC,EADAh+B,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QAC/CynC,EAAMxnC,WAAWA,WAAW8E,KAG5B0iC,EAAMxnC,aAGHe,oBAAkBwmC,IAAmBA,EAAcplC,YAAgBpB,oBAAkBwmC,EAAc9jC,WAiBtH,IAAK4F,KAAKtJ,OAAOuG,kBAAqBvF,oBAAkBwmC,IAAkBA,EAAcplC,aAC/D,eAAtBkH,KAAKk9B,cAAuD,kBAAtBl9B,KAAKk9B,cAGtC,CAAA,IADD5jC,EADS0G,KAAK28B,0BAA0BuB,EAAc5/B,gBAAgB,GAChDhF,aAC1B,IAASjC,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IACrC6mC,EAAcplC,WAAWsB,SAAS4F,KAAKtJ,OAAO0G,cAAc/F,GAAKiC,EAAajC,GAAG+C,cAtByC,CAClI,IAAK,IAAI/C,EAAI,EAAGA,EAAIgB,OAAOC,KAAK0lC,GAAgBzmC,OAAQF,IAChD2mC,EAAe3mC,GAAG2I,KAAKtJ,OAAO0G,gBAAkB8gC,EAAc9jC,SAAS4F,KAAKtJ,OAAO0G,gBACnF6gC,EAAM5mC,GAGY,eAAtB2I,KAAKk9B,aACAl9B,KAAKtJ,OAAOwG,WACb8gC,EAAe7gC,OAAO8gC,EAAK,EAAGP,EAActjC,UAGrB,kBAAtB4F,KAAKk9B,eACLl9B,KAAKtJ,OAAOwG,WACb8gC,EAAe7gC,OAAO8gC,EAAM,EAAG,EAAGP,EAActjC,WAaxD4F,KAAKtJ,OAAOuG,kBACRygC,EAAc5kC,WACY,eAAtBkH,KAAKk9B,cAAuD,kBAAtBl9B,KAAKk9B,cAC3CQ,EAAc19B,KAAKtJ,OAAOuG,iBAAmBihC,EAAcl+B,KAAKtJ,OAAOuG,iBACvEygC,EAActjC,SAAS4F,KAAKtJ,OAAOuG,iBAAmBihC,EAAcl+B,KAAKtJ,OAAOuG,mBAGhFygC,EAAc19B,KAAKtJ,OAAOuG,iBAAmBihC,EAAcl+B,KAAKtJ,OAAOwG,WACvEwgC,EAActjC,SAAS4F,KAAKtJ,OAAOuG,iBAAmBihC,EAAcl+B,KAAKtJ,OAAOwG,aAIpFwgC,EAActjC,SAAS4F,KAAKtJ,OAAOuG,iBAAmB,KACtDygC,EAAc19B,KAAKtJ,OAAOuG,iBAAmB,QAIzDq/B,EAAMz/B,UAAUuhC,qBAAuB,SAAUzqB,GAC7C,IAAI0qB,EAAkC,kBAAtBr+B,KAAKk9B,aACjBl9B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqBtgB,OAAS,GAAKoc,IACxD,IAArBA,EAAQjK,UAAkB20B,IAC3Br+B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqB,GAAGsO,UAG3EmW,EAAMz/B,UAAUyhC,oBAAsB,SAAU3qB,GAC5C,IAAI4qB,EAAa5qB,IAAYA,EAAQvL,UAAUC,SAAS,eAAiBsL,EAAQvL,UAAUC,SAAS,mBAC7FsL,EAAQvL,UAAUC,SAAS,gBAC9Bm2B,EAAiB7qB,IAAY4qB,GAC7Bv+B,KAAKtJ,OAAOkI,cAAcoB,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAG4U,aAAa,cACnFwH,EAAQxH,aAAa,YACzBkyB,EAAYG,GAAwC,eAAtBx+B,KAAKk9B,aACnCl9B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoBtgB,OAAS,GAAKoc,IAAY6qB,GAAkBH,IAC3Gr+B,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoB,GAAGsO,UAG1EmW,EAAMz/B,UAAU4hC,WAAa,SAAU9/B,EAAKzE,EAAO6I,GAC/C,IAAI27B,EAAS37B,EAAK3B,OAAS2J,UAAQhI,EAAK3B,OAAQ,MAAQ,KACxDpB,KAAKk9B,kBAAevf,EACpB,IAAIghB,EAAoB,EACxB3+B,KAAKo+B,qBAAqBM,GAC1B1+B,KAAKs+B,oBAAoBI,GACzB,IAAK,IAAIrnC,EAAI,EAAGA,EAAI0L,EAAK+E,KAAKvQ,OAAQF,KAC7BK,oBAAkBgnC,IAAWA,EAAOvyB,aAAa,cAAgBpJ,EAAK+E,KAAKzQ,GAAG8U,aAAa,cACxFtB,eAAa9H,EAAK3B,OAAQ,mBAC9BpB,KAAKk9B,aAAe,UACpBl9B,KAAK4+B,gBAIb,IAAI3B,EAAOj9B,KAAKtJ,OACZmoC,EAAS,EAETC,EAAa7B,EAAK7X,SAAW6X,EAAK7X,QAAQ7tB,OAC1Cy5B,SAASC,eAAegM,EAAKtpB,QAAQC,GAAK,6BAA6BmrB,aAAe,EAEtFC,EAAiBh/B,KAAKi/B,UAAUhC,EAAKtpB,SAErCurB,EAAgBjC,EAAK/wB,mBAAmB6yB,aAAeC,EAAeG,IAAML,EAC5ErI,EAAYwG,EAAKvI,aAAa6B,kBAAkBE,UAC/C/+B,oBAAkBgnC,KACnBC,EAAoBD,EAAOU,UAAY3I,GAI3C,IAEI4I,IAHJR,EAASF,EAAoBO,EAZd,GAaUvgC,EAAI,GAAGogC,aACHF,GACH,EACtBS,EAAgBT,EAASQ,EACzBE,EAAmBD,EAAgBD,EACnCG,EAAmBD,EAAmBF,EACtCI,EAAalnC,YAAU,sBAAuBwK,GAC9C28B,EAAannC,YAAU,sBAAuBwK,GAC9C48B,EAA4B,cAApBF,EAAWz8B,KAAwBy8B,EAAWG,MAAWloC,oBAAkBgoC,IAClFhoC,oBAAkBgoC,EAAWG,gBAAwD,KAArCH,EAAWG,eAAe,GAAGD,MAC9EE,EAAeH,GAAQL,EACvBS,EAAsBJ,EAAOL,GAAiBK,GAAQJ,EACtDS,EAAsBL,EAAOJ,GAAoBI,GAAQH,EAC7D,GAAIM,GAAgBC,GAAsBC,EAAoB,CAU1D,GATIF,GAAsC,YAAtB9/B,KAAKk9B,eACrBl9B,KAAKigC,oBACLjgC,KAAKk9B,aAAe,aACpBl9B,KAAKkgC,0BACLlgC,KAAKmgC,kBAAkBzB,GACvB1+B,KAAKogC,kBACLpgC,KAAKs+B,oBAAoBI,GACzB1+B,KAAKqgC,kBAAkBt9B,EAAK3B,SAE5B2+B,GAA4C,YAAtB//B,KAAKk9B,aAA4B,CACvDl9B,KAAKkgC,0BACL,IAAI30B,KACAoI,EAAU5I,UAAQhI,EAAK3B,OAAQ,OACnCmK,KAAgBjD,MAAMvL,KAAK4W,EAAQpL,iBAAiB,oDACrChR,OAAS,GACpByI,KAAKsgC,iBAAiB/0B,GAAY,EAAM,iBAE5CvL,KAAKugC,iBAAiB7B,GACtB1+B,KAAKmgC,kBAAkBzB,GACvB1+B,KAAKk9B,aAAe,gBAEpB8C,GAA4C,YAAtBhgC,KAAKk9B,eAC3Bl9B,KAAKogC,kBACLpgC,KAAKkgC,0BACLlgC,KAAKigC,oBACLjgC,KAAKk9B,aAAe,gBACpBl9B,KAAKugC,iBAAiB7B,GACtB1+B,KAAKo+B,qBAAqBM,GAC1B1+B,KAAKqgC,kBAAkBt9B,EAAK3B,SAGpC,OAAOpB,KAAKk9B,cAEhBZ,EAAMz/B,UAAUojC,kBAAoB,WAChC,IAAIO,MACJA,KAAgBl4B,MAAMvL,KAAKiD,KAAKtJ,OAAOid,QAAQpL,iBAAiB,oBACjDhR,OAAS,GACpByI,KAAKsgC,iBAAiBE,GAAY,EAAO,kBAGjDlE,EAAMz/B,UAAUsjC,kBAAoB,SAAUM,GAC1C,IAAIC,EAAO1gC,KAAKtJ,OAAOid,QACnBspB,EAAOj9B,KAAKtJ,OAChB,GAAI+pC,GAAoC,IAAvBA,EAAU/2B,WAAmB+2B,EAAUr4B,UAAUC,SAAS,cAAe,CACtF,IAAIs4B,EAAM3gC,KAAKtJ,OAAO4V,cAAc,OAASC,UAAW,sBACpDq0B,EAAgB5gC,KAAKtJ,OAAOwV,mBAC5B20B,EAAgB,EAChB5D,EAAK7X,UACLyb,EAAgB5D,EAAKxK,cAAcqO,aAAa/B,cAEpD,IAAIgC,GAAgBrpC,oBAAkBsI,KAAKtJ,OAAOiwB,gBAAgBC,UAC9Dma,IACAJ,EAAInmC,MAAM2kC,IAAMn/B,KAAKtJ,OAAOiB,KAAKgc,QAAQkE,uBAAuB,gBAAgB,GAAGknB,aAC7E8B,EAAgB,MAE1BF,EAAInmC,MAAM2S,MAAQ4zB,EAAeL,EAAKM,YAAc,KAChDN,EAAKM,YAAchhC,KAAKihC,iBAAmB,KAC1CL,EAAcr4B,iBAAiB,sBAAsBhR,QACtDqpC,EAAcjzB,YAAYgzB,KAItCrE,EAAMz/B,UAAU0jC,iBAAmB,SAAUW,GACzC,IAAI3C,EAAa2C,IAAcA,EAAU94B,UAAUC,SAAS,eACxD64B,EAAU94B,UAAUC,SAAS,mBAAqB64B,EAAU94B,UAAUC,SAAS,gBACnF,GAAI64B,IAAc3C,GAAcv+B,KAAKtJ,OAAOkI,cAAcoB,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAG4U,aAAa,cACnH+0B,EAAU/0B,aAAa,YAAa,CACpC,IAAIg1B,EAAenhC,KAAKtJ,OAAO4V,cAAc,OAASC,UAAW,qBAC7D60B,EAAiBphC,KAAKtJ,OAAOg+B,aACjCyM,EAAa3mC,MAAM2S,MAAQnN,KAAKtJ,OAAOid,QAAQqtB,YAAchhC,KAAKihC,iBAAmB,KAChFG,EAAe74B,iBAAiB,qBAAqBhR,SACtD6pC,EAAeh5B,UAAUuE,IAAI,uBAC7By0B,EAAezzB,YAAYwzB,GAC3BA,EAAa3mC,MAAM6mC,OAASrhC,KAAKihC,iBAAmB,QAIhE3E,EAAMz/B,UAAUokC,eAAiB,WAC7B,IAAIK,EAAathC,KAAKtJ,OAAOg+B,aAAa6B,kBAC1C,OAAO+K,EAAWC,YAAcD,EAAWN,YAAcQ,SAAOC,oBAAsB,GAE1FnF,EAAMz/B,UAAU+hC,aAAe,WAC3B,IAAI8C,EAAW1Q,SAASnZ,uBAAuB,qBAAqB,GAEpE,IADgB6pB,EAASn5B,iBAAiB,gBAAgBhR,SACvCyI,KAAKtJ,OAAOiwB,gBAAgBC,SAAU,CACrD,IAAI+a,EAAM3Q,SAAS1kB,cAAc,OACjClE,YAAUu5B,GAAM,wBAChBv5B,YAAUu5B,GAAM,UAAW,mBAC3B,IAAIC,EAAWF,EAAS52B,cAAc,eAClC+2B,EAAUH,EAAS52B,cAAc,cAAc2C,UAC/Cm0B,IACAC,EAAUD,EAASn0B,UACnBm0B,EAASE,WAAWC,YAAYH,IAEpCF,EAAS52B,cAAc,cAAc2C,UAAY,GACjD,IAAIu0B,EAAchR,SAAS1kB,cAAc,QACzC01B,EAAYz1B,UAAY,aACxBy1B,EAAYxnC,MAAMynC,YAAc,OAChCD,EAAYv0B,UAAYo0B,EACxBH,EAAS52B,cAAc,cAAc6C,YAAYg0B,GACjDD,EAAS52B,cAAc,cAAc6C,YAAYq0B,KAGzD1F,EAAMz/B,UAAUujC,gBAAkB,WAC9B,IAAI8B,EAAYlR,SAASlmB,cAAc,gBACnCo3B,GACAA,EAAU/b,UAGlBmW,EAAMz/B,UAAUwjC,kBAAoB,SAAUj/B,GAC1C,IAAImK,KACAoI,EAAU5I,UAAQ3J,EAAQ,OAC9BmK,EAAaoI,KAAarL,MAAMvL,KAAK4W,EAAQpL,iBAAiB,uDAC/ChR,SACe,eAAtByI,KAAKk9B,eACLl9B,KAAKsgC,iBAAiB/0B,GAAY,EAAM,aACpCvL,KAAKtJ,OAAOid,QAAQkE,uBAAuB,wBAAwBtgB,OAAS,GAC5EyI,KAAKtJ,OAAOid,QAAQkE,uBAAuB,wBAAwB,GAAGsO,UAGpD,kBAAtBnmB,KAAKk9B,cACLl9B,KAAKsgC,iBAAiB/0B,GAAY,EAAM,kBAIpD+wB,EAAMz/B,UAAUqjC,wBAA0B,WACtC,IAAIiC,MACJA,KAAY75B,MAAMvL,KAAKiD,KAAKtJ,OAAOid,QAAQpL,iBAAiB,+BACjDhR,SACPyI,KAAKsgC,iBAAiB6B,GAAQ,EAAO,gBACrCniC,KAAKsgC,iBAAiB6B,GAAQ,EAAO,eAG7C7F,EAAMz/B,UAAUyjC,iBAAmB,SAAU5gC,EAAOiN,EAAKJ,GACrD,IAAK,IAAIlV,EAAI,EAAGe,EAAMsH,EAAMnI,OAAQF,EAAIe,EAAKf,IACrCsV,EACAjN,EAAMrI,GAAG+Q,UAAUuE,IAAIJ,GAGvB7M,EAAMrI,GAAG+Q,UAAU+d,OAAO5Z,IAItC+vB,EAAMz/B,UAAUoiC,UAAY,SAAUtrB,GAClC,IAAIyuB,EAAMzuB,EAAQ0uB,wBACdC,EAAOtR,SAASsR,KAChBC,EAAUvR,SAASwR,gBACnB/L,EAAYh8B,OAAOgoC,aAAeF,EAAQ9L,WAAa6L,EAAK7L,UAC5DiM,EAAajoC,OAAOkoC,aAAeJ,EAAQG,YAAcJ,EAAKI,WAC9DE,EAAYL,EAAQK,WAAaN,EAAKM,WAAa,EACnDC,EAAaN,EAAQM,YAAcP,EAAKO,YAAc,EACtD1D,EAAMiD,EAAIjD,IAAM1I,EAAYmM,EAC5BE,EAAOV,EAAIU,KAAOJ,EAAaG,EACnC,OAAS1D,IAAK/nB,KAAK2rB,MAAM5D,GAAM2D,KAAM1rB,KAAK2rB,MAAMD,KAEpDxG,EAAMz/B,UAAU+/B,WAAa,SAAU75B,GACnC,IAAIk6B,EAAOj9B,KAAKtJ,OACZssC,EAAehjC,KAAKtJ,OAAOid,QAAQ7I,cAAc,sBACrDk4B,EAAaxoC,MAAMyoC,OAAS,GAC5B,IAAIvE,EAAS37B,EAAK3B,OAAS2J,UAAQhI,EAAK3B,OAAQ,MAAQ,KACpD8hC,EAASxE,EAASA,EAAOh1B,UAAY,EACrCi0B,KACAO,EAAgBjB,EAAK9gC,wBAAwB+mC,GAmBjD,GAlBAljC,KAAKogC,kBACLpgC,KAAKu8B,SAAU,EACVx5B,EAAKtE,KAAK,GAIXk/B,EAAc56B,EAAKtE,KAHnBk/B,EAAYnlC,KAAKuK,EAAKtE,OAKV,IAAZykC,EACAljC,KAAKmjC,mBAAmBxF,EAAaO,IAGrCl+B,KAAKu8B,SAAU,EACfv8B,KAAK4+B,iBAEJ3B,EAAKtW,gBAAgBC,UAAY5mB,KAAKu8B,SACvCU,EAAK1B,qBAAqBkD,WAAW17B,EAAK+E,KAAMo7B,EAAQngC,GAExDk6B,EAAKtW,gBAAgBC,SAAU,CAE/B,IADIwc,EAAcv4B,eAAa9H,EAAK3B,OAAQ,gBACzBgiC,EAAYxvB,KAAO5T,KAAKtJ,OAAOiwB,gBAAgBC,SAAU,CACvDwc,EAAYC,cAAc,GAChC9H,qBAAqBkD,WAAW17B,EAAK+E,KAAMo7B,EAAQngC,IAGtE,GAAIA,EAAK3B,QAAU2J,UAAQhI,EAAK3B,OAAQ,IAAM67B,EAAKtW,gBAAgBC,UAAW,CAC1E,IAAIwc,GAAAA,EAAcv4B,eAAa9H,EAAK3B,OAAQ,iBAExC4hC,EAAaxoC,MAAMyoC,OAAS,aAIxC3G,EAAMz/B,UAAUqK,WAAa,SAAUnE,GACnC,IAAIk6B,EAAOj9B,KAAKtJ,OA6ChB,GA3CKumC,EAAKtW,gBAAgBC,UAuBlB7jB,EAAK3B,QAAU2J,UAAQhI,EAAK3B,OAAQ,IAAM67B,EAAKtW,gBAAgBC,WAAa/b,eAAa9H,EAAK3B,OAAQ,eACtGyJ,eAAa9H,EAAK3B,OAAQ,cAAcwS,KAAOqpB,EAAKtW,gBAAgBC,UAAY7jB,EAAK3B,QAAU4vB,SAASC,eAAegM,EAAKtW,gBAAgBC,aAC5I1Q,WAAS,eAAgBlW,KAAKk9B,aAAcn6B,GAC5Ck6B,EAAKh0B,QjBldA,UiBkdwBlG,IACxBA,EAAKiG,QAAUi0B,EAAKtW,gBAAgBC,WACrC5mB,KAAKsjC,aAAavgC,GACdk6B,EAAKliB,cACLkiB,EAAKz/B,SAAWwC,KAAKq9B,aAAaJ,EAAKz/B,aA7B/CqN,eAAa9H,EAAK3B,OAAQ,eACtBpB,KAAKtJ,OAAOid,QAAQ7I,cAAc,kBAClC9K,KAAKk9B,aAAe,WAExBhnB,WAAS,eAAgBlW,KAAKk9B,aAAcn6B,GAC5CA,EAAKo6B,UAAYp6B,EAAKo6B,YAAcp6B,EAAKwgC,UAAYvjC,KAAKwjC,aAAazgC,EAAK3B,OAAO6hB,eAAiBlgB,EAAKo6B,UACzGF,EAAKh0B,QjB/bA,UiB+bwBlG,GACxBA,EAAKiG,SACD7R,EAAgB6I,KAAKtJ,SACtBsJ,KAAKo9B,SAASr6B,GAEdk6B,EAAKliB,cACLkiB,EAAKz/B,SAAWwC,KAAKq9B,aAAaJ,EAAKz/B,WAE3Cy/B,EAAKtlC,KAAK02B,UACL32B,oBAAkBulC,EAAK/wB,mBAAmBpB,cAAc,wBACzDmyB,EAAK/wB,mBAAmBpB,cAAc,sBAAsBqb,WAkB5EnmB,KAAKkgC,0BACLlgC,KAAKigC,oBACAvoC,oBAAkBsI,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqB,IAG7EngB,oBAAkBsI,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoB,KACvF7X,KAAKtJ,OAAOid,QAAQkE,uBAAuB,oBAAoB,GAAGsO,SAHlEnmB,KAAKtJ,OAAOid,QAAQkE,uBAAuB,qBAAqB,GAAGsO,SAKnEnmB,KAAKtJ,OAAO4I,sBAAwBU,KAAKtJ,OAAOma,cAAgBnZ,oBAAkBqL,EAAKtE,KAAK,GAAa,YAAI,CAC7G,IAAIvE,EAAQ8F,KAAKtJ,OAAO0I,gBACxBlF,GAAgB,EAChB,IAAIi+B,EAAkBn4B,KAAKtJ,OAAO6E,0BAA0B,GACxDmO,EAAW1J,KAAKtJ,OAAOiB,KAAKmH,wBAAwBiE,EAAKtE,KAAK,GAAG05B,IACjEx5B,EAAMqB,KAAKtJ,OAAOmI,UAAU6K,GAC5BjL,EAAOsE,EAAKtE,KAAK,GACrB,GAA0B,kBAAtBuB,KAAKk9B,aAAkC,CACvC,IAAIxkC,KACAoP,KACJpP,EAAOF,KAAKiG,GACZqJ,EAAKtP,KAAKmG,GAEVF,EAAO1F,EAAciH,KAAKtJ,OAAQqM,EAAKtE,KAAK,GAAiB,gBAC7DiL,EAAW1J,KAAKtJ,OAAOiB,KAAKmH,wBAAwBL,EAAK05B,IACzD,IAAIqF,EAAYx9B,KAAKtJ,OAAOmI,UAAU6K,GACtChR,EAAOF,KAAKiG,GACZqJ,EAAKtP,KAAKglC,GACV,IAAK,IAAInmC,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAC/B2I,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAM/F,EAAOrB,GAAIoI,KAAMqI,EAAKzQ,GAAGqI,MAAMxF,GACrCyF,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,iBAClDS,YAAa,mBAGrB,IAAI+X,EAAY4lB,EAAU3lB,uBAAuB,sBAAsB,GAClEngB,oBAAkBkgB,KACnBvK,eAAauK,GAAY,sBACzBxH,YAAUwH,GAAY,0BAI1B5X,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAMA,EAAMgB,KAAMd,EAAIe,MAAMxF,GAC5ByF,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,iBAClDS,YAAa,qBAK7By8B,EAAMz/B,UAAUymC,aAAe,SAAUvgC,GACrC,IAII0gC,EAJAxG,EAAOj9B,KAAKtJ,OACZ+pC,EAAY11B,UAAQhI,EAAK3B,OAAQ,MACjCsiC,EAAcC,MAAM3jC,KAAKwjC,aAAa/C,IAAc,EAAIzgC,KAAKwjC,aAAa/C,GAC1E2C,EAAcv4B,eAAa9H,EAAK3B,OAAQ,cAE5C,GAAIgiC,GAAeA,EAAYxvB,KAAO5T,KAAKtJ,OAAOiwB,gBAAgBC,WAAanwB,EAAauJ,KAAKtJ,UACzFS,EAAgB6I,KAAKtJ,QAAS,CAClC+sC,EAAaL,EAAYC,cAAc,GAGvC,IAAK,IAFDnrC,EAAU+kC,EAAKx0B,qBACf6sB,KACKj+B,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChCi+B,EAAQj+B,GAAKa,EAAQb,GAAG6C,MAE5B,IAAIuE,EAAOglC,EAAW9sC,WACtB,GAA6B,MAAzBqJ,KAAKtJ,OAAOwG,YAAsBxF,oBAAkBsI,KAAKk9B,eAAuC,kBAAtBl9B,KAAKk9B,cAA0D,YAAtBl9B,KAAKk9B,gBAAiCz+B,EAAW,OAAG,CAElK,IADDmlC,KACJ,IAASvsC,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC,GAAIa,EAAQb,GAAGgC,gBAAiB,CAC5BuqC,EAAWprC,KAAKN,EAAQb,IAExB,IAAK,IADD2G,EAAQ5E,EAAoBlB,EAAQb,IAC/B4hC,EAAM,EAAGA,EAAMj7B,EAAMzG,OAAQ0hC,IAClC2K,EAAWprC,KAAKwF,EAAMi7B,IAI9B2K,EAAWrsC,SACXW,EAAU0rC,GAGlB3G,EAAKpqB,OAAOkqB,IAAqBzH,QAASA,EAASp9B,QAASA,IAC5DurC,EAAW5wB,OAAOgqB,IAAkBvB,QAASoI,EAAaxrC,QAASA,IACnE,IAAI2rC,EAAqBJ,EAAWlI,qBAAqBphB,aACzD,IAAKziB,oBAAkBmsC,GACnB,IAASxsC,EAAI,EAAGA,EAAIwsC,EAAmBtsC,OAAQF,IAE3C,GADAwsC,EAAmBxsC,GAAG6C,MAAQ7C,GACzBK,oBAAkBmsC,EAAmBxsC,GAAGyB,YAAa,CACtD,IAAIgrC,EAAczlC,WAAS,sBAAwBwlC,EAAmBxsC,GAAGiH,eAAiB,SAAUmlC,GACpGI,EAAmBxsC,GAAGyB,WAAWoB,MAAQ4pC,EAIrD7G,EAAKtlC,KAAK02B,UACVoV,EAAW9rC,KAAK02B,UACZoV,EAAW9rC,KAAKhB,WAAWY,OAAS,IACpCksC,EAAW9rC,KAAK02B,UACX32B,oBAAkB+rC,EAAWv3B,mBAAmBpB,cAAc,wBAC/D24B,EAAWv3B,mBAAmBpB,cAAc,sBAAsBqb,SAEjEzuB,oBAAkB+rC,EAAW/O,aAAa5pB,cAAc,uBACzD24B,EAAW/O,aAAa5pB,cAAc,qBAAqBqb,UAInEhvB,EAAgB6I,KAAKtJ,UACrB+sC,EAAaL,EAAYC,cAAc,GACvCpG,EAAKtlC,KAAK02B,UACVoV,EAAW9rC,KAAK02B,YAGxBiO,EAAMz/B,UAAU2mC,aAAe,SAAU/C,GACrC,OAAOA,EAAY1tB,SAAS0tB,EAAUt0B,aAAa,iBAAkB,IAAM,GAE/EmwB,EAAMz/B,UAAU9D,cAAgB,SAAUL,GACtC,IAAII,EAAaJ,EAAOI,WACxB,GAA0B,kBAAtBkH,KAAKk9B,aAAkC,CACvC,IAAI6G,EAAiB/jC,KAAKtJ,OAAO+R,qBAAqB,GACtDzI,KAAKk+B,cAAgBnlC,EAAciH,KAAKtJ,OAAQqtC,EAAejrC,WAAWE,UAE9E,GAA0B,kBAAtBgH,KAAKk9B,aAAkC,CAC3Bl9B,KAAKtJ,OAAO+R,qBAAqB,GAAGtO,QAClCrB,EAAWqB,MACrB6F,KAAKk+B,cAAgBnlC,EAAciH,KAAKtJ,OAAQoC,EAAWE,UAG3DgH,KAAKjH,cAAcD,KAI/BwjC,EAAMz/B,UAAUugC,SAAW,SAAUr6B,EAAMihC,GACvC,GAA0B,YAAtBhkC,KAAKk9B,eAA+BzmC,EAAauJ,KAAKtJ,QAAS,CAC/D,IACIutC,EADAhH,EAAOj9B,KAAKtJ,OAEZwnC,OAAgB,EACpB,GAAIxmC,oBAAkBqL,EAAKo6B,WAAY,CACnC,IAAIzzB,EAAWuzB,EAAKh1B,wBAAwB,GAAK,EAC7CvP,EAASukC,EAAK9gC,wBAAwBuN,GAC1C1J,KAAKjH,cAAcL,QAGnBqK,EAAKo6B,UAAYp6B,EAAKo6B,YAAcp6B,EAAKwgC,UAAYvjC,KAAKwjC,aAAazgC,EAAK3B,OAAO6hB,eAAiBlgB,EAAKo6B,UACzGn9B,KAAKk+B,cAAgBjB,EAAK9gC,wBAAwB4G,EAAKo6B,WAE3D,IAAIQ,KACJO,EAAgBl+B,KAAKk+B,cAChBn7B,EAAKtE,KAAK,GAIXk/B,EAAc56B,EAAKtE,KAHnBk/B,EAAYnlC,KAAKuK,EAAKtE,MAK1B,IAAI4P,EAAQ,EACR0yB,EAAe/gC,KAAKtJ,OAAOiwB,gBAAgBC,SAC/C5mB,KAAKkkC,eAAiBnD,EACjBA,EAID/gC,KAAKy8B,cAAgBsE,GAAgB/gC,KAAKw8B,mBAH1Cx8B,KAAKmjC,mBAAmBxF,EAAaO,GAKzC,IAAIiG,EAAaxG,EAAYpmC,OACxBG,oBAAkBsI,KAAKtJ,OAAOwG,YAC/BygC,EAAYyG,UAuFhB,IAAK,IArFDC,EAAU,SAAUhtC,GAGpB,GAFA4sC,EAAkBtG,EAAYtmC,GAC9BitC,EAAO5G,cAAgBuG,EACK,YAAxBK,EAAOpH,aAA4B,CAInC,GAHKD,EAAKtW,gBAAgBC,WAAYod,GAClCM,EAAOxG,gBAEPwG,EAAO5G,gBAAkB4G,EAAOpG,cAAe,CAC/C,IAAIqG,EAAeD,EAAOd,aAAazgC,EAAK3B,OAAOojC,aAAavhB,eAC5D0gB,MAAMY,KACNA,EAAeD,EAAOd,aAAazgC,EAAK3B,OAAO6hB,gBAEnDlgB,EAAKo6B,UAAYoH,EACjBrG,EAAgBoG,EAAOpG,cAAgBoG,EAAO5tC,OAAOyF,wBAAwB4G,EAAKo6B,WAEtF,GAAIe,EAAcplC,YAAsC,kBAAxBwrC,EAAOpH,aAAkC,EAG7C,KADpBuH,GADAvqB,EAAgB+iB,EAAK1/B,YACUiB,QAAQ8lC,EAAO5G,iBAE9CxjB,EAAc/c,OAAOsnC,EAAgB,GAG7C,IAAIC,EAAeJ,EAAOnqB,aAAa3b,QAAQ0/B,GAE/C,GADAoG,EAAOK,UAAUD,GACW,kBAAxBJ,EAAOpH,aAAkC,CAqBzC,GApBKgB,EAAc7kC,iBAOfgV,EAAQi2B,EAAOM,cAAc1G,EAAe,GACxCoG,EAAO5tC,OAAOuG,iBACdqnC,EAAO9oC,SAAS2B,OAAOunC,EAAer2B,EAAQ,EAAG,EAAGi2B,EAAO5G,cAActjC,UAE7EkqC,EAAOnqB,aAAahd,OAAOunC,EAAer2B,EAAQ,EAAG,EAAGi2B,EAAO5G,iBAV3D4G,EAAO5tC,OAAOuG,iBACdqnC,EAAO9oC,SAAS2B,OAAOunC,EAAe,EAAG,EAAGJ,EAAO5G,cAActjC,UAErEkqC,EAAOnqB,aAAahd,OAAOunC,EAAe,EAAG,EAAGJ,EAAO5G,gBASvDhmC,oBAAkBwmC,EAAcplC,qBACzBmrC,EAAgBnrC,WACvBmrC,EAAgB9pC,MAAQ,EACpBmqC,EAAO5tC,OAAOuG,kBACdgnC,EAAgBK,EAAO5tC,OAAOuG,iBAAmB,OAGrDihC,EAAcplC,WAAY,CAC1B,IACIQ,EADMgrC,EAAO3H,0BAA0BuB,EAAc5/B,gBAClC,GAAGhF,aACtBurC,EAAqBvrC,EAAakF,QAAQ0/B,GAAiB,EAC/D5kC,EAAa6D,OAAO0nC,EAAoB,EAAGZ,GAC3CA,EAAgBnrC,WAAaolC,EAAcplC,WAC3CmrC,EAAgB3lC,eAAiB4/B,EAAc5/B,eAC3CgmC,EAAO5tC,OAAOuG,kBACdgnC,EAAgBK,EAAO5tC,OAAOuG,iBAAmBihC,EAAcoG,EAAO5tC,OAAOuG,iBAC7EgnC,EAAgBnrC,WAAaolC,EAAcplC,WAC3CmrC,EAAgB9pC,MAAQ+jC,EAAc/jC,OAG9C,GAAI8pC,EAAgB5qC,gBAAiB,CAEjCirC,EAAOQ,uBAAuBb,EADlB,GAEZK,EAAOS,kBAAkBd,EAAiBS,EAAer2B,EAAQ,IAGzEi2B,EAAOU,WAAWN,GAEtB,GAAIhtC,oBAAkBusC,EAAgBnrC,YAAa,CAC/C,IAAIohB,EACAuqB,GADAvqB,EAAgB+iB,EAAK1/B,YACUiB,QAAQ8lC,EAAOpG,eAC9C+G,EAAc,EAClB/qB,EAAczc,OAAO,SAAUC,GACvBumC,EAAgBjrC,WAAa0E,EAAE1E,UAC/BisC,MAGoB,kBAAxBX,EAAOpH,cAAoD,IAAhB+H,EAC3C/qB,EAAc/c,OAAOsnC,EAAiB,EAAG,EAAGR,GAEf,eAAxBK,EAAOpH,cAAiD,IAAhB+H,GAC7C/qB,EAAc/c,OAAOsnC,EAAgB,EAAGR,GAGhDhH,EAAK1B,qBAAqBwC,yBAE1BuG,EAAStkC,KACJ3I,EAAI,EAAGA,EAAI8sC,EAAY9sC,IAC5BgtC,EAAQhtC,KAIpBilC,EAAMz/B,UAAUmoC,WAAa,SAAUj2B,GACnC,IAAIkuB,EAAOj9B,KAAKtJ,OACZ4C,EAAeF,EAAoB4G,KAAKk+B,eACxCgH,EAAsBxtC,oBAAkB4B,IAChB,IAAxBA,EAAa/B,OAAgBwX,EAAc,EAC3CzV,EAAa/B,OAASwX,EAAc,EACd,kBAAtB/O,KAAKk9B,eACDD,EAAKhgC,iBACL+C,KAAKxE,SAAS2B,OAAO+nC,EAAoB,EAAGllC,KAAK09B,cAActjC,UAC/D4F,KAAKma,aAAahd,OAAO+nC,EAAoB,EAAGllC,KAAK09B,gBAGrD19B,KAAKma,aAAahd,OAAO+nC,EAAoB,EAAGllC,KAAK09B,eAEzD19B,KAAKmlC,cACDnlC,KAAK09B,cAAcrkC,iBACnB2G,KAAK+kC,kBAAkB/kC,KAAK09B,cAAewH,KAIvD5I,EAAMz/B,UAAU8nC,UAAY,SAAUD,GAClC,IAAIzH,EAAOj9B,KAAKtJ,OAChB,GAA0B,eAAtBsJ,KAAKk9B,aAA+B,CAQpC,GAPID,EAAKhgC,iBACL+C,KAAKxE,SAAS2B,OAAOunC,EAAc,EAAG1kC,KAAK09B,cAActjC,UAE7D4F,KAAK09B,cAAc5kC,WAAakH,KAAKma,aAAauqB,GAAc5rC,WAChEkH,KAAK09B,cAAcp/B,eAAiB0B,KAAKma,aAAauqB,GAAcpmC,eACpE0B,KAAK09B,cAAcvjC,MAAQ6F,KAAKma,aAAauqB,GAAcvqC,MAC3D6F,KAAKma,aAAahd,OAAOunC,EAAc,EAAG1kC,KAAK09B,eAC3C19B,KAAK09B,cAAcrkC,gBAAiB,CAEpC2G,KAAK+kC,kBAAkB/kC,KAAK09B,cAAegH,GAC3C1kC,KAAK8kC,uBAAuB9kC,KAAK09B,cAFrB,GAIhB,GAAI19B,KAAKk+B,cAAcplC,WAAY,CAC/B,IACIQ,EADM0G,KAAK28B,0BAA0B38B,KAAKk+B,cAAc5/B,gBACrC,GAAGhF,aACtBurC,EAAqBvrC,EAAakF,QAAQwB,KAAKk+B,eACnD5kC,EAAa6D,OAAO0nC,EAAoB,EAAG7kC,KAAK09B,kBAI5DpB,EAAMz/B,UAAUsoC,YAAc,WAC1B,IAAIlI,EAAOj9B,KAAKtJ,OACZgnC,EAAgB19B,KAAK09B,cACrBQ,EAAgBl+B,KAAKk+B,cACrBkH,EAAYnI,EAAK7/B,aAWrB,GAVK8gC,EAAc7kC,kBACf6kC,EAAc7kC,iBAAkB,EAChC6kC,EAAclsB,yBAA0B,GACpCta,oBAAkBwmC,EAAc5kC,eAAuD,IAAtC4kC,EAAc5kC,aAAa/B,UAC5E2mC,EAAc5kC,iBACT2jC,EAAKhgC,iBAAmBvF,oBAAkBwmC,EAAc9jC,SAASgrC,MAClElH,EAAc9jC,SAASgrC,SAIT,kBAAtBplC,KAAKk9B,aAAkC,CACvC,IAAIpkC,EAAasD,YAAW8hC,UACrBplC,EAAWQ,aAClBokC,EAAc5kC,WAAaA,EAC3B4kC,EAAcp/B,eAAiB4/B,EAAcllC,SAC7CklC,EAAc5kC,aAAa6D,OAAO+gC,EAAc5kC,aAAa/B,OAAQ,EAAGmmC,GASxE,GAPIT,EAAoB,kBACpBiB,EAAcjB,EAAK7/B,iBACnB8gC,EAAcjB,EAAK7/B,cAAcD,OAAO+gC,EAAcjB,EAAK7/B,cAAc7F,OAAQ,EAAGmmC,IAEnFhmC,oBAAkBgmC,IAAmBT,EAAKhgC,iBAAoBvF,oBAAkBwmC,EAAc9jC,SAASgrC,KACxGlH,EAAc9jC,SAAS6iC,EAAK7/B,cAAcD,OAAO+gC,EAAc5kC,aAAa/B,OAAQ,EAAGmmC,EAActjC,UAEpGsjC,EAAcrkC,gBAGd,CAEDqkC,EAAcvjC,MAAQ+jC,EAAc/jC,MAAQ,EAC5C6F,KAAK8kC,uBAAuBpH,EAFhB,QAHZA,EAAcvjC,MAAQ+jC,EAAc/jC,MAAQ,EAOhD+jC,EAAc/kC,UAAW,IAGjCmjC,EAAMz/B,UAAUihC,cAAgB,WACxB99B,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,SAChEsJ,KAAKma,aAAena,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAC3DuE,KAAKxE,SAAWwE,KAAKtJ,OAAOC,WAAWA,WAAW8E,OAGlDuE,KAAKma,aAAena,KAAKtJ,OAAOiB,KAAKhB,WACrCqJ,KAAKxE,SAAWwE,KAAKtJ,OAAOC,YAEhC,IAAI0uC,EAAatsC,EAAciH,KAAKtJ,OAAQsJ,KAAK09B,cAAc1kC,WAC1DtB,oBAAkB2tC,EAAW/rC,eAAiB+rC,EAAW/rC,aAAa/B,SACvE8tC,EAAWhsC,iBAAkB,GAEjC2G,KAAKslC,cAAcD,IAEvB/I,EAAMz/B,UAAUkoC,kBAAoB,SAAUrsC,EAAQ2V,GAClD,IAAIQ,EACAouB,EAAOj9B,KAAKtJ,OACZa,EAAS,EACb,IAAKmB,EAAOW,gBACR,OAAO,EAEX9B,EAASmB,EAAOY,aAAa/B,OAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IACxBwX,EAAgBxQ,WAAS,sBAAwB3F,EAAOY,aAAajC,GAAG2B,SAAUikC,GAClF5uB,IACA4uB,EAAKz/B,SAASL,OAAOkR,EAAO,EAAGQ,GAC/BqH,WAAS,sBAAwBrH,EAAc7V,SAAU6V,EAAe7O,KAAKtJ,QACzEumC,EAAKhgC,iBACL+C,KAAKxE,SAAS2B,OAAOkR,EAAO,EAAGQ,EAAczU,UAE7CyU,EAAcxV,kBACdgV,EAAQrO,KAAK+kC,kBAAkBl2B,EAAeR,IAGtD,OAAOA,GAEXiuB,EAAMz/B,UAAUioC,uBAAyB,SAAUpsC,EAAQyB,GACvD,IACI0U,EADAtX,EAAS,EAGb,GADA4C,KACKzB,EAAOW,gBACR,OAAO,EAEX9B,EAASmB,EAAOY,aAAa/B,OAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IAAK,CAC7BwX,EAAgBxQ,WAAS,sBAAwB3F,EAAOY,aAAajC,GAAG2B,SAAUgH,KAAKtJ,QACvF,IAAI6G,OAAa,EACb7E,EAAOI,aACPyE,EAAaxE,EAAciH,KAAKtJ,OAAQgC,EAAOI,WAAWE,WAE1DtB,oBAAkB6F,KAAgB7F,oBAAkBgB,EAAOI,cAC3DyE,EAAa7E,EAAOI,YAExB+V,EAAc1U,MAAQzB,EAAOI,WAAayE,EAAWpD,MAAQA,EAAQzB,EAAOyB,MAAQ,EAChF0U,EAAcxV,kBACdc,IACAA,EAAQ6F,KAAK8kC,uBAAuBj2B,EAAe1U,IAG3D,OAAOA,GAEXmiC,EAAMz/B,UAAUyoC,cAAgB,SAAU5sC,GACtC,IACI/B,EADAsmC,EAAOj9B,KAAKtJ,OAGZC,EADAqJ,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QACnDsJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KAGlCuE,KAAKtJ,OAAOC,WAE7B,IAAI0uC,EAAa3sC,EACbsC,GAAmBtD,oBAAkBulC,EAAKhgC,iBAC1CsoC,EAAiBvlC,KAAK28B,0BAA0B0I,EAAW/mC,gBAAgB,GAC/E,GAAI+mC,EAAY,CACZ,GAAIA,EAAWvsC,WAAY,CACvB,IAAIQ,EAAeisC,EAAiBA,EAAejsC,gBAC/CksC,EAAa,EACblsC,GAAgBA,EAAa/B,OAAS,IACtCiuC,EAAalsC,EAAakF,QAAQ6mC,GAClCE,EAAejsC,aAAa6D,OAAOqoC,EAAY,GAC1CxlC,KAAKtJ,OAAOuG,iBACbpC,GAAaZ,MAAOorC,EAAY/pC,OAAQ,UAAY0E,KAAKtJ,OAAQsE,EAAiBqqC,EAAWnrC,MAAOmrC,EAAWnrC,QAI3H,GAAI+iC,EAAKhgC,gBAAiB,CAClBooC,EAAWhsC,iBAAmBgsC,EAAW/rC,aAAa/B,OAAS,GAC/DyI,KAAKylC,gBAAgBJ,GAKzB,IAAK,IAHDpH,OAAM,EACNyH,OAAM,EACNvrB,EAAexjB,EACVU,EAAI,EAAGA,EAAI8iB,EAAa5iB,OAAQF,IACjC8iB,EAAa9iB,GAAG2I,KAAKtJ,OAAOwG,aAAemoC,EAAWjrC,SAAS4F,KAAKtJ,OAAOwG,aAC3E+gC,EAAM5mC,GAGd,IAASA,EAAI,EAAGA,EAAI2I,KAAKma,aAAa5iB,OAAQF,IACtC2I,KAAKma,aAAa9iB,GAAG2I,KAAKtJ,OAAOwG,aAAemoC,EAAWjrC,SAAS4F,KAAKtJ,OAAOwG,aAChFwoC,EAAMruC,IAGD,IAAT4mC,GAAevmC,oBAAkBumC,IACjCtnC,EAAWwG,OAAO8gC,EAAK,IAEd,IAATyH,GAAehuC,oBAAkBguC,IACjC1lC,KAAKma,aAAahd,OAAOuoC,EAAK,GAGtC,IAAI32B,EAAc/O,KAAKma,aAAa3b,QAAQ6mC,GAC5C,IAAKpI,EAAKhgC,gBAAiB,CACvB,IAAI0oC,EAAc3lC,KAAKtJ,OAAO6G,WAAWiB,QAAQ6mC,IAC5B,IAAjBM,IACA1I,EAAK1/B,WAAWJ,OAAOwoC,EAAa,GACpChvC,EAAWwG,OAAOwoC,EAAa,IAGvC,IAAqB,IAAjB52B,IAAuBkuB,EAAKhgC,gBAE5B,IAAK,IADDk7B,EAAkB8E,EAAK1hC,0BAA0B,GAC5CxB,EAAI,EAAGA,EAAIiG,KAAKma,aAAa5iB,OAAQwC,IACtCiG,KAAKma,aAAapgB,GAAGo+B,KAAqBkN,EAAWlN,KACrDppB,EAAchV,GAI1B,IAAKkjC,EAAKhgC,gBAAiB,CACvB,IAAI2oC,EAAqB5lC,KAAK4kC,cAAcS,EAAY,GACxDrlC,KAAKma,aAAahd,OAAO4R,EAAa62B,EAAqB,GAE3DP,EAAWvsC,YAAcysC,GAAkBA,EAAejsC,eAAiBisC,EAAejsC,aAAa/B,SACvGguC,EAAepsC,UAAW,EAC1BosC,EAAelsC,iBAAkB,EACjCksC,EAAevzB,yBAA0B,KAIrDsqB,EAAMz/B,UAAU4oC,gBAAkB,SAAU/sC,GACxC,IAAImW,EACAovB,EACAyH,EACA/uC,EAEAA,EADAqJ,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QACnDsJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KAGlCuE,KAAKtJ,OAAOC,WAE7B,IAAK,IAAIU,EAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAAK,CACjDwX,EAAgBnW,EAAOY,aAAajC,IAC/BK,oBAAkBmX,EAAcvV,eAAiBuV,EAAcvV,aAAa/B,SAC7EsX,EAAcxV,iBAAkB,GAEpC,IAAI8gB,OAAe,EAEfA,EADAna,KAAKtJ,OAAOC,sBAAsBC,eAAe4C,EAAUwG,KAAKtJ,QACjDsJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KAGlCuE,KAAKtJ,OAAOC,WAE/B,IAAK,IAAIkvC,EAAM,EAAGA,EAAM1rB,EAAa5iB,OAAQsuC,IACrC1rB,EAAa0rB,GAAK7lC,KAAKtJ,OAAOwG,aAAe2R,EAAczU,SAAS4F,KAAKtJ,OAAOwG,aAChF+gC,EAAM4H,GAGd,IAAK,IAAIC,EAAM,EAAGA,EAAM9lC,KAAKma,aAAa5iB,OAAQuuC,IAC9C,GAAI9lC,KAAKma,aAAa2rB,GAAK9lC,KAAKtJ,OAAOwG,aAAe2R,EAAczU,SAAS4F,KAAKtJ,OAAOwG,WAAY,CACjGwoC,EAAMI,EACN,OAGK,IAAT7H,GAAevmC,oBAAkBumC,IACjCtnC,EAAWwG,OAAO8gC,EAAK,IAEd,IAATyH,GAAehuC,oBAAkBguC,IACjC1lC,KAAKma,aAAahd,OAAOuoC,EAAK,GAE9B72B,EAAcxV,iBACd2G,KAAKylC,gBAAgB52B,KAIjCytB,EAAMz/B,UAAU+nC,cAAgB,SAAUlsC,EAAQ2V,GAC9C,IAAIQ,EACJ,IAAKnW,EAAOW,gBACR,OAAO,EAEX,IAAK,IAAIhC,EAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAE5CgX,KADAQ,EAAgBnW,EAAOY,aAAajC,IAElBgC,kBACdgV,EAAQrO,KAAK4kC,cAAc/1B,EAAeR,IAGlD,OAAOA,GAEXiuB,EAAMz/B,UAAUsmC,mBAAqB,SAAU4C,EAAgBl3B,GAC3D,IAAIzH,EAAQpH,KACZ+lC,EAAetoC,OAAO,SAAUC,GAC5B,GAAIA,EAAErE,kBAAoB3B,oBAAkBgG,EAAEpE,cAAe,CAEzD,IAAe,IADHoE,EAAEpE,aAAakF,QAAQqQ,GAQ/B,OAHAzH,EAAM81B,aAAe,UACrB91B,EAAMw3B,oBACNx3B,EAAMm1B,SAAU,GALhBn1B,EAAM+7B,mBAAmBzlC,EAAEpE,aAAcuV,OAWzDytB,EAAMz/B,UAAU+M,QAAU,WACtB5J,KAAKwK,uBAMT8xB,EAAMz/B,UAAU2N,oBAAsB,WAC9BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIokB,GAAmB9uB,KAAK48B,YACxC58B,KAAKtJ,OAAOgU,IAAIskB,GAAmBhvB,KAAKkH,YACxClH,KAAKtJ,OAAOgU,IAAImyB,GAAgB78B,KAAK88B,WACrC98B,KAAKtJ,OAAOgU,IAAIqyB,GAAmB/8B,KAAKg9B,eAW5CV,EAAMz/B,UAAU+F,cAAgB,WAC5B,MAAO,kBAEJ05B,KChpCP77B,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQvJ,EAAKwJ,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUhK,OAAQiK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhJ,OAAOoJ,yBAAyBL,EAAQvJ,GAAOwJ,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQvJ,EAAKwJ,QACpH,IAAK,IAAIhK,EAAI8J,EAAW5J,OAAS,EAAGF,GAAK,EAAGA,KAASsJ,EAAIQ,EAAW9J,MAAImK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQvJ,EAAK2J,GAAKb,EAAES,EAAQvJ,KAAS2J,GAChJ,OAAOF,EAAI,GAAKE,GAAKnJ,OAAOuJ,eAAeR,EAAQvJ,EAAK2J,GAAIA,GAM5Di6B,GAAiC,SAAU35B,GAE3C,SAAS25B,IACL,OAAkB,OAAX35B,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAK/D,OAPAS,GAAUg7B,EAAiB35B,GAI3BZ,IACIc,cACDy5B,EAAgB5+B,UAAW,gBAAY,GACnC4+B,GACTx5B,iBChCExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAuBxCilC,GAA8C,SAAUlkC,GAExD,SAASkkC,EAA6BtvC,GAClC,IAAI0Q,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,IAAWsJ,KAEzC,OADAoH,EAAM8C,mBACC9C,EA8DX,OAlEA3G,GAAUulC,EAA8BlkC,GAMxCkkC,EAA6BnpC,UAAUqN,iBAAmB,WACtDlK,KAAKtJ,OAAOyT,GAAG87B,GAAqBjmC,KAAKkmC,SAAUlmC,OAEvDgmC,EAA6BnpC,UAAUqpC,SAAW,SAAUnjC,GACxD/C,KAAKmmC,WAAapjC,EAAKtE,MAE3BunC,EAA6BnpC,UAAUupC,YAAc,WACjD,OAAOtkC,EAAOjF,UAAUwpC,QAAQtpC,KAAKiD,OAEzCgmC,EAA6BnpC,UAAUypC,aAAe,SAAU7nC,EAAM+a,GAClE,IAAI+sB,EAAOvmC,KAAKomC,cAShB,GARK1uC,oBAAkB8hB,EAAWgtB,eACW,UAArChtB,EAAWgtB,YAAY3qB,WAA8D,SAArCrC,EAAWgtB,YAAY3qB,UACvErC,EAAWgtB,YAAYC,aAAeF,EAAKE,aAG3CjtB,EAAWgtB,YAAYC,aAAezmC,KAAK0mC,gBAAgBltB,EAAWgtB,YAAYvsB,OAGrFja,KAAKtJ,OAAOC,sBAAsBC,oBAAyD+mB,IAA1C3d,KAAKtJ,OAAOC,WAAWA,WAAWgwC,MAChF3mC,KAAKtJ,OAAOC,WAAWA,WAAW2tB,SAAqD,KAA1CtkB,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAAexvC,EAAgB6I,KAAKtJ,QACvH,OAAOoL,EAAOjF,UAAUypC,aAAavpC,KAAKiD,KAAMvB,EAAM+a,GAGjD9hB,oBAAkB8hB,EAAW3Z,cAAsD,gBAAtC2Z,EAAW3Z,YAAY+H,aACrE4R,EAAW3Z,YAAc,WAG7B,IAAK,IADDiI,EAAOhG,EAAOjF,UAAUypC,aAAavpC,KAAKiD,KAAMvB,EAAM+a,GACjDhY,EAAI,EAAGA,EAAIsG,EAAKvQ,OAAQiK,IAC7BsG,EAAKtG,GAAGtH,MAAS8F,KAAe,WAAExB,QAAQsJ,EAAKtG,GAAG/C,MAEtD,OAAOqJ,GAGfk+B,EAA6BnpC,UAAU+pC,mBAAqB,SAAUtrC,GAClE,IAAIurC,GAAS,SAAU,UAAW,UAAW,YAAa,YAAa,UACnE,OAAQ,UAAU9gB,KAAK,SAAU9rB,GAAS,OAAOqB,IAAWrB,IAChE,GAAK+F,KAAKtJ,OAAOC,sBAAsBC,oBAAyD+mB,IAA1C3d,KAAKtJ,OAAOC,WAAWA,WAAWgwC,MAChF3mC,KAAKtJ,OAAOC,WAAWA,WAAW2tB,SAAqD,KAA1CtkB,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAAexvC,EAAgB6I,KAAKtJ,QAAS,CAChI,IACIqjB,EAAc/Z,KAAU,MAAE+Z,YAC1B8sB,GACA7mC,KAAK8mC,SACL9mC,KAAKvB,QACLuB,KAAK+mC,WAEW,kBAAXzrC,GAA8B0E,KAAK8mC,MAAM/sB,IAC9C/Z,KAAK8mC,MAAM/sB,GAAaxiB,OAAUyI,KAAKtJ,OAAoB,cAAEswC,uBACtDhnC,KAAK8mC,MAAM/sB,QAIlB8sB,GAAoB,kBAAXvrC,KACT0E,KAAK8mC,SACL9mC,KAAKvB,QACLuB,KAAK+mC,WAGb,OAAOF,GAEJb,GACTiB,4BCnFEC,GAAwB,WAMxB,SAASA,EAAOxwC,GACZ+L,OAAKC,OAAOykC,UACZnnC,KAAKtJ,OAASA,EACdsJ,KAAKonC,mBAAoB,EACzBpnC,KAAKmO,kBACLnO,KAAKqnC,oBACLrnC,KAAKsnC,sBACLtnC,KAAKkK,mBAiNT,OAzMAg9B,EAAOrqC,UAAU+F,cAAgB,WAC7B,MAAO,UAQXskC,EAAOrqC,UAAU+M,QAAU,WACvB5J,KAAKwK,uBAMT08B,EAAOrqC,UAAUqN,iBAAmB,WAChClK,KAAKtJ,OAAOyT,GAAG,mBAAoBnK,KAAKunC,sBAAuBvnC,MAC/DA,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAKwnC,iBAAkBxnC,OAM1DknC,EAAOrqC,UAAU2N,oBAAsB,WAC/BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,mBAAoB1K,KAAKunC,uBACzCvnC,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAKwnC,oBAUzCN,EAAOrqC,UAAU0qC,sBAAwB,SAAUE,GAC/CvxB,WAAS,8BAAgClW,KAAKtJ,QAC9CsJ,KAAKqnC,iBAAmBI,EAAYhpC,KACpCuB,KAAKsnC,sBACLtnC,KAAKmO,kBACLnO,KAAKonC,mBAAoB,EACzB,IAAK,IAAIlL,EAAI,EAAGA,EAAIl8B,KAAKqnC,iBAAiB9vC,OAAQ2kC,IAAK,CACnD,IAAIttB,EAAM5O,KAAKqnC,iBAAiBnL,GAChCl8B,KAAK0nC,gBAAgB94B,GACrB,IAAI9W,EAAwD,KAAxCkI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAamI,KAAKtJ,OAAOsB,eAAeF,cACtFkI,KAAKtJ,OAAOkB,eAAeE,cACT,UAAlBA,GAA+C,SAAlBA,GACqB,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,MACzFmI,KAAKonC,mBAAoB,GAE7B,IAAIO,EAAUpvC,YAAU,eAAgBqW,IACnClX,oBAAkBiwC,IAAYA,EAAQpwC,QACvC2e,WAAS,0BAA2BlW,KAAK4nC,iBAAiBh5B,GAAMA,GAEpE,IAAIi5B,EAAWtvC,YAAU,aAAcqW,GACvC,IAAKlX,oBAAkBmwC,GAAW,CAC9B,IAAIC,EAAY/uC,EAAciH,KAAKtJ,OAAQkY,EAAI9V,WAAWE,UAAU,GAGpEkd,WAAS,2BAA2B,EAAM4xB,GACtCA,GAAaA,EAAUhvC,YACvBkH,KAAK+nC,2BAA2BD,IAIxC9nC,KAAKqnC,iBAAiB9vC,OAAS,GAAKyI,KAAKonC,mBACzCpnC,KAAKgoC,oBAEThoC,KAAKtJ,OAAOmc,OAAO,gBAAkBkB,OAAQ/T,KAAKmO,kBAEtD+4B,EAAOrqC,UAAUkrC,2BAA6B,SAAUrvC,GACpD,IAAIovC,EAAY/uC,EAAciH,KAAKtJ,OAAQgC,EAAOI,WAAWE,UAAU,GACnEivC,EAAgB5pC,WAAS,2BAA4B2B,KAAKtJ,QAC1DoxC,GAAazvC,OAAOwE,UAAUC,eAAeC,KAAKkrC,EAAeH,EAAU9uC,WAC3Ekd,WAAS,2BAA2B,EAAM4xB,GAE1CA,GAAaA,EAAUhvC,YACvBkH,KAAK+nC,2BAA2BD,IAGxCZ,EAAOrqC,UAAU6qC,gBAAkB,SAAUhvC,GACzC,IAAIhC,EAASqC,EAAciH,KAAKtJ,OAAQgC,EAAO4F,gBAI/C,GAAsB,UAFsC,KAAxC0B,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAAamI,KAAKtJ,OAAOsB,eAAeF,cACtFkI,KAAKtJ,OAAOkB,eAAeE,gBACmD,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1B,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IA2BlC,CACD,IAAKH,oBAAkBhB,GAAS,CAGJ,WAFsC,KAAxCsJ,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAClDmI,KAAKtJ,OAAOsB,eAAeF,cAAgBkI,KAAKtJ,OAAOkB,eAAeE,gBACa,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC7B,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAMnCmI,KAAK0nC,gBAAgBhxC,IAL0B,IAA3CsJ,KAAKqnC,iBAAiB7oC,QAAQ9H,IAC9BsJ,KAAK0nC,gBAAgBhxC,IAOY,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9F,KAC5BsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,cA1CzE,GAAIgB,oBAAkBhB,IAClB,IAA+C,IAA3CsJ,KAAKqnC,iBAAiB7oC,QAAQ9F,GAM9B,aAL6C,IAAzCsH,KAAKmO,eAAe3P,QAAQ9F,KAC5BsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,QACrEgC,EAAOsZ,yBAA0B,SAMzChS,KAAK0nC,gBAAgBhxC,IAC0B,IAA3CsJ,KAAKqnC,iBAAiB7oC,QAAQ9H,KAA2D,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9H,IAC/B,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9F,KAC5BsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,UAI5B,IAAzCsJ,KAAKmO,eAAe3P,QAAQ9F,KAA6D,IAA3CsH,KAAKqnC,iBAAiB7oC,QAAQ9F,KAC5EsH,KAAKmO,eAAe3V,KAAKE,GACzBwd,WAAS,4BAA8Bxd,EAAOM,SAAUN,EAAQsH,KAAKtJ,UAyBzFwwC,EAAOrqC,UAAU+qC,iBAAmB,SAAU1vC,GAG1C,IAAK,IAFDgwC,EAAW3vC,YAAU,eAAgBL,GACrCiwC,GAAU,EACL95B,EAAQ,EAAGA,EAAQ65B,EAAS3wC,OAAQ8W,IAAS,CAClD,IAAIs5B,EAAUO,EAAS75B,GAAO/U,aAC1BxB,EAAwD,KAAxCkI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IAChDmI,KAAKtJ,OAAOsB,eAAeF,cAAgBkI,KAAKtJ,OAAOkB,eAAeE,cAC1E,KAAwB,UAAlBA,GAA+C,SAAlBA,GAAiF,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1D,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,KAAc,CACjD,IAAIowC,EAAgB5pC,WAAS,2BAA4B2B,KAAKtJ,QACzD2B,OAAOwE,UAAUC,eAAeC,KAAKkrC,EAAeC,EAAS75B,GAAOrV,YACrEgH,KAAKmO,eAAe3V,KAAK0vC,EAAS75B,IAClC6H,WAAS,4BAA8BgyB,EAAS75B,GAAOrV,SAAUkvC,EAAS75B,GAAQrO,KAAKtJ,QACvFyxC,GAAU,GAGlB,GAAuB,SAAlBrwC,IACsD,IAAnDkI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,OACpC,IAApDmI,KAAKqnC,iBAAiB7oC,QAAQ0pC,EAAS75B,IAAgB,CACvD85B,GAAU,EACV,OAGHzwC,oBAAkBiwC,IAAYA,EAAQpwC,SACvC4wC,EAAUnoC,KAAK4nC,iBAAiBM,EAAS75B,KAEtB,UAAlBvW,GAA+C,SAAlBA,IAA6BowC,EAAS3wC,SACpE4wC,GAAU,GAGlB,OAAOA,GAEXjB,EAAOrqC,UAAUmrC,kBAAoB,WAGjC,IAAK,IAFDtvC,EAASsH,KAAKmO,eACd/V,EAAM4H,KAAKmO,eAAe5W,OACrB+J,EAAI,EAAGA,EAAIlJ,EAAKkJ,IAAK,CAC1B,IAAI8mC,EAAWrvC,EAAciH,KAAKtJ,OAAQgC,EAAO4I,GAAGhD,gBAEpD,IAD2C,IAA9B5F,EAAO8F,QAAQ4pC,GAChB,CACR,IAAIC,EAAWtvC,EAAciH,KAAKtJ,OAAQgC,EAAO4I,GAAGhD,gBAAgB,GACpE5F,EAAO4I,GAAG+P,YAAcg3B,EAASh3B,YAAc,OAG/C3Y,EAAO4I,GAAG+P,YAAc,EACxBrR,KAAKsnC,mBAAmB9uC,KAAKE,EAAO4I,MAIhD4lC,EAAOrqC,UAAU2qC,iBAAmB,SAAU/oC,GAK1C,IAJA,IAGIoQ,EAHAR,EAAQ,EACR7Q,EAAWiB,EAAKjB,SAChBpF,EAAMoF,EAASjG,OAEP8W,EAAQjW,EAAKiW,IAAS,CAE9B,IAAIi6B,GADJz5B,EAAgBrR,EAAS6Q,IACEgD,aACvBi3B,GAAqB,IAAXA,GAAiB5wC,oBAAkBmX,EAAcmD,2BAC3DnD,EAAcmD,wBAA0B,KACxCnD,EAAcwC,YAAc,MAGpCrR,KAAKmO,kBACLnO,KAAKtJ,OAAOmc,OAAO,iBAAmBkB,OAAQvW,EAAU6Q,MAAO7Q,EAASjG,UAErE2vC,KC5NPqB,GAA6B,WAM7B,SAASA,EAAY7xC,GACjBsJ,KAAKqc,yBAA0B,EAC/B5Z,OAAKC,OAAO8lC,eACZxoC,KAAKtJ,OAASA,EACdsJ,KAAKwU,eACLxU,KAAKkK,mBAiLT,OAzKAq+B,EAAY1rC,UAAU+F,cAAgB,WAClC,MAAO,eAMX2lC,EAAY1rC,UAAUqN,iBAAmB,WACrClK,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAKyoC,uBAAwBzoC,MAC7DA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAKspB,mBAAoBtpB,MACzDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,sBAAuBnK,KAAK0oC,mBAAoB1oC,MACpEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,iBAAkBnK,KAAK2oC,eAAgB3oC,OAQ/DuoC,EAAY1rC,UAAU+M,QAAU,WAC5B5J,KAAKwK,uBAMT+9B,EAAY1rC,UAAU2N,oBAAsB,WACpCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAKyoC,wBACtCzoC,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAKspB,oBACtCtpB,KAAKtJ,OAAOiB,KAAK+S,IAAI,sBAAuB1K,KAAK0oC,oBACjD1oC,KAAKtJ,OAAOiB,KAAK+S,IAAI,iBAAkB1K,KAAK2oC,kBAEhDJ,EAAY1rC,UAAU4rC,uBAAyB,SAAUtP,GACrDn5B,KAAKwU,YAAc2kB,GAEvBoP,EAAY1rC,UAAUojB,IAAM,SAAUL,EAEtCC,EAAkBC,EAAUC,EAAQ6oB,GAChC,IAAIxhC,EAAQpH,KACRrJ,EAAaqJ,KAAKtJ,OAAOC,WACzBsnB,EAAW5lB,SAMf,OALA6d,WAAS,QAAS0yB,EAAO3qB,GACzB/H,WAAS,UAAU,EAAO+H,GACrBvmB,oBAAkBkoB,KACnB5f,KAAKqc,wBAA0BuD,EAAsBvD,yBAElD,IAAIwsB,QAAQ,SAAU3c,GACzB,IAAIzyB,GAAK2N,EAAM0hC,WAAenyC,aAAsBC,cAC9CwQ,EAAM1Q,OAAOC,WADgD,IAAIC,cAAYD,GAE/Ese,EAAQ,IAAIC,QAMhB,GALK9N,EAAM0hC,YACP7zB,EAAQ7N,EAAMiR,cAAcpD,GAC5BiB,WAAS,QAASjB,EAAOgJ,IAE7B7W,EAAM1Q,OAAOuS,QAAQ8/B,EAAyB3sC,SAAO6hB,EAAU2B,IAC3DrnB,YAAU,SAAU0lB,GACpB,OAAO,KAEXxkB,EAAGmc,aAAaX,GAAOY,KAAK,SAAUnY,GAClC,IAAIsrC,EAAa,KAKjB,OAJKtxC,oBAAkBkoB,IAA2BloB,oBAAkBkoB,EAAsBjpB,cACtFqyC,EAAappB,EAAsBjpB,YAEvCipB,EAAwBxY,EAAM6hC,2BAA2BrpB,EAAuBjpB,EAAY+G,GACrF0J,EAAM1Q,OAAOiB,KAAKqoB,kBAAkBC,IAAI7Y,EAAM1Q,OAAOiB,KAAMioB,EAAuBC,EAAkBC,EAAU8oB,EAAO7oB,GAAQlK,KAAK,SAAUqzB,GAC7H,MAAdF,EACAppB,EAAsBjpB,WAAaqyC,SAG5BppB,EAAsBjpB,WAEjCu1B,EAAQgd,UAKxBX,EAAY1rC,UAAUwb,cAAgB,SAAUpD,EAAOgJ,GAQnD,OAPKvmB,oBAAkBumB,IAAqC,gBAAxBA,EAASzD,YACtCxa,KAAKtJ,OAAOma,cACfoN,EAASzD,WAAa,WACtBvF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAAS,MAClDgY,EAAQ1c,YAAU,mCAAoCyH,KAAKtJ,OAAnD6B,CAA2D0c,IAEhEA,GAEXszB,EAAY1rC,UAAUosC,2BAA6B,SAAUhrB,EAAUkrB,EAAOC,GAE1E,IAAIrmC,EAAO1K,SAkBX,GAjBA6d,WAAS,QAASlW,KAAKtJ,OAAOiB,KAAKygB,gBAAgBC,eAAc,GAAOtV,GACxEmT,WAAS,YAAY,EAAMnT,GACtBrL,oBAAkBumB,IAAcvmB,oBAAkBumB,EAASzD,aAC5DtE,WAAS,aAAc+H,EAASzD,WAAYzX,GAE3C/C,KAAK8oC,YACN9oC,KAAKtJ,OAAO6G,cACZyC,KAAKtJ,OAAO6vB,WAAWvR,kBAAkBzc,YAAU,SAAU6wC,IAC7DlzB,WAAS,aAAclW,KAAKtJ,OAAO8G,SAAUuF,IAEjD/C,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GAEpCA,EAAO/C,KAAKwU,YACZ20B,EAAQzxC,oBAAkBqL,EAAKgR,QAAU/T,KAAKtJ,OAAO8G,SAAS8K,MAAM,GAAKvF,EAAKgR,OACzE/T,KAAK8oC,YACN9oC,KAAKtJ,OAAO8G,aAEZygB,GAAYA,EAAStnB,YAAcqJ,KAAK8oC,UAAW,CACnD,IAAIO,EAAYrpC,KAAKtJ,OAAO8G,SACxB8rC,EAAUrrB,EAAStnB,sBAAsBC,cAAcqnB,EAAStnB,WAAWA,WAAW8E,KAAOwiB,EAAStnB,WAC1GqJ,KAAKtJ,OAAO6vB,WAAWvR,kBAAkBs0B,GACzCH,EAAQnpC,KAAKtJ,OAAO8G,SACpBwC,KAAKtJ,OAAO8G,SAAW6rC,EAI3B,OAFAprB,EAAWvmB,oBAAkBumB,GAAY5lB,SAAW4lB,EACpDA,EAAStnB,WAAa,IAAIC,eAAc6E,KAAM0tC,IACvClrB,GASXsqB,EAAY1rC,UAAUysB,mBAAqB,SAAUvmB,GACjD,GAAI/C,KAAKtJ,OAAOiB,KAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAAiB,CACvF,IAAI5E,KACAiE,EAAOsE,EAAKtE,KAEZ2S,EADc1Z,oBAAkB+G,EAAK4S,aACjB5S,EAAKtE,MAAQsE,EAAK4S,YAC1C7W,EAAM+uC,OAASn4B,EACfrO,EAAKvI,MAAQA,EAEjBwF,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GACpC/C,KAAKtJ,OAAOuS,QAAQ,qBAAsBlG,IAE9CwlC,EAAY1rC,UAAU6rC,mBAAqB,SAAUc,GACjD,GAAsB,UAAlBA,EAASxmC,KAAkB,CAC3B,IAAIymC,EAAcD,EAASE,OAAOjrC,KAC9BkrC,EAAqB3pC,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OACjE,GAAIkyC,EAAY3wC,YAAcC,EAAciH,KAAKtJ,OAAQ+yC,EAAY3wC,WAAWE,SAAU4wC,QAAQD,IAAsB,CACpH,IAAIE,EAAYL,EAASM,UAAUvyC,OAC/BwyC,EAAWN,EAAYtvC,MACvB6vC,GAAiB,EACjBC,GAAgB,EAChBC,EAAQzxC,EAAgBuH,KAAKtJ,OAAQ+yC,EAAazpC,KAAKtJ,OAAO6G,aAC9DyC,KAAKqc,yBAA6B6tB,GAAUlqC,KAAKtJ,OAAOqkB,cACxDivB,GAAiB,EACjBC,GAAgBR,EAAYtwC,UAEhCqwC,EAASM,UAAUD,EAAY,GAAGM,UAAaC,aAAcL,EAAUM,YAAaJ,EAChF3vC,SAAU0vC,MAK1BzB,EAAY1rC,UAAU8rC,eAAiB,SAAU7oB,GAC7C,IAAK,IAAIzoB,EAAI,EAAGA,EAAIyoB,EAASwqB,WAAW/yC,OAAQF,IACxCyoB,EAASwqB,WAAWjzC,GAAGyQ,OACvBgY,EAASwqB,WAAWjzC,GAAGkzC,WAAcC,mBAAmB,KAIpEjC,EAAY1rC,UAAUisC,QAAU,WAC5B,OAAQryC,EAAauJ,KAAKtJ,SAAW8C,EAAUwG,KAAKtJ,SAEjD6xC,KC5LPkC,GAA2B,WAM3B,SAASA,EAAU/zC,GACf+L,OAAKC,OAAOgoC,aACZ1qC,KAAKtJ,OAASA,EACdsJ,KAAKwU,eACLxU,KAAKkK,mBA+IT,OAvIAugC,EAAU5tC,UAAU+F,cAAgB,WAChC,MAAO,aAMX6nC,EAAU5tC,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG,cAAenK,KAAKupB,iBAAkBvpB,MACrDA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAK2qC,qBAAsB3qC,OAM/DyqC,EAAU5tC,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAKupB,kBACpCvpB,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAK2qC,wBAQ1CF,EAAU5tC,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAETigC,EAAU5tC,UAAU8tC,qBAAuB,SAAUxR,GACjDn5B,KAAKwU,YAAc2kB,GAEvBsR,EAAU5tC,UAAUojB,IAAM,SAAUG,EAAqBP,EAAkBQ,EAAQN,GAC/E,IAAI3Y,EAAQpH,KACRmpC,EAAQnpC,KAAKtJ,OAAOC,WACpBynB,EAAO/lB,SACPywC,GAAWryC,EAAauJ,KAAKtJ,SAAW8C,EAAUwG,KAAKtJ,QAE3D,OADAwf,WAAS,UAAU,EAAOkI,GACnB,IAAIyqB,QAAQ,SAAU3c,GACzB,IAAIzyB,GAAKqvC,GAAaK,aAAiBvyC,cACjCwQ,EAAM1Q,OAAOC,WADmC,IAAIC,cAAYuyC,GAElEl0B,EAAQ,IAAIC,QAMhB,GALK4zB,IACD7zB,EAAQ7N,EAAMiR,cAAcpD,GAC5BiB,WAAS,QAASjB,EAAOmJ,IAE7BhX,EAAM1Q,OAAOuS,QAAQ2hC,EAAuBxuC,SAAOgiB,EAAMgC,IACrD7nB,YAAU,SAAU6lB,GACpB,OAAO,KAEX3kB,EAAGmc,aAAaX,GAAOY,KAAK,SAAUnY,GAClC,IAAImtC,EAAc,KAKlB,OAJKnzC,oBAAkB0oB,IAAyB1oB,oBAAkB0oB,EAAoBzpB,cAClFk0C,EAAczqB,EAAoBzpB,YAEtCypB,EAAsBhZ,EAAM0jC,wBAAwB1qB,EAAqB+oB,EAAOzrC,GACzE0J,EAAM1Q,OAAOiB,KAAK2oB,gBAAgBL,IAAI7Y,EAAM1Q,OAAOiB,KAAMyoB,EAAqBP,EAAkBQ,EAAQN,GAAQlK,KAAK,SAAUmb,GAC/G,MAAf6Z,EACAzqB,EAAoBzpB,WAAak0C,SAG1BzqB,EAAoBzpB,WAE/Bu1B,EAAQ8E,UAKxByZ,EAAU5tC,UAAUwb,cAAgB,SAAUpD,EAAOmJ,GAQjD,OAPK1mB,oBAAkB0mB,IAA6B,gBAApBA,EAAK5D,YAC9Bxa,KAAKtJ,OAAOma,cACfuN,EAAK5D,WAAa,WAClBvF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAMtV,KAAKtJ,OAAOuG,gBAAiB,QAAS,MAClDgY,EAAQ1c,YAAU,mCAAoCyH,KAAKtJ,OAAnD6B,CAA2D0c,IAEhEA,GAEXw1B,EAAU5tC,UAAUiuC,wBAA0B,SAAU1sB,EAAM+qB,EAAOC,GACjE,IAAIrmC,KAEA+lC,GAAWryC,EAAauJ,KAAKtJ,SAAW8C,EAAUwG,KAAKtJ,QAsB3D,GArBAwf,WAAS,QAASlW,KAAKtJ,OAAOiB,KAAKygB,gBAAgBC,eAAc,GAAOtV,GACxEmT,WAAS,YAAY,EAAMnT,GAC3BmT,WAAS,eAAe,EAAMnT,GACzBrL,oBAAkB0mB,IAAU1mB,oBAAkB0mB,EAAK/B,0BACpDnG,WAAS,0BAA2BkI,EAAK/B,wBAAyBtZ,GAEjErL,oBAAkB0mB,IAAU1mB,oBAAkB0mB,EAAK5D,aACpDtE,WAAS,aAAckI,EAAK5D,WAAYzX,GAEvC+lC,IACD9oC,KAAKtJ,OAAO6G,cACZyC,KAAKtJ,OAAO6vB,WAAWvR,kBAAkB3W,WAAS,SAAU+qC,IAC5DlzB,WAAS,aAAclW,KAAKtJ,OAAO8G,SAAUuF,IAEjD/C,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GAEpCA,EAAO/C,KAAKwU,YACZ20B,EAAQzxC,oBAAkBqL,EAAKgR,QAAU/T,KAAKtJ,OAAO8G,SAAS8K,MAAM,GAAKvF,EAAKgR,OACzE+0B,IACD9oC,KAAKtJ,OAAO8G,aAEZ4gB,GAAQA,EAAKznB,YAAcmyC,EAAS,CACpC,IAAIiC,EAAY/qC,KAAKtJ,OAAO8G,SACxB8rC,EAAUlrB,EAAKznB,sBAAsBC,cAAcwnB,EAAKznB,WAAWA,WAAW8E,KAAO2iB,EAAKznB,WAC9FqJ,KAAKtJ,OAAO6vB,WAAWvR,kBAAkBs0B,GACzCH,EAAQnpC,KAAKtJ,OAAO8G,SACpBwC,KAAKtJ,OAAO8G,SAAWutC,EAI3B,OAFA3sB,EAAO1mB,oBAAkB0mB,MAAaA,EACtCA,EAAKznB,WAAa,IAAIC,eAAc6E,KAAM0tC,IACnC/qB,GASXqsB,EAAU5tC,UAAU0sB,iBAAmB,SAAUxmB,GAC7C,GAAI/C,KAAKtJ,OAAOiB,KAAKga,oBAAoB5O,EAAKpD,OAAOqM,OAAShM,KAAKtJ,OAAO0I,gBAAiB,CACvF,IAAI5E,KACAiE,EAAOlG,YAAU,OAAQwK,GAEzBqO,EADc1Z,oBAAkB+G,EAAK4S,aACjB5S,EAAKtE,MAAQsE,EAAK4S,YAC1C7W,EAAMwwC,gBAAwB,EAAN55B,EACxBrO,EAAKvI,MAAQA,EAEjBwF,KAAKtJ,OAAOmc,OAAO,gBAAiB9P,GACpC/C,KAAKtJ,OAAOuS,QAAQ,mBAAoBlG,IAErC0nC,KCxJPQ,GAAsB,WACtB,SAASA,EAAKv0C,GACV+L,OAAKC,OAAOwoC,QACZlrC,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAoLT,OA9KA+gC,EAAKpuC,UAAUqN,iBAAmB,WAC9BlK,KAAKtJ,OAAOyT,GAAGstB,EAAiCz3B,KAAKmrC,0BAA2BnrC,MAChFA,KAAKtJ,OAAOyT,GAAGiS,EAAsBpc,KAAKorC,WAAYprC,OAM1DirC,EAAKpuC,UAAU2N,oBAAsB,WAC7BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI+sB,EAAiCz3B,KAAKmrC,2BACtDnrC,KAAKtJ,OAAOgU,IAAI0R,EAAsBpc,KAAKorC,cAQ/CH,EAAKpuC,UAAU+F,cAAgB,WAC3B,MAAO,SAOXqoC,EAAKpuC,UAAUwxB,QAAU,WACrBruB,KAAKtJ,OAAOiB,KAAK07B,YAAYhF,WAQjC4c,EAAKpuC,UAAU+M,QAAU,WACrB5J,KAAKwK,uBAQTygC,EAAKpuC,UAAUs2B,SAAW,SAAUC,GAChCpzB,KAAKtJ,OAAOiB,KAAK07B,YAAYF,SAASC,IAQ1C6X,EAAKpuC,UAAUy2B,sBAAwB,SAAUhwB,GAC7CtD,KAAKtJ,OAAOiB,KAAK07B,YAAYC,sBAAsBhwB,IAWvD2nC,EAAKpuC,UAAUsuC,0BAA4B,SAAU5zB,GAEjD,GADAA,EAAW7e,OAAOS,SAAiC,aAAtBoe,EAAWjc,OACpC0E,KAAKtJ,OAAO4I,oBAAqB,CACjC,IAAI+rC,EAAoBrrC,KAAKtJ,OAAO6E,0BAA0B,GAC1D7C,EAASsH,KAAKtJ,OAAO8G,SAASC,OAAO,SAAUC,GAC/C,OAAOA,EAAE2tC,KAAuB9zB,EAAW7e,OAAO2yC,KAElD3yC,EAAOnB,SACPmB,EAAO,GAAGS,SAAWoe,EAAW7e,OAAOS,UAG/C,IAAImyC,GACAv3B,OAAQ/T,KAAKtJ,OAAO8G,SACpBmB,IAAK4Y,EAAW5Y,IAChBrD,OAAQic,EAAWjc,OACnB5C,OAAQ6e,EAAW7e,OACnB2V,MAAOrO,KAAKtJ,OAAO8G,SAASjG,QAGhC,GADA8G,WAAS,oBAAqB2B,KAAKtJ,QAAQ0f,mBAAmBk1B,GAC1DtrC,KAAKtJ,OAAO4I,oBAAqB,CACjC,IAEIsY,OAAY,EACI,aAAhB0zB,EAAU,QACV1zB,EAAY0zB,EAAO,IAAEzzB,uBAAuB,oBAAoB,GAC3DngB,oBAAkBkgB,KACnBvK,eAAauK,GAAY,oBACzBxH,YAAUwH,GAAY,wBAGL,WAAhB0zB,EAAU,SACf1zB,EAAY0zB,EAAO,IAAEzzB,uBAAuB,sBAAsB,GAC7DngB,oBAAkBkgB,KACnBvK,eAAauK,GAAY,sBACzBxH,YAAUwH,GAAY,wBAKtCqzB,EAAKpuC,UAAU0uC,SAAW,SAAUC,EAAcxvB,EAAMjI,GAapD,IAAK,IAZD03B,EAAa/zC,oBAAkBqc,MAAeA,EAC9CnX,EAAU,SAAU8uC,GACpBD,EAAWjzC,KAAKwjB,EAAK0vB,IACrB,IAAIC,KACA3vB,EAAK0vB,GAAGryC,kBACRsyC,EAAMH,EAAa/tC,OAAO,SAAUC,GAChC,OAAOse,EAAK0vB,GAAG1yC,WAAa0E,EAAEY,iBAElCmtC,EAAanH,EAAOiH,SAASC,EAAcG,EAAKF,KAGpDnH,EAAStkC,KACJ0rC,EAAI,EAAGA,EAAI1vB,EAAKzkB,OAAQm0C,IAC7B9uC,EAAQ8uC,GAEZ,OAAOD,GAEXR,EAAKpuC,UAAUuuC,WAAa,SAAUQ,GAClC,IAAIxkC,EAAQpH,KACRvG,EAAK,IAAI7C,cAAYg1C,EAAe73B,QACxC,GAA8C,SAA1C/T,KAAKtJ,OAAOoa,aAAaC,aAAyB,CAClD,IAAIiL,KACA6vB,EAAY7rC,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,IACf,UAA7CyI,KAAKtJ,OAAOsB,eAAeF,eAA0E,SAA7CkI,KAAKtJ,OAAOsB,eAAeF,eACpF,cAAgB,QAChBmd,GAAQ,IAAIC,SAAQI,MAAMu2B,EAAU,QAAS,GACjD7vB,EAAOviB,EAAGid,aAAazB,GACvB22B,EAAev9B,MAAQ2N,EAAKzkB,OAC5B,IAEIu0C,GAFAC,EAAO/rC,KAAKtJ,OAAOiB,KAAKmZ,aAAak7B,YACrC9sB,EAAUlf,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,aACf,GAC7B9E,EAAQA,EAAM62B,KAAKA,GAAMG,KAAKF,GAC9B/vB,EAAOviB,EAAGid,aAAazB,GACvB,IAAIw2B,EAAazrC,KAAKurC,SAASK,EAAe73B,OAAQiI,GACtD4vB,EAAe73B,OAAS03B,MAEvB,CACD,IAAIS,EAAO,IAAIt1C,cAAYg1C,EAAe73B,QACtC5a,EAAW,IAAI0I,YAAU,WAAY,WAAY,MAAMsqC,GAAG,WAAY,gBAAYxuB,GAClFyuB,EAAYF,EAAKx1B,cAAa,IAAIxB,SAAQI,MAAMnc,IAChDgtC,OAAa,EAMbA,GALA1uC,EAAuBuI,KAAKtJ,SAAasJ,KAAKtJ,OAAOkB,eAAeC,MAAQmI,KAAKtJ,OAAOiB,KAAKC,eAAeC,KAC3GmI,KAAKtJ,OAAOsB,eAAeV,QAAQC,SAAWyI,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAI1E60C,EAAU3uC,OAAO,SAAUC,GACpC,OAAOjF,EAAgB2O,EAAM1Q,OAAQgH,EAAG0uC,KAJ/BA,EAOjBR,EAAev9B,MAAQ83B,EAAW5uC,OAC9B0d,EAAQ,IAAIC,QAAhB,IACI62B,EAAO/rC,KAAKtJ,OAAOiB,KAAKmZ,aAAak7B,SACrC9sB,EAAUlf,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YACxCosB,EAAW5uC,OAAU2nB,EAAU6sB,IAE/B7sB,GADAA,EAAW9H,KAAKi1B,MAAMlG,EAAW5uC,OAASw0C,IAAW5F,EAAW5uC,OAASw0C,EAAQ,EAAI,KACvD,EAC9B/rC,KAAKtJ,OAAOiB,KAAK0mB,eAAgBvN,cAAgBiJ,YAAamF,KAAa,IAE3E4sB,EAAOC,GAAQ7sB,EAAU,GAC7BjK,EAAQA,EAAM62B,KAAKA,GAAMG,KAAKF,GAC9BG,EAAKv1C,WAAW8E,KAAO0qC,EACvByF,EAAe73B,OAASm4B,EAAKx1B,aAAazB,GAE9CjV,KAAKtJ,OAAOmc,OAAO,eAAgB+4B,IAEhCX,KC3LPqB,GAAyB,WACzB,SAASA,EAAQ51C,GACb+L,OAAKC,OAAO6pC,WACZvsC,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAkIT,OA1HAoiC,EAAQzvC,UAAU+F,cAAgB,WAC9B,MAAO,WAMX0pC,EAAQzvC,UAAUqN,iBAAmB,WACjClK,KAAKtJ,OAAOyT,GAAGgf,EAAoBnpB,KAAKwsC,eAAgBxsC,MACxDA,KAAKtJ,OAAOyT,GAAGiiB,EAAqBpsB,KAAKysC,oBAAqBzsC,OAMlEssC,EAAQzvC,UAAU2N,oBAAsB,WAChCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIye,EAAoBnpB,KAAKwsC,gBACzCxsC,KAAKtJ,OAAOgU,IAAI0hB,EAAqBpsB,KAAKysC,uBAE9CH,EAAQzvC,UAAU2vC,eAAiB,SAAUzpC,GACzC,IAAIk6B,EAAOj9B,KAAKtJ,OACU,IAAtBqM,EAAKpE,IAAI+K,UAAkBuzB,EAAKx0B,qBAAqBlR,OAAS,EAC9DyI,KAAK0yB,aAAauK,EAAKtpB,QAAQC,GAAK,sBAAuBqpB,EAAKtpB,QAAQC,GAAK,yBAAyB,GAGjGlc,oBAAkBulC,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,cACpDhS,oBAAkBulC,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,YACxDuzB,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,MAC7C8iC,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,SAAW,GAAGvP,MACxD6F,KAAK0yB,aAAauK,EAAKtpB,QAAQC,GAAK,wBAAwB,GAG5D5T,KAAK0yB,aAAauK,EAAKtpB,QAAQC,GAAK,wBAAwB,GAE5DqpB,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,QAChD8iC,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,SAAW,GAAGvP,OACpD6F,KAAK0yB,aAAauK,EAAKtpB,QAAQC,GAAK,wBAAwB,GAEF,IAA1DqpB,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,OAChD6F,KAAK0yB,aAAauK,EAAKtpB,QAAQC,GAAK,yBAAyB,GAEH,IAA1DqpB,EAAK9gC,wBAAwB4G,EAAKpE,IAAI+K,UAAUvP,OAChD6F,KAAK0yB,aAAauK,EAAKtpB,QAAQC,GAAK,yBAAyB,IAI/C,IAAtB7Q,EAAKpE,IAAI+K,UAAmBhS,oBAAkBqL,EAAKtE,KAAK3F,aACxDkH,KAAK0yB,aAAauK,EAAKtpB,QAAQC,GAAK,yBAAyB,IAGrE04B,EAAQzvC,UAAU4vC,oBAAsB,SAAU1pC,GAC9C,IAAIk6B,EAAOj9B,KAAKtJ,OAYhB,GAXsC,SAAlCsJ,KAAKtJ,OAAOmF,aAAaC,MAA0D,UAAvCkE,KAAKtJ,OAAOiB,KAAKkE,aAAaC,MAC1EiH,EAAKE,KAAK2Q,KAAO5T,KAAKtJ,OAAOiB,KAAKgc,QAAQC,GAAK,YAC/C7Q,EAAKiG,QAAS,EACdhJ,KAAKtJ,OAAOiB,KAAKoE,WAAWi2B,YAE5BjvB,EAAKE,KAAK2Q,KAAO5T,KAAKtJ,OAAOiB,KAAKgc,QAAQC,GAAK,cAC/C5T,KAAKtJ,OAAOosB,YAEZ/f,EAAKE,KAAK2Q,KAAO5T,KAAKtJ,OAAOiB,KAAKgc,QAAQC,GAAK,gBAC/C5T,KAAKtJ,OAAOqsB,cAEZhgB,EAAKE,KAAK2Q,KAAOqpB,EAAKtlC,KAAKgc,QAAQC,GAAK,WAAaqpB,EAAKx0B,qBAAqBlR,OAAQ,CACvF,IAAImB,EAASukC,EAAK9gC,wBAAwB8gC,EAAKh1B,wBAAwB,GAAK,GACxEk1B,OAAY,EAChB,GAAIzkC,EAAOyB,MAAQ8iC,EAAKx0B,qBAAqB,GAAGtO,MAC5C,IAAK,IAAI9C,EAAI,EAAGA,EAAI4lC,EAAK9gC,wBAAwB5E,OAAQF,IACjD4lC,EAAK9gC,wBAAwB9E,GAAG+C,WAAa1B,EAAOI,WAAWsB,WAC/D+iC,EAAY9lC,QAKpB8lC,EAAYF,EAAKh1B,wBAAwB,GAAK,EAElDg1B,EAAK7B,aAAa6B,EAAKh1B,wBAAwB,IAAKk1B,EAAW,SAEnE,GAAIp6B,EAAKE,KAAK2Q,KAAOqpB,EAAKtlC,KAAKgc,QAAQC,GAAK,YAAcqpB,EAAKx0B,qBAAqBlR,OAAQ,CAInF,IAHD2C,EAAQ+iC,EAAKh1B,wBAAwB,GAErCnP,GADAqkC,OAAY,EACCF,EAAKx0B,qBAAqB,GAAG3P,YAC9C,IAASzB,EAAI,EAAGA,EAAI4lC,EAAK9gC,wBAAwB5E,OAAQF,IACjD4lC,EAAK9gC,wBAAwB9E,GAAG+C,WAAatB,EAAWsB,WACxD+iC,EAAY9lC,GAGpB4lC,EAAK7B,aAAalhC,GAAQijC,EAAW,WAS7CmP,EAAQzvC,UAAUikC,WAAa,WAC3B,OAAO9gC,KAAKtJ,OAAOiB,KAAK86B,cAAcqO,cAU1CwL,EAAQzvC,UAAU61B,YAAc,SAAU7b,EAAO2b,GAC7CxyB,KAAKtJ,OAAOiB,KAAK86B,cAAcC,YAAY7b,EAAO2b,IAQtD8Z,EAAQzvC,UAAU+M,QAAU,WACxB5J,KAAKwK,uBAEF8hC,KCrIPI,GAA2B,WAM3B,SAASA,EAAUh2C,GACf+L,OAAKC,OAAOiqC,aACZ3sC,KAAKtJ,OAASA,EACdsJ,KAAK4sC,oBACL5sC,KAAKiZ,gBAoOT,OA5NAyzB,EAAU7vC,UAAU+F,cAAgB,WAChC,MAAO,WAEX8pC,EAAU7vC,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,aAapBiiC,EAAU7vC,UAAUuc,sBAAwB,SAAUH,EAAcqC,EAAcuxB,GAC9E7sC,KAAKiZ,aAAeA,EAIpB,IAAK,IAHDpgB,EAEA0E,KACKI,EAAI,EAAGvF,EAFOC,OAAOC,KAAKgjB,GAAc/jB,OAEToG,EAAIvF,EAAKuF,IAAK,CACjCpF,YAAU,eAAgB+iB,EAAa3d,KAEpDJ,EAAW/E,KAAK8iB,EAAa3d,IAGrC,IAIIunC,EAJAhrB,EAAgBjiB,EAAkBsF,GAClCuvC,EAAcvvC,EAAW+K,QACzBykC,EAAgB10C,OAAOC,KAAK0H,KAAKtJ,OAAOoiB,YAAYvhB,OACpDy1C,EAAa30C,OAAOC,KAAK4hB,GAAe3iB,OAExCD,EAAU0I,KAAKtJ,OAAOkJ,aAC1B,GAAII,KAAKtJ,OAAOoiB,WAAWrb,OAAO,SAAUo1B,GAAK,OAAOA,EAAEzE,mBAAqB72B,OACtE,CAAA,IAAIF,EAAI,EAAb,IAAgBe,EAAM40C,EAAY31C,EAAIe,EAAKf,IAGvC,GAFAwB,EAAeqhB,EAAc7iB,GAC7B6tC,EAAqBllC,KAAKitC,sBAAsBp0C,EAAci0C,GACtC,CAwCpB,IAAK,IAvCDlwC,EAAU,SAAUswC,EAAiBC,GACrC,IAAIlqC,OAAO,EACXA,KACA,IAAK,IAAIg2B,EAAM,EAAGA,EAAM3hC,EAAQC,OAAQ0hC,IAAO,CAG3Ch2B,EAFavL,oBAAkBa,YAAU,QAASjB,EAAQ2hC,KACtD3hC,EAAQ2hC,GAAO1gC,YAAU,QAAUjB,EAAQ2hC,KACjC,KAGlB,GADAh2B,EAAOqhC,EAAO8I,kBAAkBnqC,EAAMqhC,EAAO5tC,OAAOoiB,WAAWo0B,EAAkB,KAC7E5I,EAAO5tC,OAAOoiB,WAAWo0B,EAAkB,GAAG9e,iBA0B9C,MAAO,WAzBP,IAAIif,EACJP,EAAY3uC,IAAI,SAAUT,EAAGrG,GACrBqG,EAAE1E,WAAaH,EAAaG,WAC5Bq0C,EAAQh2C,KAIhB,IAAIi2C,EAAeD,EAAQnI,EAAqBgI,EAC5CK,EAAgBnxC,YAAWvD,UACxB00C,EAAcj0C,oBACdi0C,EAAcjJ,EAAO5tC,OAAO0G,cACnC8Y,WAAS,aAAcq3B,EAAetqC,GACtC,IAAI9I,EAAQ5B,YAAU,QAASg1C,GAI/B,GAHAr3B,WAAS,QAAS/b,EAAQ,EAAG8I,GAC7BiT,WAAS,gBAAgB,EAAMjT,GAC/BiT,WAAS,iBAAkBq3B,EAAcv0C,SAAUiK,GAC/C4pC,EAAQ,CACR,IAAIvzC,EAAef,YAAU,eAAgBM,GACzCS,EAAa/B,QACb+B,EAAad,KAAKyK,GAG1B6pC,EAAY3vC,OAAOmwC,EAAc,EAAGrqC,IAMxCqhC,EAAStkC,KACJktC,EAAkB,EAAGC,EAAQJ,EAAeG,GAAmBC,EAAOD,IAC3EtwC,EAAQswC,GAEZltC,KAAK4sC,yBAIZ,CAED,IAAK,IADD/1B,KACK/K,EAAc,EAAG8rB,EAAWtgC,EAAQC,OAAQuU,EAAc8rB,EAAU9rB,IAAe,CAGxF+K,EAFanf,oBAAkBa,YAAU,QAASjB,EAAQwU,KACtDxU,EAAQwU,GAAevT,YAAU,QAASjB,EAAQwU,KACtC,KAEXohC,EAAkB,EAA3B,IAAK,IAAyBM,EAAWT,EAAeG,GAAmBM,EAAUN,IACjFltC,KAAKotC,kBAAkBv2B,EAAO7W,KAAKtJ,OAAOoiB,WAAWo0B,EAAkB,IAG/E,OAAOJ,GAEXJ,EAAU7vC,UAAUowC,sBAAwB,SAAU1vC,EAAYC,GAG9D,IAAK,IADD9E,EACKrB,EAAI,EAAGe,EAFGC,OAAOC,KAAKkF,GAAUjG,OAELF,EAAIe,EAAKf,IAAK,CAC9CqB,EAAS8E,EAASnG,GAGlB,GAAIkG,KAFW7F,oBAAkBgB,EAAOI,YAAc,KAClD0E,EAASC,OAAO,SAAUC,GAAK,OAAOA,EAAE1E,WAAaN,EAAOI,WAAWE,WAAa,IAC3D,CACzBgH,KAAK4sC,iBAAiBp0C,KAAKE,GAE3B,IADeH,YAAU,kBAAmBG,GAKxC,SAHAsH,KAAKitC,sBAAsBv0C,EAAQ8E,IAO/C,OAAOwC,KAAK4sC,iBAAiBr1C,QAEjCm1C,EAAU7vC,UAAUuwC,kBAAoB,SAAUK,EAAUC,GAExD,IAAK,IAAIr2C,EAAI,EAAGe,EADUC,OAAOC,KAAKo1C,EAAQp2C,SAASC,OACZF,EAAIe,EAAKf,IAIhD,IAAK,IAHDs2C,EAAgBj2C,oBAAkBg2C,EAAQp2C,QAAQD,GAAG8D,YAAcuyC,EAAQp2C,QAAQD,GAAGub,MACtF86B,EAAQp2C,QAAQD,GAAG8D,WAEd60B,EAAK,EAAG4d,EADNv1C,OAAOC,KAAKm1C,GACSzd,EAAK4d,EAAOr2C,OAAQy4B,IAAM,CACtD,IAAIn4B,EAAM+1C,EAAO5d,GACjB,GAAIn4B,IAAQ81C,EACR,GAAI3tC,KAAK4sC,iBAAiBr1C,OACtBk2C,EAAS51C,GAAOmI,KAAK6tC,iBAAiBH,EAAQp2C,QAAQD,GAAI2I,KAAK4sC,uBAE9D,GAAI5sC,KAAKtJ,OAAOqkB,YAAa,CAC9B,IAAItc,EAAOuB,KAAKtJ,OAAOC,sBAAsBC,cAAcoJ,KAAKtJ,OAAOC,WAAWA,WAAW8E,KACvFuE,KAAKtJ,OAAO8G,SAClBiwC,EAAS51C,GAAOmI,KAAK6tC,iBAAiBH,EAAQp2C,QAAQD,GAAIoH,IAQ1E,OAAOgvC,GAEXf,EAAU7vC,UAAUgxC,iBAAmB,SAAUC,EAAe96B,GAC5D,IAAIyC,EAAM,IAAIP,QACV64B,KACArwB,KACA1a,EAAQtL,oBAAkBo2C,EAAcl7B,YACiB+K,EAAzD3d,KAAKtJ,OAAO88B,iBAAiBsa,EAAcl7B,OAAO5P,KACtD8qC,EAAc3vB,qBAAsBjB,OAAQld,KAAKguC,kBAAkBF,EAAc5wB,OAAQla,KACzF8qC,EAAc9wB,aAAahd,KAAKtJ,OAAOiB,KAAK0pB,QAC5C,IAAIjE,EAAW0wB,EAActwB,gBAAwC,SAAUrV,GAAK,OAAOA,GAC3F2lC,EAAcrwB,YAAYC,GAC1B,IAAIuwB,EAAUH,EAAc5vB,YAAY,GACxCzI,EAAIE,QAAU3V,KAAKiZ,aACnBxD,EAAIy4B,gBACJ,IAEIC,EAFAC,EAAU,IAAIx3C,cAAYoc,GAAa0D,aAAajB,GACpD3S,EAAQgrC,EAAc9qC,KAE1BF,GAASgrC,EAAc9qC,MACvB,IAAK,IAAI3L,EAAI,EAAGA,EAAIyL,EAAMvL,OAAQF,IAAK,CACnC82C,EAAarrC,EAAMzL,GACnB,IAAIQ,EAAMi2C,EAAcl7B,MAAQ,MAAQ9P,EAAMzL,GAAGg3C,cAC7C/c,EAAmB,WAAbxuB,EAAMzL,GAAkBkB,YAAU,aAAc61C,GACtDE,qBAAmBxrC,EAAMzL,GAAI+2C,EAASN,EAAe9tC,KAAKtJ,QAC1D63C,EAAOT,EAAc3yC,WACrBqzC,EAAuB,WAAb1rC,EAAMzL,GAAkBi6B,EAAIz5B,GAAOy5B,EACjDyc,EAAOQ,GAAQR,EAAOQ,OACtBR,EAAOQ,GAAM12C,GAAO22C,EACpBT,EAAOQ,GAAMzrC,EAAMzL,IAAOK,oBAAkB45B,GAA2B,IAApBlU,EAASoxB,GAEhE9wB,EAAOR,OAAS4wB,EAActwB,eAC9B,IAAIrM,EAAc7E,gBAAc,MAC5BC,UAAW,cAEf,GAAIvM,KAAKtJ,OAAOod,QAAS,CAErBm6B,EAAQ11B,GAAGw1B,EAAOD,EAAc3yC,YAAa6E,KAAKtJ,OAAQu3C,EAAQhwB,SAAU,GAAI,KAAM,KAAM9M,GAC5FnR,KAAKtJ,OAA2B,4BAGhC8c,iBAAerC,EAAa88B,EAAQ11B,GAAGw1B,EAAOD,EAAc3yC,YAAa6E,KAAKtJ,OAAQu3C,EAAQhwB,WAElG,IAAIhkB,EAAQ8zC,EAAOD,EAAc3yC,YAAYgzC,GAE7C,OAA8C,IAA1Ch9B,EAAY1D,UAAUjP,QAAQvE,GACfkX,EAAY1D,UAAYxT,EAIhCkX,EAAY1D,WAG3Bi/B,EAAU7vC,UAAUmxC,kBAAoB,SAAUS,EAAezrC,GAC7D,GAAItL,oBAAkBsL,IAAkC,iBAAlByrC,EAClC,OAAOA,EAEX,IAAI50C,EACJ,OAAQmJ,GACJ,IAAK,SACDnJ,GAAQqjB,OAAQuxB,GAChB,MACJ,IAAK,WACD50C,GAAQmJ,KAAM,WAAYma,SAAUsxB,GACpC,MACJ,IAAK,OACD50C,GAAQmJ,KAAMA,EAAMma,SAAUsxB,GAGtC,OAAO50C,GAQX6yC,EAAU7vC,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAEFkiC,KC9OPgC,GAAsB,WACtB,SAASA,EAAK/2C,GACV8K,OAAKC,OAAOisC,QACZ3uC,KAAKtJ,OAASiB,EACdqI,KAAKmU,WACLnU,KAAK4uC,kBACL5uC,KAAKqU,aAAe,EACpBrU,KAAKhF,iBAAmBtD,oBAAkBsI,KAAKtJ,OAAOuG,iBACtD+C,KAAKkK,mBAgGT,OAxFAwkC,EAAK7xC,UAAU+F,cAAgB,WAC3B,MAAO,QAKX8rC,EAAK7xC,UAAUqN,iBAAmB,WAC9BlK,KAAKtJ,OAAOyT,GAAG,cAAenK,KAAK6uC,YAAa7uC,MAChDA,KAAKtJ,OAAOyT,GAAG,aAAcnK,KAAK8uC,qBAAsB9uC,OAM5D0uC,EAAK7xC,UAAU2N,oBAAsB,WAC7BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAK6uC,aACpC7uC,KAAKtJ,OAAOgU,IAAI,aAAc1K,KAAK8uC,wBAEvCJ,EAAK7xC,UAAUiyC,qBAAuB,SAAUC,GAC5C,IAAItwC,EAAOswC,EAAWrzC,aAClB8f,EAASuzB,EAAWvzB,OACxBxb,KAAKgvC,YAAYvwC,EAAM+c,GACvBxb,KAAKqU,aAAe,EACpB06B,EAAWrzC,aAAesE,KAAK4uC,eAC/B5uC,KAAK4uC,mBAETF,EAAK7xC,UAAUmyC,YAAc,SAAUvwC,EAAM+c,GACzC,IAAK,IAAI7a,EAAI,EAAGA,EAAIlC,EAAKlH,OAAQoJ,IAW7B,GAVIX,KAAKtJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,GAA6C,KAAxCyI,KAAKtJ,OAAOiB,KAAKC,eAAeC,IACjFH,oBAAkBqB,EAAciH,KAAKtJ,OAAQ+H,EAAKkC,GAAG3H,UAAU,MAChEgH,KAAKqU,cACLrU,KAAK4uC,eAAe5uC,KAAKqU,aAAe5V,EAAKkC,KAIjDX,KAAKqU,cACLrU,KAAK4uC,eAAe5uC,KAAKqU,aAAe5V,EAAKkC,IAE7ClC,EAAKkC,GAAGtH,gBAAiB,CACzB,IAAI41C,EAAa,IAAIr4C,cAAY6H,EAAKkC,GAAGrH,cAAcod,aAAa8E,GACpExb,KAAKgvC,YAAYC,EAAWzzB,KAYxCkzB,EAAK7xC,UAAU4kB,WAAa,SAAUtmB,EAAY0gB,EAAW0F,GACzDvhB,KAAKtJ,OAAOiB,KAAK8pB,WAAWtmB,EAAY0gB,EAAW0F,IAEvDmtB,EAAK7xC,UAAU8kB,iBAAmB,SAAU/O,GACxC5S,KAAKtJ,OAAOiB,KAAKgqB,iBAAiB/O,IAQtC87B,EAAK7xC,UAAUgyC,YAAc,WACzB7uC,KAAKtJ,OAAO2nB,eAAgB9f,aAAcqpB,sBAAoB5nB,KAAKtJ,OAAOiB,KAAK4G,gBAAiB,IAOpGmwC,EAAK7xC,UAAU6kB,aAAe,WAC1B1hB,KAAKtJ,OAAOiB,KAAK+pB,eACjB1hB,KAAK6uC,eAQTH,EAAK7xC,UAAU+M,QAAU,WACrB5J,KAAKwK,uBAEFkkC,KC3GPQ,GAA4B,WAM5B,SAASA,EAAWx4C,GAChB+L,OAAKC,OAAOysC,cACZnvC,KAAKtJ,OAASA,EAiBlB,OAfAw4C,EAAWryC,UAAUuyC,cAAgB,WACjC,OAAOpvC,KAAKtJ,OAAOiB,KAAK03C,iBAAiBD,iBAE7CF,EAAWryC,UAAU+M,QAAU,aAS/BslC,EAAWryC,UAAU+F,cAAgB,WACjC,MAAO,cAEJssC,KCxBPI,GAA6B,WAC7B,SAASA,EAAY54C,GACjB+L,OAAKC,OAAO6sC,eACZvvC,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAsET,OAhEAolC,EAAYzyC,UAAUqN,iBAAmB,WACrClK,KAAKtJ,OAAOyT,GAAG,kBAAmBnK,KAAKsF,gBAAiBtF,MACxDA,KAAKtJ,OAAOyT,GAAG,mBAAoBnK,KAAKuF,iBAAkBvF,OAM9DsvC,EAAYzyC,UAAU2N,oBAAsB,WACpCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,kBAAmB1K,KAAKsF,iBACxCtF,KAAKtJ,OAAOgU,IAAI,mBAAoB1K,KAAKuF,oBAE7C+pC,EAAYzyC,UAAUyI,gBAAkB,SAAUvC,GAC9C,IAAIysC,EAASlmC,SAAO,IAAMtJ,KAAKtJ,OAAOid,QAAQC,GAAK,4BAA6B7Q,EAAK4Q,SACjF87B,EAAanmC,SAAO,IAAMtJ,KAAKtJ,OAAOid,QAAQC,GAAK,0BAA2B7Q,EAAK4Q,SACnF67B,KACkD,IAA9CxvC,KAAKtJ,OAAOiB,KAAKkE,aAAa8pB,YAC9B6pB,EAAOh1C,MAAMG,QAAU,OAGvB60C,EAAOh1C,MAAMG,QAAU,SAGQ,SAAlCqF,KAAKtJ,OAAOmF,aAAaC,MAAqD,UAAlCkE,KAAKtJ,OAAOmF,aAAaC,MACjEpE,oBAAkB+3C,IAAkBA,EAAWrnC,UAAUC,SAAS,iBACvEonC,EAAWj1C,MAAMG,QAAU,SAGnC20C,EAAYzyC,UAAU0I,iBAAmB,SAAUxC,GAC1B,UAAjBA,EAAKE,KAAK2Q,IAAmC,UAAjB7Q,EAAKE,KAAK2Q,IAAmC,UAAjB7Q,EAAKE,KAAK2Q,KAClE5T,KAAKtJ,OAAOmc,OAAO,0BAA2B9P,GAC9C/C,KAAKtJ,OAAO2nB,eAAgBxiB,cAAgBQ,eAAgB0G,EAAKE,KAAK2Q,MAAQ,GAC9E5T,KAAKtJ,OAAOo7B,cASpBwd,EAAYzyC,UAAU+F,cAAgB,WAClC,MAAO,eAQX0sC,EAAYzyC,UAAU+M,QAAU,WAC5B5J,KAAKwK,uBAOT8kC,EAAYzyC,UAAU2rB,eAAiB,WACnC,OAAOxoB,KAAKtJ,OAAOiB,KAAKm1B,kBAAkBtE,kBAEvC8mB,KCtEPI,GAA2B,WAC3B,SAASA,EAAUh5C,GACfsJ,KAAK2vC,gBAAkB,EACvB3vC,KAAKiU,aAAe,eACpBjU,KAAK+e,eAAiB,iBACtB/e,KAAK4vC,qBACL5vC,KAAK6vC,uBACL7vC,KAAK8vC,qBACL9vC,KAAKtJ,OAASA,EACdsJ,KAAKhF,iBAAmBtD,oBAAkBhB,EAAOuG,iBACjD+C,KAAK+vC,gBACL/vC,KAAK9D,sBACL8D,KAAKgwC,OAAQ,EACbhwC,KAAKkK,mBA8jBT,OA5jBAwlC,EAAU7yC,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG+iB,GAAkBltB,KAAK6F,UAAW7F,MACjDA,KAAKtJ,OAAOyT,GAAGkjB,GAAiBrtB,KAAKiG,SAAUjG,MAC/CA,KAAKtJ,OAAOyT,GAAGojB,GAAuBvtB,KAAKmG,eAAgBnG,MAC3DA,KAAKtJ,OAAOyT,GAAGsS,GAAkBzc,KAAKqG,UAAWrG,MACjDA,KAAKtJ,OAAOyT,GAAGsjB,GAA0BztB,KAAKkG,kBAAmBlG,MACjEA,KAAKtJ,OAAOyT,GAAGmjB,GAAwBttB,KAAKoG,gBAAiBpG,MAC7DA,KAAKtJ,OAAOyT,GAAG,kBAAmBnK,KAAKiwC,gBAAiBjwC,MACxDA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKkwC,kBAAmBlwC,MAC5DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,yBAA0BnK,KAAKmwC,qBAAsBnwC,MACzEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,kBAAmBnK,KAAKowC,cAAepwC,OAM/D0vC,EAAU7yC,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAIwiB,GAAkBltB,KAAK6F,WACvC7F,KAAKtJ,OAAOgU,IAAI2iB,GAAiBrtB,KAAKiG,UACtCjG,KAAKtJ,OAAOgU,IAAI+R,GAAkBzc,KAAKqG,WACvCrG,KAAKtJ,OAAOgU,IAAI6iB,GAAuBvtB,KAAKmG,gBAC5CnG,KAAKtJ,OAAOgU,IAAI+iB,GAA0BztB,KAAKkG,mBAC/ClG,KAAKtJ,OAAOgU,IAAI4iB,GAAwBttB,KAAKoG,iBAC7CpG,KAAKtJ,OAAOgU,IAAI,kBAAmB1K,KAAKiwC,iBACxCjwC,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKkwC,mBAC1ClwC,KAAKtJ,OAAOiB,KAAK+S,IAAI,yBAA0B1K,KAAKmwC,sBACpDnwC,KAAKtJ,OAAOiB,KAAK+S,IAAI,kBAAmB1K,KAAKowC,iBAQjDV,EAAU7yC,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAMTklC,EAAU7yC,UAAUwzC,gBAAkB,WAClC,OAAOrwC,KAAK+vC,cAMhBL,EAAU7yC,UAAUyzC,eAAiB,WACjC,OAAOtwC,KAAK/E,aAMhBy0C,EAAU7yC,UAAU0zC,iBAAmB,WACnC,OAAOvwC,KAAK9E,eAMhBw0C,EAAU7yC,UAAU2zC,mBAAqB,WACrC,OAAOxwC,KAAK2vC,iBAEhBD,EAAU7yC,UAAUozC,gBAAkB,WAClC,IAGI/1C,EAHAuE,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/Du8B,EAAalzB,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAE5D,IAAK7D,oBAAkBsI,KAAK4vC,oBAAsB5vC,KAAK4vC,kBAAkBr4C,OACrE,IAAK,IAAIF,EAAI,EAAGA,EAAI2I,KAAK4vC,kBAAkBr4C,OAAQF,IAC/C6C,EAAQuE,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEw1B,KAAgB10B,QAAQwB,KAAK4vC,kBAAkBv4C,GAAG67B,IAC3Fz0B,EAAKtB,OAAOjD,EAAO,GAG3B8F,KAAK4vC,kBAAoB5vC,KAAK+vC,aAAe/vC,KAAK8vC,kBAAoB9vC,KAAK6vC,oBAAsB7vC,KAAK9D,uBAE1GwzC,EAAU7yC,UAAUgJ,UAAY,SAAU9C,GACtC,IAAI0tC,EAAkB1tC,EAAKtD,KAAK2jB,UAC5BstB,EAAa1wC,KAAKtJ,OAAO+a,eAAiBzR,KAAKtJ,OAAOuI,mBACtDyxC,GAAc3tC,EAAK4tC,aAAaz2C,MAAQw2C,IACxCD,GAAoCC,GAIxC,GAFc1wC,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EACnC,CACOrS,KAAKtJ,OAAO0b,4BAA8Bq+B,IACxCzwC,KAAKtJ,OAAO0I,iBACzBY,KAAKtJ,OAAO6I,aAAaC,YAAaf,KAAMsE,EAAK0I,QAAShM,KAAMsD,EAAKtD,KACjEE,OAAQK,KAAKtJ,OAAOiB,KAAKi5C,iBAAiB7tC,EAAKtD,KAAK2jB,kBAIvDqtB,IAAoBzwC,KAAKtJ,OAAO0I,iBACrCY,KAAKtJ,OAAO6I,aAAaC,YAAaf,KAAMsE,EAAK0I,QAAShM,KAAMsD,EAAKtD,KACjEE,OAAQK,KAAKtJ,OAAOiB,KAAKi5C,iBAAiB7tC,EAAKtD,KAAK2jB,aAG5D,GAAIpjB,KAAKgwC,OAA2C,UAAlChwC,KAAKtJ,OAAOmF,aAAaC,MAAgE,WAA5CkE,KAAKtJ,OAAOmF,aAAaQ,eAA6B,CACjH,IAAIoC,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/Dk6C,OAAQ,EAERC,EAAe9wC,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAC1Dw1C,OAAmB,EACnBC,OAAa,EACbl4C,EAAa,aAEbD,EAAemH,KAAK9E,eAAiB,EAAI8E,KAAK+vC,aAAa/vC,KAAK/E,aAAanC,GAAc,KAC3FoE,OAAY,EACZoB,OAAiB,EACjBrB,OAAkB,EAClBg0C,EAA6D,QAA5CjxC,KAAKtJ,OAAOmF,aAAaQ,iBAAoD,IAAxB2D,KAAK9E,cAAuB,EACtD,UAA5C8E,KAAKtJ,OAAOmF,aAAaQ,eAA6B2D,KAAK/E,YACrD+E,KAAK/E,YAAc,EAE7B,GADAg2C,EAAiBjxC,KAAKkxC,wBAAwBD,GAC1CjxC,KAAKmxC,iBAAkB,CAcvB,GAbInxC,KAAK+vC,aAAax4C,SAClB2F,EAAY8C,KAAK+vC,aAAa/vC,KAAK/E,aAAa+E,KAAKtJ,OAAOwG,WAC5DD,EAAkB+C,KAAK+vC,aAAa/vC,KAAK/E,aAAa+E,KAAKtJ,OAAOuG,iBAC9D+C,KAAK+vC,aAAa/vC,KAAK/E,aAAanC,KACpCwF,EAAiB0B,KAAK+vC,aAAa/vC,KAAK/E,aAAanC,GAAoB,WAGjFkH,KAAK4vC,kBAAoBj2C,EAAYqG,KAAK4vC,mBAC1C5vC,KAAK8vC,kBAAoBn2C,EAAYqG,KAAK8vC,mBAC1C9vC,KAAK8vC,kBAAkBt3C,KAAKwH,KAAK+vC,aAAa/vC,KAAK/E,cACnD41C,EAAQ7wC,KAAKtJ,OAAOiB,KAAKghB,gBAAgBs4B,GAAgBG,QACzDP,EAAM73C,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACjDsC,WAAS,sBAAwB26B,EAAM73C,SAAU63C,EAAO7wC,KAAKtJ,SACxD2B,OAAOwE,UAAUC,eAAeC,KAAK8zC,EAAO,SAAU,CAEvD,GADA7wC,KAAKqxC,YAAqC,IAAxBrxC,KAAK9E,cAAuB,EAAI8E,KAAKqxC,WACP,UAA5CrxC,KAAKtJ,OAAOmF,aAAaQ,gBAEzB,GADAw0C,EAAMS,cAAgBz4C,EAClBmH,KAAK9E,eAAiB,EAAG,CACzB21C,EAAM/3C,WAAasD,YAAW4D,KAAK+vC,aAAa/vC,KAAK/E,cACrD41C,EAAMvyC,eAAiBuyC,EAAM/3C,WAAWE,gBACjC63C,EAAM/3C,WAAWQ,oBACjBu3C,EAAM/3C,WAAWkH,KAAKtJ,OAAO0G,cACpCyzC,EAAM12C,MAAQ02C,EAAM/3C,WAAWqB,MAAQ,EACvC02C,EAAM32C,MAAQ8F,KAAKqxC,WACnB,IAAIE,EAAmBn4C,EAAoB4G,KAAK+vC,aAAa/vC,KAAK/E,cAAc1D,OAC5EmB,EAASU,EAAoB4G,KAAK+vC,aAAa/vC,KAAK/E,cAAcs2C,EAAmB,GACzF74C,EAAShB,oBAAkBgB,GAAUsH,KAAK+vC,aAAa/vC,KAAK/E,aAAevC,EAC3Eq4C,EAAmBtyC,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEozC,KAAkBtyC,QAAQ9F,EAAOo4C,IACjF9wC,KAAKhF,kBACL61C,EAAM7wC,KAAKtJ,OAAOuG,iBAAmBC,GAEzCG,EAAgByzC,EAAcD,EAAM/3C,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiB61C,SAG7F,IAAiD,UAA5C7wC,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAClF3E,oBAAkBsI,KAAK+vC,aAAa/vC,KAAK/E,cAAe,CAS5D,GARA41C,EAAM12C,MAAQ6F,KAAK+vC,aAAa/vC,KAAK/E,aAAkB,MACnD41C,EAAM12C,OAAS6F,KAAK9E,eAAiB,IACrC21C,EAAM/3C,WAAaD,EACnBg4C,EAAMvyC,eAAiBA,SAChBuyC,EAAM/3C,WAAWQ,oBACjBu3C,EAAM/3C,WAAWkH,KAAKtJ,OAAO0G,eAExCyzC,EAAM32C,MAAoD,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,eAA6B2D,KAAKqxC,WAAarxC,KAAKqxC,WAAa,EACxD,UAA5CrxC,KAAKtJ,OAAOmF,aAAaQ,gBAA8B2D,KAAK9E,eAAiB,EAAG,CAC5Eq2C,EAAmBn4C,EAAoB4G,KAAK+vC,aAAa/vC,KAAK/E,cAAc1D,OAC5EmB,EAASU,EAAoB4G,KAAK+vC,aAAa/vC,KAAK/E,cAAcs2C,EAAmB,GACzF74C,EAAShB,oBAAkBgB,GAAUsH,KAAK+vC,aAAa/vC,KAAK/E,aAAevC,EAC3Eq4C,EAAmBtyC,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEozC,KAAkBtyC,QAAQ9F,EAAOo4C,IAEzF,GAAgD,UAA5C9wC,KAAKtJ,OAAOmF,aAAaQ,gBAA8B2D,KAAK9E,eAAiB,EAAG,CAC5ExC,EAASsH,KAAK+vC,aAAa/vC,KAAK/E,aACpC81C,EAAmBtyC,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEozC,KAAkBtyC,QAAQ9F,EAAOo4C,IAErF9wC,KAAKhF,kBACL61C,EAAM7wC,KAAKtJ,OAAOuG,iBAAmBA,GAG7C4zC,EAAM32C,OAAyB,IAAjB22C,EAAM32C,MAAe,EAAI22C,EAAM32C,MAC7C22C,EAAMx3C,iBAAkB,EACxBw3C,EAAMv3C,gBACN0G,KAAK+vC,aAAa5yC,OAAO0zC,EAAM32C,MAAO,EAAG22C,GACzC7wC,KAAK9D,mBAAmBiB,OAAO0zC,EAAM32C,MAAO,EAAG22C,GAE3CG,EADAD,GAIaF,EAAM32C,MAEyB,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,iBACzB20C,EAA6B,IAAhBH,EAAM32C,MAAc82C,EAAaA,EAAa,GAE/DvyC,EAAKtB,OAAO6zC,EAAY,EAAGH,GAC3B7wC,KAAK4vC,kBAAkBp3C,KAAKq4C,GAEhC7wC,KAAKtJ,OAAOiB,KAAKghB,gBAAgBs4B,GAAgBxyC,KAAOoyC,EACxD7wC,KAAKmxC,kBAAmB,GAExBnxC,KAAKtJ,OAAO+a,eAAiBzR,KAAKtJ,OAAOuI,oBACoB,QAA1De,KAAKtJ,OAAOiB,KAAKghB,gBAAgBs4B,GAAgB/wC,OACpDM,QAAMR,KAAK9D,mBAAmB+0C,GAAiBjxC,KAAKtJ,OAAOiB,KAAKghB,gBAAgBs4B,GAAgBG,WAI5G1B,EAAU7yC,UAAUsJ,eAAiB,SAAUzI,GAE3C,GAAsC,SAAlCsC,KAAKtJ,OAAOmF,aAAaC,MAAmBkE,KAAKtJ,OAAOqF,WAAuB,aAG/E,OAFA2B,EAAEsL,QAAS,OACXhJ,KAAKtJ,OAAOqF,WAAuB,cAAI,GAG3CiE,KAAK9E,cAAgB8E,KAAKtJ,OAAOiB,KAAK4wB,iBACtCvoB,KAAK/E,YAAc+E,KAAKtJ,OAAOiB,KAAK4wB,kBAAoB,EAAIvoB,KAAKtJ,OAAOiB,KAAK4wB,iBAAmB,EAChGvoB,KAAK5E,aAAe4E,KAAKtJ,OAAO+R,qBAAqB,IAEzDinC,EAAU7yC,UAAUoJ,SAAW,SAAUvI,GACrC,GAAgD,WAA5CsC,KAAKtJ,OAAOmF,aAAaQ,eAA6B,CACtD2D,KAAKgwC,OAAQ,EACbhwC,KAAKmxC,kBAAmB,EACxB,IAAIrN,EAAc,EAMlB,GALK9jC,KAAK+vC,aAAax4C,SACnByI,KAAK4vC,qBACL5vC,KAAK+vC,aAAep2C,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACjD6D,KAAK9D,mBAAqBvC,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,0BAEX,QAA5C6D,KAAKtJ,OAAOmF,aAAaQ,eAA0B,CACnD,IAAInE,EAAU8H,KAAKtJ,OAAOiB,KAAKwE,wBACO,UAAlC6D,KAAKtJ,OAAOmF,aAAaC,OAAqBkE,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACrGyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAK+e,gBAAgBxnB,UACtDW,EAAU8H,KAAK+vC,cAEnB/vC,KAAKwxC,iBAAiBt5C,GACtB8H,KAAKtJ,OAAOmc,OAAOqb,OACnBluB,KAAK2vC,gBAAkB,EAE3B3vC,KAAKyxC,iBAEL,IAAIC,EAAcrzC,WAAS,cAAe2B,KAAKtJ,OAAOiB,MAClDg6C,EAAQ3xC,KAAKtJ,OAAOghB,kBACpB1X,KAAKtJ,OAAOsF,kBAAkBgE,KAAK+e,gBAAgBxnB,QAAsD,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,gBACtFynC,EAAcpmC,EAAEiB,IAAI+K,SACpBgoC,EAAYhd,aAAakd,OAAOA,OAAS5xC,KAAK4xC,QAG9C9N,EAAc6N,EAAM95B,uBAAuB,cAAc,GAAGnO,SAKhEgoC,EAAYhd,aAAakd,OAAO1yB,SAAW4kB,EAAa4N,EAAYhd,aAAakd,OAAO1yB,QAAQ,MAGxGwwB,EAAU7yC,UAAUqJ,kBAAoB,SAAUnD,GACzC/C,KAAK+vC,aAAax4C,SACnByI,KAAK+vC,aAAep2C,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACjD6D,KAAK9D,mBAAqBvC,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,0BAE3D,IAAIu1C,EAAcrzC,WAAS,cAAe2B,KAAKtJ,OAAOiB,MACtDqI,KAAK4xC,OAASF,EAAYhd,aAAakd,OAAOA,OAC9C,IAGInzC,EACAozC,EACA7lC,EALArN,KACAzG,KACA45C,EAAa9xC,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAIvD7D,oBAAkBqL,EAAKpE,OAA6D,IAArDqB,KAAKtJ,OAAOwjC,kBAAkB17B,QAAQuE,EAAKpE,MAO3EkzC,EAASz4C,EADTqF,EAAOuB,KAAKtJ,OAAOiB,KAAK8Q,qBAAqBzI,KAAKtJ,OAAOiB,KAAK8Q,qBAAqBlR,OAAS,IAE5FyU,EAAMhM,KAAKtJ,OAAOwjC,kBAAkB,GAAG/tB,aAAa,cANpD0lC,EAASz4C,EADTqF,EAAOsE,EAAK0I,SAEZO,EAAMjJ,EAAKpE,IAAIwN,aAAa,aAOhC,IAAI4lC,EAAiBh/B,SAAS/S,KAAKtJ,OAAOiB,KAAKq6C,mBAAmBhmC,GAAKG,aAAa,iBAAkB,IACtG,GAAI0lC,EAAOt6C,OAGP,IAAK,IAFD06C,EAAaF,EAAiBF,EAAOt6C,OAEhCF,EADa06C,EAAiB,EACT16C,GAAK46C,EAAY56C,IAC3CsH,EAAInG,KAAKwH,KAAKtJ,OAAOiB,KAAKk9B,cAAcx9B,KACpC2I,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAO+a,eAAiBzR,KAAKtJ,OAAOuI,qBACnEN,EAAInG,KAAKwH,KAAKtJ,OAAOiB,KAAKygC,iBAAiB/gC,IAIvD,IAAKK,oBAAkB+G,EAAK3F,YAAa,CACrC,IAAIA,EAAaC,EAAciH,KAAKtJ,OAAQ+H,EAAK3F,WAAWE,UAC5D,IAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,IAAImsC,EAAa1sC,EAAWQ,aAAakF,QAAQC,GACjD3F,EAAWQ,aAAa6D,OAAOqoC,EAAY,GAE/CxlC,KAAK6vC,oBAAsBl2C,EAAYqG,KAAK6vC,qBAC5C7vC,KAAK6vC,oBAAoBr3C,KAAKiG,GAElCozC,EAAOr5C,KAAKiG,GACZvG,EAAU25C,EACV,IAASx6C,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAAK,CACrC,IAAI25C,EAAahxC,KAAK+vC,aAAa5xC,IAAI,SAAUT,GAAK,OAAOA,EAAEo0C,KAAgBtzC,QAAQtG,EAAQb,GAAGy6C,KAC9E,IAAhBd,GACAhxC,KAAK+vC,aAAa5yC,OAAO6zC,EAAY,GAG7C,IAAS35C,EAAI,EAAGA,EAAIsH,EAAIpH,OAAQF,IACvBK,oBAAkBiH,EAAItH,KACvB2I,KAAKtJ,OAAOiB,KAAKsxB,gBAAgBipB,gBAAgB15C,KAAKmG,EAAItH,KAItEq4C,EAAU7yC,UAAU40C,eAAiB,WAEjC,IAAK,IADD3pC,EAAO9H,KAAKtJ,OAAOiB,KAAKk9B,cACnBx9B,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAC7ByQ,EAAKzQ,GAAG2V,aAAa,gBAAiB3V,EAAEuQ,YAE5C,IAAIuuB,EAAUn2B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAC/C,GAAIrS,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,oBAAsBe,KAAKtJ,OAAO+a,eAAiB0kB,EAGpF,CAAA,IAFDgc,EAAQnyC,KAAKtJ,OAAOiB,KAAKwX,qBACzB8oB,EAAkBj4B,KAAKtJ,OAAOiB,KAAK0iC,yBACvC,IAAShjC,EAAI,EAAGA,EAAI86C,EAAM56C,OAAQF,IAC9B86C,EAAM96C,GAAG2V,aAAa,gBAAiB3V,EAAEuQ,YACrCuuB,GACA8B,EAAgB5gC,GAAG2V,aAAa,gBAAiB3V,EAAEuQ,cAKnE8nC,EAAU7yC,UAAU20C,iBAAmB,SAAUt5C,GAI7C,IAAK,IAHDg7B,EAAalzB,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GACxD0Y,EAAe,eACfnb,EAAyD,UAA5CkH,KAAKtJ,OAAOmF,aAAaQ,eAA6B,gBAAkB,aAChFhF,EAAI,EAAGA,EAAI2I,KAAKtJ,OAAOsF,kBAAkBiY,GAAc1c,OAAQF,IAC/DK,oBAAkBsI,KAAKtJ,OAAOsF,kBAAkBiY,GAAc5c,GAAGyB,KAC9DkH,KAAKtJ,OAAOsF,kBAAkBiY,GAAc5c,GAAGyB,GAAYo6B,KAAgBh7B,EAAQ8H,KAAK/E,aAAai4B,KACrGlzB,KAAK2vC,gBAAkB3vC,KAAK2vC,gBAAkB,IAK9DD,EAAU7yC,UAAUuJ,gBAAkB,SAAU1I,GAC5C,IACI00C,EAAgB,iBAChBtzB,EAAiBphB,EAAErC,aAA0B,eACjD,GAAIqC,EAAErC,aAA0B,eAAE9D,OAE9B,IAAK,IAAIF,EAAI,EAAGA,EAAIynB,EAAevnB,OAAQF,IACvCwD,GAAaZ,MAAO6kB,EAAeznB,GAAIiE,OAAQ,QAAU0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,mBAFtG,GAKrB,GAAIwC,EAAErC,aAAa+2C,GAAe76C,OAGzB,CAAA,IADDmB,EADiBgF,EAAErC,aAAa+2C,GAEpC,IAAS/6C,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAAK,CACpC2I,KAAKqyC,eAAe35C,EAAOrB,GAAG2B,UAE9B,IAAK,IADD64C,EAASz4C,EAAoBV,EAAOrB,IAC/BiK,EAAI,EAAGA,EAAIuwC,EAAOt6C,OAAQ+J,IAC/BtB,KAAKqyC,eAAeR,EAAOvwC,GAAGtI,UAElC0E,EAAErC,aAAa+2C,GAAiB10C,EAAErC,aAAa+2C,GAAe74C,OAAOs4C,IAG7E7xC,KAAKgwC,OAAQ,GAEjBN,EAAU7yC,UAAUw1C,eAAiB,SAAUp4C,UAEpC+F,KAAKtJ,OAAe,yBAAEuD,UAEtB+F,KAAKtJ,OAAS,mBAAEuD,IAE3By1C,EAAU7yC,UAAUqzC,kBAAoB,WACpC,IACIh2C,EADAw7B,EAAgB,gBAEhB58B,EAAa,aAEboD,EAAqB8D,KAAKtJ,OAAOiB,KAAKwE,wBACtC7C,EAAe,eACfmF,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/Du8B,EAAalzB,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAC5D,IAAK7D,oBAAkBsI,KAAKtJ,OAAOg/B,IAAiB,CAChD,IAAI/2B,EAAMqB,KAAKtJ,OAAOg/B,GAAe3qB,QAAQ,MAC7C/K,KAAKtJ,OAAOk/B,YAAYj3B,GACxBqB,KAAKtJ,OAAOg/B,GAAiB,KAEjC,IAAKh+B,oBAAkBsI,KAAK4vC,mBACxB,IAAK,IAAIv4C,EAAI,EAAGA,EAAI2I,KAAK4vC,kBAAkBr4C,OAAQF,IAG/C,GAFA6C,EAAQuE,EAAKN,IAAI,SAAUT,GAAK,OAAOA,EAAEw1B,KAAgB10B,QAAQwB,KAAK4vC,kBAAkBv4C,GAAG67B,IAC3Fz0B,EAAKtB,OAAOjD,EAAO,GAC6B,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,iBACzBnC,EAAQgC,EAAmBiC,IAAI,SAAUT,GAAK,OAAOA,EAAEw1B,KAClD10B,QAAQwB,KAAK4vC,kBAAkBv4C,GAAGyB,GAAckH,KAAK4vC,kBAAkBv4C,GAAGyB,GAAYo6B,GACrFlzB,KAAK4vC,kBAAkBv4C,GAAG67B,KAC3Bx7B,oBAAkBwE,EAAmBhC,KAEtC,IAAK,IADDuZ,EAAWvX,EAAmBhC,GAAOZ,GAChCS,EAAI,EAAG0Z,GAAY1Z,EAAI0Z,EAASlc,OAAQwC,IACzC0Z,EAAS1Z,GAAGm5B,KAAgBlzB,KAAK4vC,kBAAkBv4C,GAAG67B,IACtDh3B,EAAmBhC,GAAOZ,GAAc6D,OAAOpD,EAAG,GAO1E,IAAKrC,oBAAkBsI,KAAK6vC,qBACxB,IAASx4C,EAAI,EAAGA,EAAI2I,KAAK6vC,oBAAoBt4C,OAAQF,IACjD,IAAKK,oBAAkBsI,KAAK6vC,oBAAoBx4C,GAAGyB,IAAc,CAC7DoB,EAAQgC,EAAmBiC,IAAI,SAAUT,GAAK,OAAOA,EAAEw1B,KAClD10B,QAAQwB,KAAK6vC,oBAAoBx4C,GAAGyB,GAAYo6B,IACrD,IAAIof,EAA4D,IAA5CtyC,KAAK6vC,oBAAoBx4C,GAAa,MAAU2I,KAAK6vC,oBAAoBx4C,GAAa,MACtG2I,KAAK6vC,oBAAoBx4C,GAAa,MAAI,EACzCK,oBAAkBwE,EAAmBhC,KACtCgC,EAAmBhC,GAAOZ,GAAc6D,OAAOm1C,EAAe,EAAGtyC,KAAK6vC,oBAAoBx4C,IAK1G2I,KAAK4vC,kBAAoB5vC,KAAK+vC,aAAe/vC,KAAK8vC,kBAAoB9vC,KAAK9D,sBAC3E8D,KAAK+vC,aAAep2C,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACjD6D,KAAKqxC,WAAa,EAClBrxC,KAAK9D,mBAAqBvC,EAAYqG,KAAKtJ,OAAOiB,KAAKwE,yBACvD6D,KAAK6vC,uBACL7vC,KAAKtJ,OAAOiB,KAAK4H,aAAa8uB,WAElCqhB,EAAU7yC,UAAUwJ,UAAY,SAAUtD,GACtC,GAAsC,UAAlC/C,KAAKtJ,OAAOmF,aAAaC,KAAkB,CAC3C,IAAIzE,OAAI,EACJgE,EAAehD,OAAOyE,eAAeC,KAAKgG,EAAM,kBAAoBA,EAAKwvC,eAAiBvyC,KAAKtJ,OAAOsF,kBACtG+iB,EAAiB,iBAIjBtgB,EAAQuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC/DuF,EAAqB8D,KAAKtJ,OAAOiB,KAAKwE,wBACtCq2C,EAAexyC,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAE1Dk3C,EAAap3C,EAAyB,aAEtCH,OAAgB,EAChBD,OAAc,EAEdG,OAAe,EAKnB,GAHIq3C,EAAWl7C,OAAS,GAAiD,WAA5CyI,KAAKtJ,OAAOmF,aAAaQ,gBAClDo2C,EAAWrO,UAEiC,WAA5CpkC,KAAKtJ,OAAOmF,aAAaQ,iBAAgChE,OAAOyE,eAAeC,KAAKgG,EAAM,kBAE1F,GADAtE,EAAKtB,OAAOsB,EAAKlH,OAASk7C,EAAWl7C,OAAQk7C,EAAWl7C,QACnDyI,KAAKtJ,OAAOma,aAAepS,EAAKlH,SAAW2E,EAAmB3E,OAK9D,CACD,IAAIm7C,EAAe/4C,EAAY8E,GAC/B,GAAIi0C,EAAan7C,OAAQ,CACrB,IAAIy/B,EAAa0b,EAAav0C,IAAI,SAAUT,GAAK,OAAOA,EAAE80C,KACrDh0C,QAAQtC,EAAmB,GAAGs2C,IAC/BG,EAAW3b,EAAah3B,KAAKtJ,OAAOiB,KAAKmZ,aAAak7B,SAC1D9vC,EAAqBw2C,EAAav1C,OAAO65B,EAAY2b,SAVrDz2C,EAAmB3E,OAASk7C,EAAWl7C,QACvC2E,EAAmBiB,OAAOjB,EAAmB3E,OAASk7C,EAAWl7C,OAAQk7C,EAAWl7C,QAgBhG,IAHsC,IAAlCyI,KAAK8vC,kBAAkBv4C,QACvByI,KAAK8vC,kBAAkBt3C,KAAKwH,KAAKtJ,OAAO8G,SAASuF,EAAK7I,QAErD7C,EAAI,EAAGA,EAAIo7C,EAAWl7C,OAAQF,IAAK,CACpC,IAAI+C,EAAWgC,YAAWq2C,EAAWp7C,IAgCrC,UA/BO+C,EAAStB,kBACTsB,EAASpB,gBACToB,EAASF,aACTE,EAASD,aACTC,EAASf,uBACTe,EAASd,oBACTc,EAASkE,eACX5G,oBAAkB0C,EAASk3C,uBACrBl3C,EAASk3C,cAEpBmB,EAAWp7C,GAAG+C,SAAWA,EACzBgB,EAAe4E,KAAK8vC,kBAAkBz4C,GAClCK,oBAAkB0D,KAClBA,EAAe4E,KAAK8vC,kBAAkBz4C,EAAI,IAE1C2I,KAAKhF,kBACAtD,oBAAkB+6C,EAAWp7C,GAAGyB,aACjCuE,EAAgBm1C,EAAcC,EAAWp7C,GAAGyB,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBy3C,EAAWp7C,KAGhHK,oBAAkB0D,KACnBH,EAAcG,EAAalB,OAEiB,QAA5C8F,KAAKtJ,OAAOmF,aAAaQ,gBAAwE,WAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAC1E3E,oBAAkB+6C,EAAWp7C,GAAGyB,cAAuC,IAAxBkH,KAAK9E,gBACpDA,GAAiB,EACjBE,EAAe,MAGvBP,GAAaZ,MAAOw4C,EAAWp7C,GAAIiE,OAAQ,OAAS0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBC,EAAaC,OAzDvF,EAyDkHE,GAC/HF,EAAgB,KACgC,UAA5C8E,KAAKtJ,OAAOmF,aAAaQ,iBAA+B3E,oBAAkB+6C,EAAWp7C,GAAa,YAIlG,IAAK,IAHDu7C,EAAa12C,EAAmBiC,IAAI,SAAUT,GAAK,OAAOA,EAAE80C,KAC3Dh0C,QAAQi0C,EAAWp7C,GAAa,WAAEm7C,IACnC/+B,EAAWvX,EAAmB02C,GAAwB,aACjD74C,EAAI,EAAGA,EAAI0Z,EAASlc,OAAQwC,IAC7B0Z,EAAS1Z,GAAGy4C,KAAkBC,EAAWp7C,GAAGm7C,IAC5Ct2C,EAAmB02C,GAAwB,aAAEz1C,OAAOpD,EAAG,GAKvE,GAAIsB,EAAa0jB,GAAgBxnB,OAC7B,IAAKF,EAAI,EAAGA,EAAIgE,EAAa0jB,GAAgBxnB,OAAQF,IACjDwD,GAAaZ,MAAOoB,EAAa0jB,GAAgB1nB,GAAIiE,OAAQ,UAAY0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBC,EAAaC,OAxEhH,EAwE2IE,GAG5J4E,KAAKtJ,OAAO6G,cACZ,IAAK,IAAI07B,EAAM,EAAGA,EAAMx6B,EAAKlH,OAAQ0hC,IACjCx6B,EAAKw6B,GAAU,MAAIA,EACnB/iB,WAAS,sBAAwBzX,EAAKw6B,GAAa,SAAI,SAAUA,EAAKj5B,KAAKtJ,QACtE+H,EAAKw6B,GAAU,OAChBj5B,KAAKtJ,OAAO6G,WAAW/E,KAAKiG,EAAKw6B,IAI7Cj5B,KAAK8vC,kBAAoB9vC,KAAK4vC,kBAAoB5vC,KAAK+vC,aAAe/vC,KAAK6vC,oBAAsB7vC,KAAK9D,uBAE1GwzC,EAAU7yC,UAAUq0C,wBAA0B,SAAUh3C,GACpD,IAAI4N,EAAO9H,KAAKtJ,OAAOiB,KAAKk9B,cAC5B,IAAiD,UAA5C70B,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,iBAC9E2D,KAAK9E,eAAiB,EAAG,CAC5B,IAAKxD,oBAAkBsI,KAAK+vC,aAAa/vC,KAAK/E,eAAiB+E,KAAK+vC,aAAa/vC,KAAK/E,aAAa9B,SAC/F,GAAI6G,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACvDyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAK+e,gBAAgBxnB,QAEtD,GADA2C,GAASd,EAAoB4G,KAAK+vC,aAAa/vC,KAAK/E,cAAc1D,OAClB,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAErDnC,GADsB8F,KAAKwwC,2BAK/Bt2C,GAASd,EAAoB4G,KAAK+vC,aAAa/vC,KAAK/E,cAAc1D,OAGtE2C,GAAS4N,EAAKvQ,SACd2C,EAAQ4N,EAAKvQ,OAAS,GAE1ByI,KAAKwxC,iBAAiBxxC,KAAKtJ,OAAOiB,KAAKwE,yBACnC6D,KAAK2vC,kBACLz1C,GAAS8F,KAAK2vC,iBAElB3vC,KAAK2vC,gBAAkB,EAE3B,OAAOz1C,GAEXw1C,EAAU7yC,UAAUszC,qBAAuB,SAAUzyC,GACjDA,EAAEqF,KAAKiG,QAAS,EAChB,IAAIooC,EAAUpxC,KAAKtJ,OAAOiB,KAAKqE,kBAC3BiY,KAEA5b,OAAOC,KAAK84C,GAAS75C,SACrB0c,EAAem9B,EAAQn9B,cAE3B,IAAK,IAAI5c,EAAI,EAAGA,EAAI4c,EAAa1c,OAAQF,IACrCqG,EAAEoK,KAAK3K,OAAO8W,EAAa5c,GAAQ,MAAG,IAG9Cq4C,EAAU7yC,UAAUuzC,cAAgB,SAAUrtC,GAG1CA,EAAU,MAAI/C,KAAKtJ,OAAOwjC,kBAAkB,GAAW,UAEpDwV,KC1kBPmD,GAAsB,WAMtB,SAASA,EAAKn8C,GACVsJ,KAAKiU,aAAe,eACpBjU,KAAK+e,eAAiB,iBACtB/e,KAAK8yC,iBAAmB,KACxB9yC,KAAK+yC,oBAAqB,EAC1BtwC,OAAKC,OAAOswC,QACZhzC,KAAKtJ,OAASA,EACdsJ,KAAKhF,iBAAmBtD,oBAAkBhB,EAAOuG,iBACjD+C,KAAKizC,uBAAyB,KAC9BjzC,KAAKkzC,sBACLlzC,KAAKmzC,gBAAkB,IAAIzD,GAAU1vC,KAAKtJ,QAC1CsJ,KAAKkK,mBAi8BT,OAz7BA2oC,EAAKh2C,UAAU+F,cAAgB,WAC3B,MAAO,QAMXiwC,EAAKh2C,UAAUqN,iBAAmB,WAC9BlK,KAAKtJ,OAAOyT,GAAGqS,GAAmBxc,KAAKwF,WAAYxF,MACnDA,KAAKtJ,OAAOyT,GAAGqiB,GAAkBxsB,KAAKyF,UAAWzF,MACjDA,KAAKtJ,OAAOyT,GAAG+jB,GAAiBluB,KAAK0F,SAAU1F,MAC/CA,KAAKtJ,OAAOyT,GAAGmkB,GAA0BtuB,KAAK2F,kBAAmB3F,MACjEA,KAAKtJ,OAAOyT,GAAG6iB,GAAiBhtB,KAAK4F,SAAU5F,MAC/CA,KAAKtJ,OAAOyT,GAAGujB,GAAoB1tB,KAAKgG,YAAahG,MACrDA,KAAKtJ,OAAOiB,KAAKwS,GAAGipC,GAAmBpzC,KAAKsG,WAAYtG,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,iBAAkBnK,KAAKqzC,YAAarzC,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,gBAAiBnK,KAAKszC,aAActzC,MACxDA,KAAKtJ,OAAOyT,GAAGijB,GAAiBptB,KAAK8F,SAAU9F,MAC/CA,KAAKtJ,OAAOyT,GAAG,cAAenK,KAAKuzC,iBAAkBvzC,MACrDA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKuzC,iBAAkBvzC,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAGqpC,GAAkBxzC,KAAK2F,kBAAmB3F,MAC9DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,WAAYnK,KAAKyzC,aAAczzC,MACnDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,cAAenK,KAAK0zC,eAAgB1zC,MACxDA,KAAKtJ,OAAOyT,GAAG,0BAA2BnK,KAAK2zC,wBAAyB3zC,MAExEA,KAAKtJ,OAAOiB,KAAKwS,GAAGypC,GAAwB5zC,KAAK2G,gBAAiB3G,MAClEA,KAAKtJ,OAAOiB,KAAKwS,GAAG0pC,GAA0B7zC,KAAK4G,kBAAmB5G,MACtEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,mBAAoBnK,KAAK8zC,eAAgB9zC,MAC7DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,mBAAoBnK,KAAK+zC,eAAgB/zC,OAEjE6yC,EAAKh2C,UAAU42C,aAAe,SAAU/1C,GACpCsC,KAAKg0C,kBAAoBt2C,EAAE0D,QAE/ByxC,EAAKh2C,UAAUk3C,eAAiB,SAAUE,GACtCA,EAAQ53C,eAAiB2D,KAAKtJ,OAAOmF,aAAaQ,eAClD43C,EAAQh5C,YAAc+E,KAAK/E,YAC3Bg5C,EAAQC,cAAgBl0C,KAAK8yC,kBAEjCD,EAAKh2C,UAAU8J,gBAAkB,SAAU5D,GACvC/C,KAAKtJ,OAAOuS,QAAQ+kB,EAAoBjrB,IAE5C8vC,EAAKh2C,UAAU+J,kBAAoB,SAAU7D,GACH,SAAlC/C,KAAKtJ,OAAOmF,aAAaC,MACzBkE,KAAKtJ,OAAOuS,QAAQ4P,EAAuB9V,IAOnD8vC,EAAKh2C,UAAU2N,oBAAsB,WAC7BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI8R,GAAmBxc,KAAKwF,YACxCxF,KAAKtJ,OAAOgU,IAAI8hB,GAAkBxsB,KAAKyF,WACvCzF,KAAKtJ,OAAOgU,IAAIwjB,GAAiBluB,KAAK0F,UACtC1F,KAAKtJ,OAAOgU,IAAI4jB,GAA0BtuB,KAAK2F,mBAC/C3F,KAAKtJ,OAAOgU,IAAIgjB,GAAoB1tB,KAAKgG,aACzChG,KAAKtJ,OAAOiB,KAAK+S,IAAI0oC,GAAmBpzC,KAAKsG,YAC7CtG,KAAKtJ,OAAOiB,KAAK+S,IAAI,iBAAkB1K,KAAKqzC,aAC5CrzC,KAAKtJ,OAAOiB,KAAK+S,IAAI,gBAAiB1K,KAAKszC,cAC3CtzC,KAAKtJ,OAAOgU,IAAI0iB,GAAiBptB,KAAK8F,UACtC9F,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAKuzC,kBACpCvzC,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKuzC,kBACvCvzC,KAAKtJ,OAAOiB,KAAK+S,IAAI,cAAe1K,KAAK0zC,gBACzC1zC,KAAKtJ,OAAOiB,KAAK+S,IAAI8oC,GAAkBxzC,KAAK2F,mBAC5C3F,KAAKtJ,OAAOgU,IAAI,0BAA2B1K,KAAK2zC,yBAChD3zC,KAAKtJ,OAAOiB,KAAK+S,IAAIkpC,GAAwB5zC,KAAK2G,iBAClD3G,KAAKtJ,OAAOiB,KAAK+S,IAAImpC,GAA0B7zC,KAAK4G,mBACpD5G,KAAKtJ,OAAOiB,KAAK+S,IAAI,WAAY1K,KAAKyzC,cACtCzzC,KAAKtJ,OAAOiB,KAAK+S,IAAI,mBAAoB1K,KAAK8zC,gBAC9C9zC,KAAKtJ,OAAOiB,KAAK+S,IAAI,mBAAoB1K,KAAK+zC,kBASlDlB,EAAKh2C,UAAU+M,QAAU,WACrB5J,KAAKwK,uBAOTqoC,EAAKh2C,UAAUs3C,oBAAsB,SAAUjf,GAC3Cl1B,KAAKtJ,OAAOiB,KAAKoE,WAAWo4C,oBAAoBjf,IAEpD2d,EAAKh2C,UAAU02C,iBAAmB,SAAUxwC,GACxC,IAAIqxC,EAAY77C,YAAU,aAAcwK,GACpC+hB,EAAYvsB,YAAU,OAAQ67C,GAC9BC,EAAUr0C,KAAKtJ,OACfG,EAAUw9C,EAAQ19C,WAAWE,QACjC,IAAKJ,EAAa49C,IAAYx9C,aAAmB0tB,sBAClB,SAA1B6vB,EAAUv0C,aAA+C,QAArBu0C,EAAU94C,SACN,UAAxC+4C,EAAQx4C,aAAaQ,gBAAsE,UAAxCg4C,EAAQx4C,aAAaQ,gBAC1B,UAAxCg4C,EAAQx4C,aAAaQ,gBAC5B,GAAkB,gBAAdyoB,EAA6B,CAC7B,IAAIpb,EAAWhS,oBAAkB08C,EAAUz1C,OAAStG,OAAOC,KAAK87C,EAAUz1C,KAAKpH,OAASyI,KAAK9E,cACzFk5C,EAAUz1C,IAAI+K,SAAW,EACzB4qC,EAAY58C,oBAAkBgS,KAA2B,IAAdA,GACwC,EAAnF2qC,EAAQl4C,wBAAwBuN,GAAU2qC,EAAQ94C,0BAA0B,IAChF84C,EAAQ18C,KAAKsd,MAAMM,UAAU,gBAAiB++B,QAE7C,GAAkB,mBAAdxvB,EAEL,IAAK,IADDyvB,EAAeF,EAAQ18C,KAAKsd,MAAMG,OAAO7d,OACpCF,EAAI,EAAGA,EAAIk9C,EAAcl9C,IACW,kBAArCg9C,EAAQ18C,KAAKsd,MAAMG,OAAO/d,GAAGQ,KAC7Bw8C,EAAQ18C,KAAKsd,MAAMG,OAAOjY,OAAO9F,GAK7C2I,KAAKtJ,OAAO+iB,yBAAyC,mBAAdqL,GACvC9kB,KAAKw0C,kBAAkBJ,GAEW,UAAlCp0C,KAAKtJ,OAAOmF,aAAaC,MAA8C,WAA1Bs4C,EAAUv0C,aACvDG,KAAKtJ,OAAOmc,OAAO,uBAG3BggC,EAAKh2C,UAAU23C,kBAAoB,SAAUzxC,GACzC,GAA0B,SAArBA,EAAKlD,aAA0C,QAAhBkD,EAAKzH,QAA0C,WAArByH,EAAKlD,YAA0B,CACzF,GAAgD,QAA5CG,KAAKtJ,OAAOmF,aAAaQ,iBAAoD,IAAxB2D,KAAK9E,eACjC,SAArB6H,EAAKlD,aAA0C,QAAhBkD,EAAKzH,OAAmB,CAC3D,IAAIm5C,EAAaz0C,KAAKtJ,OAAOiB,KAAKghB,gBAC9B+7B,EAAeD,EAAWt3C,OAAO,EAAG,GAAG,GACvCw3C,EAAoB30C,KAAK/E,YACzBmf,EAAcpa,KAAKtJ,OAAOyF,wBACkB,UAA5C6D,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,iBAChFs4C,GAAqBv7C,EAAoBghB,EAAYu6B,EAAoB,IAAIp9C,QAEjFo9C,EAAgE,UAA5C30C,KAAKtJ,OAAOmF,aAAaQ,eAA6Bs4C,EAAoB,EAAIA,EAClGF,EAAWt3C,OAAOw3C,EAAmB,EAAGD,GACxC,IAAIE,EAAYx6B,EAAYjd,OAAO,EAAG,GAAG,GACzCid,EAAYjd,OAAOw3C,EAAmB,EAAGC,GACzC50C,KAAK60C,8BAA8BD,EAAW50C,KAAK/E,aAEvD,IAAI+8B,EAAch4B,KAAKtJ,OAAOiB,KAAKygC,iBAC/B0c,EAAoB90C,KAAKtJ,OAAOiB,KAAKo9C,uBACrCC,EAAUh1C,KAAKtJ,OAAOoxB,uBAAuBmtB,YAC5CD,IACDE,gBAAcl1C,KAAKtJ,OAAOiB,KAAMqI,KAAKtJ,OAAOiB,KAAKghB,gBAAiB3Y,KAAKtJ,OAAOiB,KAAKkH,UAAW,GAC9FmB,KAAKm1C,YAAYn1C,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOmI,UAAWmB,KAAKtJ,OAAOyF,2BAEhF64C,GAAWh1C,KAAKtJ,OAAOuI,mBAAqB,IAC7Ci2C,gBAAcl1C,KAAKtJ,OAAOiB,KAAMm9C,EAAmB9c,EAAa,GAChEh4B,KAAKm1C,YAAYn1C,KAAKtJ,OAAOiB,KAAKhB,WAAYqhC,EAAah4B,KAAKtJ,OAAOyF,4BAInF02C,EAAKh2C,UAAUg4C,8BAAgC,SAAUD,EAAWQ,GAChE,IAAIhuC,EAAQpH,KAGR+rC,EAAO30B,KAAKC,KAAK+9B,EAAcp1C,KAAKtJ,OAAOiB,KAAKmZ,aAAak7B,UAC7D/xB,EAAO8xB,EAAO,EAAIA,EAAO,EACzBsJ,EAAYD,GAAgBn7B,EAAO,GAAKja,KAAKtJ,OAAOoa,aAAak7B,SACjEsJ,EAA0Bt1C,KAAKtJ,OAAOiB,KAAK49C,qBAAiC,wBAChFD,EAAwB,GAAGn4C,OAAO,EAAG,GACrC,IAAIsB,EAAO62C,EAAwBr7B,GAC9BviB,oBAAkBsI,KAAK5E,gBACxBqD,EAAKhB,OAAO,SAAUC,EAAGxD,GACjBwD,EAAE1E,WAAaoO,EAAMhM,aAAapC,WAClCq8C,EAAYn7C,MAGhB8F,KAAK5E,aAAa/B,iBAAmB2G,KAAK5E,aAAa9B,aAAa/B,QACxB,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAChFg5C,GAAaj8C,EAAoB4G,KAAK5E,cAAc7D,SAGxD89C,GAAar1C,KAAKtJ,OAAOoa,aAAak7B,WAEtCvtC,EAAO62C,EADPr7B,GAAQ,GAERo7B,EAAYA,EAAYr1C,KAAKtJ,OAAOoa,aAAak7B,UAAY,EAAIqJ,EAAYr1C,KAAKtJ,OAAOoa,aAAak7B,SAAW,GAErHqJ,EAAwD,UAA5Cr1C,KAAKtJ,OAAOmF,aAAaQ,eAA6Bg5C,EAAY,EAAIA,EAClF52C,EAAKtB,OAAOk4C,EAAW,EAAGT,GAC1B50C,KAAKtJ,OAAOiB,KAAK49C,qBAA0C,yBAE/D1C,EAAKh2C,UAAU8I,kBAAoB,SAAU5C,GACzC,IAAI3B,EAAS2B,EAAK3B,OAClB,IAAI1J,oBAAkB0J,EAAO2J,QAAQ,kBAG/B/K,KAAKtJ,OAAOiB,KAAKkE,aAAyB,eAAKmE,KAAKtJ,OAAOiB,KAAKk3B,OAAtE,CAGA,IAAIlvB,EAASK,KAAKtJ,OAAOiB,KAAKi5C,kBAAkBxvC,EAAO2J,QAAQ,gBAAgBoB,aAAa,kBAC5F,GAAsC,SAAlCnM,KAAKtJ,OAAOmF,aAAaC,OAAoBkE,KAAKw1C,WAAa71C,IAAWA,EAAOsE,cACjFjE,KAAKtJ,OAAOmF,aAAaoE,cAAgBN,EAAOM,eAAkBmB,EAAOgH,UAAUC,SAAS,sBAC5FjH,EAAOgH,UAAUC,SAAS,uBAA0BrI,KAAKtJ,OAAOmF,aAAaqzB,oBAAqB,CAGlG,GAFAlvB,KAAKw1C,WAAY,EACjBx1C,KAAKtJ,OAAOiB,KAAK0mB,eAAgBkK,iBAAkBxlB,EAAK2G,WAAY,GAChE1J,KAAKtJ,OAAO0H,qBAAsB,CAClC,IAAI6Q,EAAKpE,eAAa9H,EAAK3B,OAAQ,SACnCpB,KAAK8yC,iBAAmB7jC,EAAG9C,aAAa,iBACxC8C,EAAGjC,aAAa,gBAAiBiC,EAAGvF,SAAW,IAEnD1J,KAAKy1C,mBAAmB,YAGhC5C,EAAKh2C,UAAU44C,mBAAqB,SAAU35C,GAC1CkE,KAAKtJ,OAAOiB,KAAK0mB,eAAgBxiB,cAAgBC,KAAMA,KAAU,GAC9CvD,YAAU,gBAAiByH,KAAKtJ,OAAOiB,KAAKoE,YAClDgG,MAAM/B,KAAKtJ,OAAOiB,KAAKoE,YACpCiE,KAAKtJ,OAAOiB,KAAKk3B,QAAS,GAE9BgkB,EAAKh2C,UAAUi3C,eAAiB,WACxB9zC,KAAKtJ,OAAO0H,sBAA0D,SAAlC4B,KAAKtJ,OAAOmF,aAAaC,OAC7DkE,KAAKw1C,WAAY,EACjBx1C,KAAKy1C,mBAAmB,YAGhC5C,EAAKh2C,UAAUyJ,WAAa,SAAUvD,GAC9B/C,KAAKw1C,YACLx1C,KAAK01C,SAAW3yC,EAAKzH,QAEL,OAAhByH,EAAKzH,QACL0E,KAAK2F,kBAAkB5C,GAEP,WAAhBA,EAAKzH,QACL0E,KAAKtJ,OAAOi6B,aAGpBkiB,EAAKh2C,UAAUw1C,eAAiB,SAAUp4C,UAE/B+F,KAAKtJ,OAAe,yBAAEuD,UAEtB+F,KAAKtJ,OAAS,mBAAEuD,IAE3B44C,EAAKh2C,UAAUiJ,SAAW,SAAU/C,GAChC,IAAIqE,EAAQpH,KAER21C,EAAO5yC,EAAY,QAoBvB,UAnBOA,EAAY,QACf/C,KAAKtJ,OAAO0H,uBAAyB1G,oBAAkBsI,KAAK8yC,oBAC5D/vC,EAAKpE,IAAIqO,aAAa,gBAAiBhN,KAAK8yC,kBAC5C9yC,KAAK8yC,sBAAmBn1B,GAEN,UAAlB3d,KAAK01C,UACL11C,KAAKtJ,OAAOuS,QAAQmkB,GAAiBrqB,EAAM,SAAU6yC,GAC5CA,EAAa5sC,QAA6C,SAAnC5B,EAAM1Q,OAAOmF,aAAaC,KAG7C85C,EAAa5sC,QAA6C,SAAnC5B,EAAM1Q,OAAOmF,aAAaC,OACtDsL,EAAMouC,WAAY,EAClBpuC,EAAMquC,mBAAmB,WAJzBruC,EAAMmrB,mBAAmB,QAMxB76B,oBAAkBi+C,IACnBA,EAAKzpB,QAAQ0pB,KAIrB51C,KAAKg0C,oBAAsBh0C,KAAKg0C,kBAAkB5rC,UAAUC,SAAS,qBACrErI,KAAKg0C,kBAAkB5rC,UAAUC,SAAS,uBAAyBrI,KAAKg0C,kBAAkB5rC,UAAUC,SAAS,kBAG7G,OAFAtF,EAAKiG,QAAS,OACdhJ,KAAKg0C,kBAAoB,MAGS,SAAlCh0C,KAAKtJ,OAAOmF,aAAaC,OACH,QAAlBkE,KAAK01C,UAAwC,aAAlB11C,KAAK01C,SAChC11C,KAAK01C,SAAW,KAEO,UAAlB11C,KAAK01C,WACV3yC,EAAKiG,QAAS,EACdhJ,KAAK01C,SAAW,KAChBx/B,WAAS,kBAAkB,EAAOlW,KAAKtJ,SAEtCqM,EAAK4tC,aAAa1wC,eACnB8C,EAAKiG,QAAS,KAO1B6pC,EAAKh2C,UAAU01B,mBAAqB,SAAUsjB,GAC1C,IAAKn+C,oBAAkBsI,KAAKtJ,OAAOiB,KAAK86B,eAAgB,CACpD,IAAIqjB,EAAY91C,KAAKtJ,OAAOid,QAAQC,GAAK,gBACzC5T,KAAKtJ,OAAOiB,KAAK86B,cAAcC,aAAaojB,EAAY,MAAOA,EAAY,OAAQA,EAAY,UAAuB,SAAZD,GAC1G71C,KAAKtJ,OAAOiB,KAAK86B,cAAcC,aAAaojB,EAAY,SAAUA,EAAY,UAAuB,SAAZD,KAGjGhD,EAAKh2C,UAAUmJ,YAAc,WACzB,GAAsC,SAAlChG,KAAKtJ,OAAOmF,aAAaC,KAAiB,CAC1C,IAAIi6C,EAAc13C,WAAS,yBAA0B2B,KAAKtJ,OAAOiB,KAAKoE,YAClEi6C,EAAWh2C,KAAKtJ,OAAO68B,iBAAiBwiB,EAAYrsC,SAAU1J,KAAKtJ,OAAO0I,iBAC9EY,KAAKtJ,OAAO6I,aAAaC,YACrBf,KAAMs3C,EAAYtqC,QAClBhM,KAAMu2C,EACNr2C,OAAQK,KAAKtJ,OAAOiB,KAAKiI,aAAaI,KAAKtJ,OAAO0I,mBAEtDY,KAAKy1C,mBAAmB,UACxBz1C,KAAKw1C,WAAY,EAEiB,UAAlCx1C,KAAKtJ,OAAOmF,aAAaC,MACzBkE,KAAKtJ,OAAOmc,OAAO,yBAG3BggC,EAAKh2C,UAAU62C,eAAiB,SAAU3wC,GAClC5L,EAAgB6I,KAAKtJ,SAA6C,SAAlCsJ,KAAKtJ,OAAOmF,aAAaC,MAAmC,SAAhBiH,EAAKzH,SACjF0E,KAAKiyB,WAAWlvB,EAAMA,EAAK2G,UAC3B1J,KAAKi2C,cAAclzC,EAAMA,EAAKpE,IAAKoE,EAAK2G,YAGhDmpC,EAAKh2C,UAAU+I,SAAW,SAAU7C,GAChC,IAAIqE,EAAQpH,KACZ,GAAsC,SAAlCA,KAAKtJ,OAAOmF,aAAaC,MAAmBkE,KAAKtJ,OAAOid,QAAQ7I,cAAc,QAAS,CACvF/H,EAAKiG,QAAS,EAEdkN,WAAS,UAAU,EAAOlW,KAAKtJ,OAAOiB,MACtCue,WAAS,kBAAkB,EAAMlW,KAAKtJ,QACtCqM,EAAK0I,QAAQ1I,EAAK5H,YAAc4H,EAAK9I,MACrC,IAAIopB,EAEAA,EADA3rB,oBAAkBqL,EAAKtD,MACfO,KAAKtJ,OAAOiB,KAAKoE,WAAqB,WAAEm6C,KAAKjzB,cAAc6e,WAG3D/+B,EAAKtD,KAAKqiC,WAEtB,IAAIqU,EACAC,EAAgBp2C,KAAKtJ,OAAO6E,0BAChC,GAAI7D,oBAAkB2rB,GAClBrjB,KAAKtJ,OAAOiB,KAAKwE,wBAAwBsB,OAAO,SAAUC,EAAGrG,GACrDqG,EAAE04C,EAAc,MAAQrzC,EAAK0I,QAAQ2qC,EAAc,MACnDD,EAAa9+C,SAKpB,CACD,IAAI8+B,EAAUn2B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAGvC8jC,EAFJhgB,GAC8C,IAA1Cn2B,KAAKtJ,OAAOmI,UAAUL,QAAQ6kB,GACjBrjB,KAAKtJ,OAAOmI,UAAUL,QAAQ6kB,IAEe,IAArDrjB,KAAKtJ,OAAO2hC,qBAAqB75B,QAAQ6kB,GACjCrjB,KAAKtJ,OAAO2hC,qBAAqB75B,QAAQ6kB,GAGzCrjB,KAAKtJ,OAAO0hC,iBAAiB55B,QAAQ6kB,IAIE,IAA1CrjB,KAAKtJ,OAAOmI,UAAUL,QAAQ6kB,IAAkBrjB,KAAKtJ,OAAOuI,mBAAqB,EAC3Fe,KAAKtJ,OAAOiB,KAAKygC,iBAAiB55B,QAAQ6kB,GAASrjB,KAAKtJ,OAAOmI,UAAUL,QAAQ6kB,GAG7F,IAAIoV,KAMJ,GALAr8B,SAAOq8B,EAAK11B,GACZ01B,EAAIzvB,QAAS,EACbyvB,EAAIz1B,KAAO,OACXqgB,EAAQrjB,KAAKtJ,OAAOiB,KAAKkH,UAAUwkB,EAAM3Z,UACzC1J,KAAKtJ,OAAOuS,QAAQ+kB,EAAoByK,GACnCA,EAAIzvB,OAiCLhJ,KAAKtJ,OAAOiB,KAAKk3B,QAAS,OA7B1B,GAHKxL,EAAM3Z,WAAa1J,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAwB,QAAlByI,KAAK01C,WAC5E11C,KAAKq2C,cAAe,GAEnB5/C,EAAauJ,KAAKtJ,SACjBsJ,KAAKtJ,OAAOC,sBAAsBC,eAAeoJ,KAAKtJ,OAAOC,WAAWE,mBAAmB0tB,qBAa5F,GAAI9tB,EAAauJ,KAAKtJ,SACtBsJ,KAAKtJ,OAAOC,sBAAsBC,eAAeoJ,KAAKtJ,OAAOC,WAAWE,mBAAmB0tB,oBAAoB,CAChH,IAAItP,EAAQjV,KAAKtJ,OAAOiB,KAAKsd,MAEtBjV,KAAKtJ,OAAOiB,KAAKhB,WAAW2/C,OAAOF,EAAc,GAAIrzC,EAAK0I,QAASwJ,EAAMshC,UAAWthC,EAAOlS,EAAKyzC,eAClG3gC,KAAK,SAAUnY,GACXhG,oBAAkBgG,KACnBqF,EAAK0I,QAAQ1I,EAAK5H,YAAcuC,EAAEqF,EAAK5H,aAE3CiM,EAAM6qB,WAAWlvB,EAAMozC,GACvB/uC,EAAM6uC,cAAclzC,EAAMsgB,EAAO8yB,WAtBrC,GAAIh/C,EAAgB6I,KAAKtJ,QAAS,CAC9B,IACI+/C,GAAa52C,YAAa,OAAQpB,KAAMsE,EAAK0I,QAASnQ,OAAQ,OAAQqD,IAAK0kB,EAC3E3Z,SAAUysC,EAAY1qC,QAAS1I,EAAK0I,QAAStQ,WAAY4H,EAAK5H,WAC9Du7C,kBAAmB,KAAMC,oBAAqB,MAClD32C,KAAKtJ,OAAOiB,KAAKygB,gBAA4B,aAAEq+B,EAAUz2C,KAAKtJ,OAAOiB,KAAKsd,YAG1EjV,KAAKiyB,WAAWlvB,EAAMozC,GACtBn2C,KAAKi2C,cAAclzC,EAAMsgB,EAAO8yB,KAsBpDtD,EAAKh2C,UAAUo5C,cAAgB,SAAUlzC,EAAMpE,EAAK+K,GAChD,IAAIktC,EACA52C,KAAKtJ,OAAOiB,KAAKk/C,iBACjB72C,KAAKtJ,OAAOiB,KAAKk/C,gBAAgBxoB,QAAQtrB,EAAK0I,SAElDzL,KAAKtJ,OAAOiB,KAAKoE,WAAW+6C,gBAAgB92C,KAAKtJ,OAAOiB,KAAK67B,iBAAiBzwB,EAAK5H,cACnF6E,KAAKtJ,OAAOiB,KAAKoE,WAAWg7C,QAAQntC,UACd,QAAlB5J,KAAK01C,UAAwC,aAAlB11C,KAAK01C,WAChC11C,KAAKy1C,mBAAmB,UACxBz1C,KAAKw1C,WAAY,GAErBx1C,KAAKuyB,mBAAmB,QACVvyB,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,GAGvCukC,EADA7zC,EAAKtD,KAAKsL,QAAQ,0BAA4BhI,EAAKtD,KAAKsL,QAAQ,0BACzD/K,KAAKtJ,OAAOiB,KAAKkH,UAAU6K,GAE7B3G,EAAKtD,KAAKsL,QAAQ,qBAAuBhI,EAAKtD,KAAKsL,QAAQ,qBACzD/K,KAAKtJ,OAAOiB,KAAKygC,iBAAiB1uB,GAGlC1J,KAAKtJ,OAAOiB,KAAK0gC,qBAAqB3uB,GAEjD2D,eAAaupC,IAAQ,cAAe,eACpCvpC,cAAYupC,EAAKruC,iBAAiB,eAAgB,oBAAqB,iBAElEvI,KAAKtJ,OAAOuI,mBAAqB,IAElC23C,EADA7zC,EAAKtD,KAAKsL,QAAQ,oBAAsBhI,EAAKtD,KAAKsL,QAAQ,oBACnD/K,KAAKtJ,OAAOiB,KAAKkH,UAAU6K,GAG3B1J,KAAKtJ,OAAOiB,KAAKygC,iBAAiB1uB,GAE7C2D,eAAaupC,IAAQ,cAAe,eACpCvpC,cAAYupC,EAAKruC,iBAAiB,eAAgB,oBAAqB,iBAE3E8E,eAAa1O,IAAO,cAAe,eACnC0O,cAAY1O,EAAI4J,iBAAiB,eAAgB,oBAAqB,iBAC/B,IAAnCvI,KAAKtJ,OAAwB,iBAC7BsJ,KAAKtJ,OAAOiB,KAAK+5C,YAAYsF,eAEjCn8C,GAAaZ,MAAO8I,EAAK0I,QAASnQ,OAAQ,QAAU0E,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,cAAe6H,EAAK5H,YAC7HwD,EAAI+K,WAAa1J,KAAKtJ,OAAOyF,wBAAwB5E,OAAS,GAAwB,UAAlByI,KAAK01C,WAC1E11C,KAAK01C,SAAW,MAEpB,IAAIuB,GACAj0C,KAAM,OAAQrD,OAAQK,KAAKtJ,OAAO88B,iBAAiBzwB,EAAK5H,YAAasD,KAAMsE,EAAK0I,QAChFyrC,aAAcn0C,EAAKyzC,cAAe73C,IAAKA,EAAKyC,OAAQ2B,EAAKtD,MAEzDO,KAAKtJ,OAAOoiB,WAAW3a,IAAI,SAAUgwB,GAAM,OAA+B,IAAxBA,EAAGC,mBAA8B72B,QACnFyI,KAAKtJ,OAAOiB,KAAK02B,UAErBruB,KAAKtJ,OAAOuS,QAAQ4P,EAAuBo+B,IAE/CpE,EAAKh2C,UAAUw2C,YAAc,YACpBrzC,KAAKtJ,OAAOiB,KAAKk3B,QAAU7uB,KAAKw1C,WAA+B,QAAlBx1C,KAAK01C,UAAwD,SAAlC11C,KAAKtJ,OAAOmF,aAAaC,OAC7FkE,KAAKtJ,OAAOmF,aAAawzB,iBAM1BrvB,KAAKuyB,mBAAmB,SALxBvyB,KAAKy1C,mBAAmB,UACxBz1C,KAAKw1C,WAAY,EACjBx1C,KAAK01C,SAAW,QAO5B7C,EAAKh2C,UAAUo1B,WAAa,SAAUlvB,EAAM2G,GACxC1J,KAAKtJ,OAAOiB,KAAKoE,WAAWk2B,WAAWvoB,EAAU3G,EAAK5H,WAAY4H,EAAK0I,QAAQ1I,EAAK5H,aACpF6E,KAAKtJ,OAAOiB,KAAKghB,gBAAgBjP,GAAUjL,KAAOsE,EAAK0I,SAE3DonC,EAAKh2C,UAAU2I,WAAa,SAAU1K,EAASK,GAC3CN,EAAWC,EAASkF,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,cAAeC,EAAY6E,KAAK5E,cAC9G4E,KAAKtJ,OAAO6G,cAGZ,IAAK,IAFDkB,EAAOuB,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cAC9CoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WAC1DU,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAAK,CAClCoH,EAAKpH,GAAG6C,MAAQ7C,EAChB,IAAIQ,EAAMmI,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GACjDT,EAAQb,MAAMpC,KAAS4G,EAAKpH,GAAGQ,IACR,QAAnBiD,EAAQQ,SACRmD,EAAKpH,GAAG8C,MAAQ6F,KAAKkzC,mBAAmB/4C,MACxCsE,EAAKpH,GAAG+C,SAAW4F,KAAKkzC,mBAAmB94C,SAC3CqE,EAAKpH,GAAG2B,SAAWgH,KAAKkzC,mBAAmBl6C,SACtCtB,oBAAkBsI,KAAKkzC,mBAAmBp6C,cAC3C2F,EAAKpH,GAAGyB,WAAakH,KAAKkzC,mBAAmBp6C,WAC7C2F,EAAKpH,GAAGiH,eAAiB0B,KAAKkzC,mBAAmB50C,gBAErDG,EAAKpH,GAAGiC,aAAe0G,KAAKkzC,mBAAmB55C,cAGvD4c,WAAS,sBAAwBzX,EAAKpH,GAAG2B,SAAW,SAAU3B,EAAG2I,KAAKtJ,QACtE,IAAIG,EAAUmJ,KAAKtJ,OAAOC,WAAWE,SAChCJ,EAAauJ,KAAKtJ,SAAWG,aAAmB0tB,sBACjDrO,WAAS,sBAAwBzX,EAAKpH,GAAG2B,SAAUyF,EAAKpH,GAAI2I,KAAKtJ,QAEhE+H,EAAKpH,GAAG8C,OACT6F,KAAKtJ,OAAO6G,WAAW/E,KAAKiG,EAAKpH,IAGlB,QAAnByD,EAAQQ,QAAmD,MAA/B0E,KAAKizC,yBACjCjzC,KAAKtJ,OAAO2nB,eAAgBxiB,cAAgBQ,eAAgB2D,KAAKizC,0BAA4B,GAC7FjzC,KAAKizC,uBAAyB,OAGtCJ,EAAKh2C,UAAUs4C,YAAc,SAAU12C,EAAMqJ,EAAM5P,GAC/C,IAAK,IAAI6B,EAAI,EAAGA,EAAIiG,KAAKtJ,OAAOm+B,cAAct9B,OAAQwC,IAAK,CACvD,IAAIo9C,EAAQj/C,EAAQ6B,GAChBG,EAAQmE,WAAS,sBAAwB84C,EAAMn+C,SAAW,SAAUgH,KAAKtJ,QAE7E,GADAygD,EAAMj9C,MAAQA,GACTxC,oBAAkBy/C,EAAMr+C,YAAa,CACtC,IAAI6sC,EAActnC,WAAS,sBAAwB84C,EAAMr+C,WAAWE,SAAW,SAAUgH,KAAKtJ,QAC9FygD,EAAMr+C,WAAWoB,MAAQyrC,GAGjC,IAAIt3B,GAAS,EACT+oC,EAAep3C,KAAKtJ,OAAO0I,gBAC/B,GAAIY,KAAKtJ,OAAOuI,mBAAqB,EAEjC,IAAK,IADDS,EAAQoI,EAAK,GAAGS,iBAAiB,cAC5B8uC,EAAI,EAAGA,EAAI33C,EAAMnI,OAAQ8/C,IAC9B,GAAI33C,EAAM23C,GAAGjvC,UAAUC,SAAS,yBAA0B,CACtD+uC,EAAeC,EACf,MAIZ,IAAK,IAAI16C,EAAI,EAAGA,EAAIqD,KAAKtJ,OAAOmI,UAAUtH,OAAQoF,IAAK,CAC9CmL,EAAKnL,GAAGyL,UAAUC,SAAS,gBAC5BgG,IAEJ,IAAIipC,EAAQp/C,EAAQmW,GAEhBlU,GADAD,EAAQo9C,EAAMp9C,MACNo9C,EAAMn9C,OACdwE,EAAMmJ,EAAKnL,GACVjF,oBAAkB4/C,EAAMx+C,cACzBoB,EAAQmE,WAAS,sBAAwBi5C,EAAMx+C,WAAWE,SAAW,SAAUgH,KAAKtJ,SAExF,IAAI6gD,EAAW54C,EAAIe,MAAM03C,GACzB,IAAK1/C,oBAAkB6/C,GAAW,CAC9B,IAASF,EAAI,EAAGA,EAAIE,EAASnvC,UAAU7Q,OAAQ8/C,IAAK,CAChD,IAAIp9C,EAAQs9C,EAASnvC,UAAUivC,GAG3BtjC,EAAS9Z,EAAMmP,MAFN,mBAGT+R,EAAUlhB,EAAMmP,MAFN,yBAGA,MAAV2K,GACA1G,eAAakqC,GAAWt9C,GAEb,MAAXkhB,GACA9N,eAAakqC,GAAWt9C,GAG3B6N,EAAKnL,GAAGyL,UAAUC,SAAS,eAI5B+H,YAAUmnC,GAAW,uBAAyBr9C,EAAQ,QAAUC,GAHhEiW,YAAUmnC,GAAW,iBAAmBr9C,EAAQ,QAAUC,MAQ1E04C,EAAKh2C,UAAU6I,SAAW,WACtB,IAAIqsB,EACA73B,EAAQ8F,KAAK/E,YACb/C,EAAU8H,KAAKtJ,OAAOiB,KAAKwE,wBACO,UAAlC6D,KAAKtJ,OAAOmF,aAAaC,OACzB5B,EAAQ8F,KAAKmzC,gBAAgB7C,iBAC7BtwC,KAAK9E,cAAgB8E,KAAKmzC,gBAAgB5C,oBACtCvwC,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACvDyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAK+e,gBAAgBxnB,UACtDW,EAAU8H,KAAKmzC,gBAAgB9C,oBAGvC,IAAIvoC,EAAO9H,KAAKtJ,OAAOiB,KAAKk9B,cACxB2iB,EAAiB1vC,EAAKvQ,QAAUuQ,EAAK,GAAGqE,aAAa,iBAAmB,EACxEsrC,EAAgB3vC,EAAKvQ,QAAUuQ,EAAKA,EAAKvQ,OAAS,GAAG4U,aAAa,iBAAmB,EACrFurC,EAAc13C,KAAK9E,eAAiBs8C,GAAkBx3C,KAAK9E,eAAiBu8C,EAC5EE,EAAmB33C,KAAKtJ,OAAO0H,sBAAwB4B,KAAK/E,aAAe,GAA+B,OAA1B+E,KAAK8yC,iBACzF,GAAsC,WAAlC9yC,KAAKtJ,OAAOmF,aAAaC,KAAmB,CAC5C,GAAgD,UAA5CkE,KAAKtJ,OAAOmF,aAAaQ,eACzB01B,EAAW,cAEV,IAAiD,UAA5C/xB,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAClF2D,KAAK9E,eAAiB,GAAKy8C,IAAqBD,IACpD3lB,EAAW,SACNr6B,oBAAkBQ,EAAQgC,KAAWhC,EAAQgC,GAAOf,UACrD,GAAsC,UAAlC6G,KAAKtJ,OAAOmF,aAAaC,OAAqBkE,KAAKtJ,OAAOsF,kBAAkBgE,KAAKiU,cAAc1c,OAAS,GACrGyI,KAAKtJ,OAAOsF,kBAAkBgE,KAAK+e,gBAAgBxnB,SAEtD,GADA2C,GAASd,EAAoBlB,EAAQgC,IAAQ3C,OACG,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAErDnC,GADsB8F,KAAKmzC,gBAAgB3C,2BAK/Ct2C,GAASd,EAAoBlB,EAAQgC,IAAQ3C,OAIzD,IAAKyI,KAAK9E,eAAiB,GAAKy8C,IAAqBD,IAC7Cx9C,GAAsD,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,gBACY,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAA8B,CAC1DnC,GAAS4N,EAAKvQ,OAAS,IACvB2C,EAAQ4N,EAAKvQ,OAAS,GAE1B,IACIm9C,EAAe10C,KAAKtJ,OAAOiB,KAAKgiB,cAAe,KAAE,GACjDi+B,EAAkB5mB,SAAS6mB,cAC/B/vC,EAAK5N,EAAQ,GAAG63B,GAAUjqB,EAAK,IAC/BoO,WAAS,aAAchc,EAAQ,EAAG8F,KAAKmzC,iBACvC,IAAIlC,EAA6D,UAA5CjxC,KAAKtJ,OAAOmF,aAAaQ,eAA6BnC,EAAQA,EAAQ,EACrD,UAAlC8F,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAKtJ,OAAOiB,KAAKgiB,cAAe,KAAExc,OAAO,EAAG,GAC5C6C,KAAKtJ,OAAOiB,KAAKgiB,cAAe,KAAExc,OAAO8zC,EAAgB,EAAGyD,IAEhE,IAAIve,EAAUn2B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAC/C,GAAIrS,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,oBAAsBe,KAAKtJ,OAAO+a,eAAiB0kB,EAAQ,CACjG,IAAI6B,EAAch4B,KAAKtJ,OAAOyY,qBAE1B2oC,EAAqB93C,KAAKtJ,OAAOiB,KAAKghB,gBAAgB,GAE1D,GADAqf,EAAY99B,EAAQ,GAAG63B,GAAUiG,EAAY,IACzC7B,EAAQ,CACR,IAAI4hB,EAAkB/3C,KAAKtJ,OAAO2jC,yBAClC0d,EAAgB79C,EAAQ,GAAG63B,GAAUgmB,EAAgB,IAEnB,UAAlC/3C,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAKtJ,OAAOiB,KAAKgiB,cAAmB,WAAExc,OAAO,EAAG,GAChD6C,KAAKtJ,OAAOiB,KAAKgiB,cAAmB,WAAExc,OAAO8zC,EAAgB,EAAG6G,IAEpE5hC,WAAS,aAAchc,EAAQ,EAAG8F,KAAKmzC,iBAE3C,GAAsC,QAAlCnzC,KAAKtJ,OAAOmF,aAAaC,MAAoD,SAAlCkE,KAAKtJ,OAAOmF,aAAaC,KAAiB,CAErF,IAAK,IADDk8C,EAASh4C,KAAKtJ,OAAOiB,KAAK+f,kBAAkBnP,iBAAiB,gBACxDlR,EAAI,EAAGA,EAAI2gD,EAAOzgD,OAAQF,IAC/B2gD,EAAO3gD,GAAG8uB,SAEdjQ,WAAS,gBAAkBlW,KAAKtJ,OAAOiB,KAAKoE,WAAWg7C,SAEvDY,IACA33C,KAAK8yC,iBAAmB,MAE5B8E,EAAgBK,WAsB5BpF,EAAKh2C,UAAU4I,UAAY,SAAU1C,GACjC,GAAyB,YAArBA,EAAKlD,aAA6BG,KAAKw1C,UACvCzyC,EAAKiG,QAAS,OAGlB,GAAsC,SAAlChJ,KAAKtJ,OAAOmF,aAAaC,MAAwC,cAArBiH,EAAKlD,YAArD,CAIA,GAAIG,KAAKg0C,oBAAsBh0C,KAAKg0C,kBAAkB5rC,UAAUC,SAAS,qBACrErI,KAAKg0C,kBAAkB5rC,UAAUC,SAAS,uBAAyBrI,KAAKg0C,kBAAkB5rC,UAAUC,SAAS,YAG7G,OAFAtF,EAAKiG,QAAS,OACdhJ,KAAKg0C,kBAAoB,MAG7B,GAAyB,WAArBjxC,EAAKlD,YAEL,IAAK,IADDpB,EAAOsE,EAAKtE,KACPpH,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAAK,CAClC2I,KAAKqyC,eAAe5zC,EAAKpH,GAAG2B,UAE5B,IAAK,IADD64C,EAASz4C,EAAoBqF,EAAKpH,IAC7BiK,EAAI,EAAGA,EAAIuwC,EAAOt6C,OAAQ+J,IAC/BtB,KAAKqyC,eAAeR,EAAOvwC,GAAGtI,UAElC+J,EAAKtE,KAAOA,EAAKlF,OAAOs4C,GAGhC,GAAyB,QAArB9uC,EAAKlD,aAA0BG,KAAK+yC,qBAAuB/yC,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,yBAA2B,CAKtI,KAJ6C,IAAvCzZ,KAAKtJ,OAAOiB,KAAK4wB,kBAA2BvoB,KAAK+yC,oBAChDhwC,EAAK7I,QAAU8F,KAAKtJ,OAAOiB,KAAK4wB,mBAAmC,IAAfxlB,EAAK7I,QAC5D8F,KAAK9E,cAAgB8E,KAAKtJ,OAAOiB,KAAK4wB,kBAEtCvoB,KAAKtJ,OAAO0H,qBAAsB,CAClC,IAAI85C,EAAW,yBAA2Bl4C,KAAK9E,cAAgB,KAC3DyD,OAAM,EACNqB,KAAK9E,eAAiB,GAAiD,QAA5C8E,KAAKtJ,OAAOmF,aAAaQ,gBACR,WAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBACzB2D,KAAK8yC,iBAAmB9yC,KAAK9E,cAAc0M,WAC3CjJ,EAAMqB,KAAKtJ,OAAOg+B,aAAa5pB,cAAcotC,GAC7Cl4C,KAAK/E,YAAc0D,EAAMA,EAAI+K,SAAW,GAGpC1J,KAAK8yC,kBAA8C,OAA1B9yC,KAAK8yC,kBAC9BoF,EAAW,yBAA2Bl4C,KAAK8yC,iBAAmB,KAC9Dn0C,EAAMqB,KAAKtJ,OAAOg+B,aAAa5pB,cAAcotC,GAC7Cl4C,KAAK/E,YAAc0D,EAAMA,EAAI+K,SAAW,GAGxC1J,KAAK/E,YAAc,OAKvB+E,KAAK+yC,qBAAuB/yC,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,yBAC5EzZ,KAAK/E,YAAc8H,EAAK7I,MAGxB8F,KAAK/E,YAAc+E,KAAKtJ,OAAOiB,KAAK4wB,kBAAoB,EAAIvoB,KAAKtJ,OAAOiB,KAAK4wB,iBAAmB,EAGpGvoB,KAAK+yC,qBAAuB/yC,KAAKtJ,OAAO0H,sBAAwB4B,KAAKtJ,OAAO+iB,yBAC5EzZ,KAAK5E,aAAe4E,KAAKtJ,OAAO8G,SAASuF,EAAK7I,OAG9C8F,KAAK5E,aAAe4E,KAAKtJ,OAAO+R,qBAAqB,GAGzDzI,KAAK+yC,oBAAqC,IAAfhwC,EAAK7I,QAChC8F,KAAK5E,aAAe4E,KAAKtJ,OAAO8G,SAASuF,EAAK7I,OAC9C8F,KAAK/E,YAAc8H,EAAK7I,OAEoB,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,gBAA8B3E,oBAAkBsI,KAAK5E,gBAC1E1D,oBAAkBsI,KAAKtJ,OAAO+R,qBAAqB,MACvDzI,KAAK5E,aAAe4E,KAAKtJ,OAAO+R,qBAAqB,IAEzDzI,KAAK+yC,oBAAqB,EAC1BhwC,EAAO/C,KAAKm4C,aAAap1C,QArErBA,EAAKiG,QAAS,GA+EtB6pC,EAAKh2C,UAAU82C,wBAA0B,WACD,OAAhC3zC,KAAKizC,yBACLjzC,KAAKizC,uBAAyBjzC,KAAKtJ,OAAOmF,aAAaQ,iBAG/Dw2C,EAAKh2C,UAAUs7C,aAAe,SAAUp1C,GACpC,IAAI9I,EAAQ8I,EAAKtE,KACjB,GAAoB,QAAhBsE,EAAKzH,OAAkB,CACvB,IAAIzD,EAAMmI,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GACjDw2B,EAAW,KACf93B,EAAMG,SAAW1C,oBAAkBuC,EAAMG,UAAYgC,YAAW2G,EAAKtE,MAAQxE,EAAMG,SACnF,IAAIggB,EAAcpa,KAAKtJ,OAAOiB,KAAKwE,wBAC/B6D,KAAKtJ,OAAO0H,sBAAuC,IAAf2E,EAAK7I,QACzC8F,KAAK/E,YAAc+E,KAAKtJ,OAAOiB,KAAKwE,wBAAwBqC,QAAQwB,KAAK5E,cACzE4E,KAAK9E,cAAgB6X,SAAS/S,KAAKtJ,OAAOmI,UAAUmB,KAAK/E,aAAakR,aAAa,mBAGvF,IAAIjS,EAAQ8F,KAAK/E,YACjBhB,EAAMjB,SAAWme,SAAOnX,KAAKtJ,OAAOid,QAAQC,GAAK,UACjDsC,WAAS,sBAAwBjc,EAAMjB,SAAUiB,EAAO+F,KAAKtJ,QAC7D,IAAIyD,EAAQ,EACR+C,OAAY,EACZoB,OAAiB,EACjBxF,OAAa,EACbmE,OAAkB,EAClB06C,EAAmB33C,KAAKtJ,OAAO0H,sBAAwB4B,KAAK/E,aAAe,GAA+B,OAA1B+E,KAAK8yC,iBACrFhrC,EAAO9H,KAAKtJ,OAAOmI,UACnB24C,EAAiB1vC,EAAKvQ,QAAUuQ,EAAK,GAAGqE,aAAa,iBAAmB,EACxEsrC,EAAgB3vC,EAAKvQ,QAAUuQ,EAAKA,EAAKvQ,OAAS,GAAG4U,aAAa,iBAAmB,EACrFurC,EAAc13C,KAAK9E,eAAiBs8C,GAAkBx3C,KAAK9E,eAAiBu8C,EAShF,GARIr9B,EAAY7iB,SACZ2F,EAAYkd,EAAYpa,KAAK/E,aAAa+E,KAAKtJ,OAAOwG,WACtDD,EAAkBmd,EAAYpa,KAAK/E,aAAa+E,KAAKtJ,OAAOuG,iBACxDmd,EAAYpa,KAAK/E,aAAanC,aAC9BwF,EAAiB8b,EAAYpa,KAAK/E,aAAanC,WAAWE,UAE9DF,EAAashB,EAAYpa,KAAK/E,aAAanC,YAEC,QAA5CkH,KAAKtJ,OAAOmF,aAAaQ,gBAA4B+d,EAAY7iB,OAAQ,CAEzE,GADA4C,EAAQigB,EAAYpa,KAAK/E,aAAad,MACU,UAA5C6F,KAAKtJ,OAAOmF,aAAaQ,eACzB01B,EAAW,SACX73B,EAAQkgB,EAAYpa,KAAK/E,aAAaf,WAErC,GAAgD,UAA5C8F,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAC1D01B,EAAW,QACX,IAAIwf,EAAmBn4C,EAAoBghB,EAAYpa,KAAK/E,cAAc1D,OACtEw5C,EAAmB32B,EAAYpa,KAAK/E,aAAaf,MACrDA,EAASq3C,EAAmB,EAAMR,EAAmBQ,SAEpD,GAAgD,UAA5CvxC,KAAKtJ,OAAOmF,aAAaQ,eAA4B,CAC1D01B,EAAW,SACN/xB,KAAK9E,eAAiB,GAAKy8C,IAAqBD,IACjDz9C,EAAMnB,WAAasD,YAAWge,EAAYpa,KAAK/E,cAC/ChB,EAAMqE,eAAiBrE,EAAMnB,WAAWE,gBACjCiB,EAAMnB,WAAWQ,oBACjBW,EAAMnB,WAAWkH,KAAKtJ,OAAO0G,eAExC,IAAIg7C,EAAoBh/C,EAAoBghB,EAAYpa,KAAK/E,cAAc1D,OACvE8gD,EAAoBj+B,EAAYpa,KAAK/E,aAAaf,MAClD8F,KAAK9E,eAAiB,IACtBjB,EAAME,MAAQA,EAAQ,GAE1BD,EAASk+C,EAAoB,EAAMC,EAAoBD,IACnDp4C,KAAKhF,kBACLf,EAAMG,SAAS4F,KAAKtJ,OAAOuG,iBAAmBhD,EAAM+F,KAAKtJ,OAAOuG,iBAAmBC,EAC9ExF,oBAAkBuC,EAAMnB,aACzBuE,EAAgBxF,EAAKoC,EAAMnB,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBf,IAsB7F,GAlBgD,UAA5C+F,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,kBAC3E2D,KAAK9E,eAAiB,GAAKy8C,IAAqBx9C,GAASu9C,IAC1Dz9C,EAAMqE,eAAiBA,EACvBrE,EAAMnB,WAAasD,YAAWtD,UACvBmB,EAAMnB,WAAWQ,oBACjBW,EAAMnB,WAAWkH,KAAKtJ,OAAO0G,eAExCnD,EAAME,MAAQA,EACV6F,KAAKhF,kBACLf,EAAMG,SAAS4F,KAAKtJ,OAAOuG,iBAAmBhD,EAAM+F,KAAKtJ,OAAOuG,iBAAmBA,EAC9EvF,oBAAkBuC,EAAMnB,aACzBuE,EAAgBxF,EAAKoC,EAAMnB,WAAY,MAAOkH,KAAKtJ,OAAQsJ,KAAKhF,gBAAiBf,KAI7E,MAAZ83B,IAAqB/xB,KAAK9E,eAAiB,GAAKy8C,IAAqBD,IACrE30C,EAAK7I,MAAqB,WAAb63B,EAAwB73B,EAAQA,EAAQ,GAET,WAA5C8F,KAAKtJ,OAAOmF,aAAaQ,eAA6B,CACtD,IAAI1F,EAAcqJ,KAAKtJ,OAAOiB,KAAKhB,sBAAsBC,cACrDoJ,KAAKtJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOuE,KAAKtJ,OAAOiB,KAAKhB,WACnEoM,EAAK7I,MAAQvD,EAAWY,QAG5BG,oBAAkBuC,EAAME,SACxBF,EAAME,MAAQA,GAElBF,EAAMZ,iBAAkB,EACxBY,EAAMX,gBACNW,EAAMC,MAAQ,EAOlB,GALoB,QAAhB6I,EAAKzH,SACL0E,KAAKkzC,oBAAuB/4C,MAAOF,EAAME,MAAOrB,WAAYmB,EAAMnB,WAAYE,SAAUiB,EAAMjB,SAC1FoB,SAAUH,EAAMG,SAAUkE,eAAgB5G,oBAAkBuC,EAAMnB,iBAAc6kB,EAAY1jB,EAAMnB,WAAWE,SAC7GM,aAAcW,EAAMX,eAEH,WAArByJ,EAAKlD,YAEL,IAAK,IADDy4C,EAAgBv1C,EAAKtE,KAChBpH,EAAI,EAAGA,EAAIihD,EAAc/gD,OAAQF,IACtC,GAAIihD,EAAcjhD,GAAGyB,WAAY,CACzBA,EAAaC,EAAciH,KAAKtJ,OAAQ4hD,EAAcjhD,GAAGyB,WAAWE,UACxE,IAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,IAAImsC,EAAa1sC,EAAWQ,aAAakF,QAAQ85C,EAAcjhD,IAC/DyB,EAAWQ,aAAa6D,OAAOqoC,EAAY,IAK3D,OAAOziC,GAOX8vC,EAAKh2C,UAAUi1B,UAAY,SAAUrzB,EAAMvE,EAAO63B,GAI9C,GAHI/xB,KAAKtJ,OAAOmF,aAAaQ,iBAAmB2D,KAAKizC,wBAA0D,OAAhCjzC,KAAKizC,yBAChFjzC,KAAKizC,uBAAyBjzC,KAAKtJ,OAAOmF,aAAaQ,gBAEtD2D,KAAKhF,iBAAoBtD,oBAAkB+G,KAASpG,OAAOyE,eAAeC,KAAK0B,EAAMuB,KAAKtJ,OAAO0G,cAiB9FqB,GACIvE,GAAS,GACT8F,KAAK9E,cAAgBhB,EACrB8F,KAAK/E,YAAcf,IAGnB8F,KAAK9E,cAAgB8E,KAAKtJ,OAAO6xB,iBACjCvoB,KAAK/E,YAAc+E,KAAKtJ,OAAO6xB,kBAE/BwJ,GACA/xB,KAAKtJ,OAAO2nB,eAAgBxiB,cAAgBQ,eAAgB01B,KAAc,GAE9E/xB,KAAKtJ,OAAOiB,KAAKoE,WAAW+1B,UAAUrzB,EAAMvE,IAG5C8F,KAAKtJ,OAAOiB,KAAKoE,WAAW+1B,UAAUrzB,EAAMvE,OAhCiE,CACjH,IAAIu4C,KACA8F,EAAmBv4C,KAAKtJ,OAAOmF,aAAaC,KAC5C08C,EAAuBx4C,KAAKtJ,OAAOiB,KAAKkE,aAAaC,KACzD22C,EAAWj6C,KAAKiG,GAChBuB,KAAKtJ,OAAO2nB,eAAgBxiB,cAAgBC,KAAM,WAAa,GAC/DkE,KAAKtJ,OAAOiB,KAAK0mB,eAAgBxiB,cAAgBC,KAAM,WAAa,GAC/DpE,oBAAkBq6B,IACnB/xB,KAAKtJ,OAAO2nB,eAAgBxiB,cAAgBQ,eAAgB01B,KAAc,GAE9E,IAAIwgB,GAAmBt+B,aAAcw+B,EAAY3zB,kBAAoBC,mBACrE/e,KAAKtJ,OAAOmc,OAAO4J,IAAoB81B,eAAgBA,EAAgBr4C,MAAOA,IAC9E8F,KAAKtJ,OAAO2nB,eAAgBxiB,cAAgBC,KAAMy8C,KAAsB,GACxEv4C,KAAKtJ,OAAOiB,KAAK0mB,eAAgBxiB,cAAgBC,KAAM08C,KAA0B,GACjFx4C,KAAKtJ,OAAO23B,YA2BpBwkB,EAAKh2C,UAAU47C,iBAAmB,WAC9B,OAAOz4C,KAAKtJ,OAAOiB,KAAKoE,WAAW08C,oBAMvC5F,EAAKh2C,UAAU67C,YAAc,WACzB14C,KAAKtJ,OAAOiB,KAAKoE,WAAW28C,eAEhC7F,EAAKh2C,UAAUy2C,aAAe,SAAU51C,GAC/BhG,oBAAkBgG,EAAEqF,KAAKlD,cACY,WAAlCnC,EAAEqF,KAAKlD,YAAY+H,YAA6D,SAAlClK,EAAEqF,KAAKlD,YAAY+H,aAC3B,UAAlC5H,KAAKtJ,OAAOmF,aAAaC,MAAsD,cAAlC4B,EAAEqF,KAAKlD,YAAY+H,cACxE5H,KAAKm1C,YAAYn1C,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOmI,UAAWmB,KAAKtJ,OAAOyF,0BAC7E6D,KAAKtJ,OAAOsI,YAAcgB,KAAKtJ,OAAOuI,oBAAsBe,KAAKtJ,OAAO+a,gBACpEzR,KAAKtJ,OAAOiB,KAAKhB,WAAWY,SAAWyI,KAAKtJ,OAAOyY,qBAAqB5X,QACxEyI,KAAKm1C,YAAYn1C,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOyY,qBAAsBnP,KAAKtJ,OAAOyF,2BAU5G02C,EAAKh2C,UAAUy1B,SAAW,SAAU5oB,EAAUkJ,GACJ,SAAlC5S,KAAKtJ,OAAOmF,aAAaC,MAAqD,UAAlCkE,KAAKtJ,OAAOmF,aAAaC,OAC/B,UAAlCkE,KAAKtJ,OAAOmF,aAAaC,OACzBkE,KAAKw1C,WAAY,EACjBx1C,KAAKy1C,mBAAmB,UAE5Bz1C,KAAKtJ,OAAOiB,KAAKoE,WAAWu2B,SAAS5oB,EAAUkJ,KAGhDigC,KCx9BP8F,GAA+B,WAC/B,SAASA,EAAcjiD,GACnB+L,OAAKC,OAAOk2C,iBACZ54C,KAAKtJ,OAASA,EAoBlB,OAZAiiD,EAAc97C,UAAU+F,cAAgB,WACpC,MAAO,iBAQX+1C,EAAc97C,UAAU+M,QAAU,aAG3B+uC,KCpBPE,GAA2B,WAC3B,SAASA,EAAUniD,GACf+L,OAAKC,OAAOo2C,aACZ94C,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAyGT,OA9FA2uC,EAAUh8C,UAAU+F,cAAgB,WAChC,MAAO,aAEXi2C,EAAUh8C,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAK+4C,aAAc/4C,MAClDA,KAAKtJ,OAAOyT,GAAG,kBAAmBnK,KAAKg5C,gBAAiBh5C,MACxDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,yBAA0BnK,KAAKi5C,oBAAqBj5C,MACxEA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKk5C,eAAgBl5C,MACtDA,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKm5C,kBAAmBn5C,MAC5DA,KAAKtJ,OAAOyT,GAAG,iBAAkBnK,KAAKo5C,eAAgBp5C,OAM1D64C,EAAUh8C,UAAU2N,oBAAsB,WAClCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAK+4C,cACrC/4C,KAAKtJ,OAAOgU,IAAI,kBAAmB1K,KAAKg5C,iBACxCh5C,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKk5C,gBACvCl5C,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKm5C,mBAC1Cn5C,KAAKtJ,OAAOgU,IAAI,iBAAkB1K,KAAKo5C,gBACvCp5C,KAAKtJ,OAAOiB,KAAK+S,IAAI,yBAA0B1K,KAAKi5C,uBAExDJ,EAAUh8C,UAAUo8C,oBAAsB,SAAUl2C,GAEhDA,EAAY,SAAI,GAEpB81C,EAAUh8C,UAAUk8C,aAAe,WAI/B,IAAK,IAHDM,EAAYr5C,KAAKtJ,OAAOmI,UAAUpB,OAAO,SAAUC,GACnD,OAAQA,EAAE0K,UAAUC,SAAS,iBAExBhR,EAAI,EAAGA,EAAIgiD,EAAU9hD,OAAQF,IAAK,CACvC,IAAIiiD,EAAWD,EAAUhiD,GAAGwgB,uBAAuB,uBAC/C0hC,EAAav5C,KAAKtJ,OAAOiB,KAAKmgB,oBAAoBuhC,EAAUhiD,GAAG8U,aAAa,aAC5ErT,EAAaP,YAAU,aAAcyH,KAAKtJ,OAAOiB,KAAKwE,wBAAwB9E,KAC9EK,oBAAkBoB,KAAgBpB,oBAAkBoB,IACpDL,EAAgBuH,KAAKtJ,OAAQ6iD,EAAW96C,KAAMuB,KAAKtJ,OAAOiB,KAAKwE,2BAC/D6D,KAAKtJ,OAAOiB,KAAKugB,gBAAgBhG,OAAOonC,EAAS,MAI7DT,EAAUh8C,UAAUq8C,eAAiB,SAAUn2C,GAC3C,IAAIy2C,EAAmBz2C,EAAKpE,IAAIkZ,uBAAuB,uBAClDngB,oBAAkB8hD,EAAiB,KACpCx5C,KAAKtJ,OAAOiB,KAAKugB,gBAAgBhG,OAAOsnC,EAAiB,KAGjEX,EAAUh8C,UAAUs8C,kBAAoB,SAAUp2C,GAC9C,IAAItM,EAAauJ,KAAKtJ,QAGtB,IAAK,IAAIW,EAAI,EAAGA,EAAI0L,EAAKs0B,WAAW9/B,OAAQF,IACxC0L,EAAKs0B,WAAWhgC,GAAGmD,MAAMG,QAAUoI,EAAKzH,QAGhDu9C,EAAUh8C,UAAUm8C,gBAAkB,SAAUj2C,GAC5C,IAAItE,EAAOsE,EAAKtE,KACZE,EAAMoE,EAAK02C,cAAcx2B,cAAcy2B,gBAEvCC,EAAc,kBADLjiD,oBAAkB+G,EAAK3F,YAAsC2F,EAAKvE,MAA7BuE,EAAK3F,WAAWoB,OACrB,QAAUuE,EAAKtE,MACxDy/C,EAAYj7C,EAAImM,cAAc,IAAM6uC,GAAavxC,UACjDyxC,KAAcvxC,MAAMvL,KAAK68C,GAAWn8C,OAAO,SAAUq8C,GAAa,OAAQA,IAAcH,IACxFI,EAAQF,EAAS,GAAGtiD,OAEpByiD,EAAc,eADDH,EAASjyC,WAAWU,MAAM,EAAGyxC,GAE9C3pC,YAAUrN,EAAK02C,cAAcx2B,eAAgB+2B,IAEjDnB,EAAUh8C,UAAUu8C,eAAiB,SAAUr2C,GAC3C,GAAyB,cAArBA,EAAKlD,aAAoD,QAArBkD,EAAKlD,YAAuB,CAChE,IAAIo6C,EAASl3C,EAAKpE,IAAI4J,iBAAiB,eAAe,GAAG4D,aAAa,WAElE+tC,GADQnnC,SAASknC,EAAO,IAAM,GACXryC,WACvB7E,EAAKpE,IAAI4J,iBAAiB,eAAe,GAAGyE,aAAa,UAAWktC,GAGxE,IAAK,IADDC,EAAen6C,KAAKtJ,OAAOiB,KAAKgiB,cAAc9a,UACzCxH,EAAI,EAAGA,EAAI8iD,EAAa5iD,OAAQF,IACrC8iD,EAAa9iD,GAAGqI,MAAM,GAAGy1B,SAAU,EAErB58B,YAAU,cAAeyH,KAAKtJ,OAAOiB,MAErC,eAAE,EAApB+5C,EAA4B5pC,KAAM9H,KAAKtJ,OAAOiB,KAAKgiB,cAAc9a,aAQrEg6C,EAAUh8C,UAAU+M,QAAU,WAC1B5J,KAAKwK,uBAEFquC,KCtHPp4C,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GAqBxCq5C,GAA4C,SAAUt4C,GAEtD,SAASs4C,EAA2B1jD,EAAQ2jD,GACxC,IAAIjzC,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,EAAQ2jD,IAAYr6C,KAalD,OAZAoH,EAAMkzC,kBAAmB,EACzBlzC,EAAMmzC,WAAa,EACnBnzC,EAAMozC,SAAW,EACjBpzC,EAAMqzC,aAAc,EAEpBrzC,EAAM4vB,YAAc,EACpB5vB,EAAMurC,UAAY,EAClBvrC,EAAMszC,aAAe,EACrBtzC,EAAMuzC,gBAAiB,EAEvBvzC,EAAMopB,qBAAsB,EAC5BppB,EAAM8C,mBACC9C,EAwbX,OAvcA3G,GAAU25C,EAA4Bt4C,GAiBtCs4C,EAA2Bv9C,UAAU+9C,kBAAoB,WACrD,OAAO,IAAI5U,GAA6BhmC,KAAKtJ,SAEjD0jD,EAA2Bv9C,UAAU+B,cAAgB,SAAU1E,GAC3D,OAAO8F,KAAKtJ,OAAOm+B,cAAcp3B,OAAO,SAAUC,GAAK,OAAOqV,SAASrV,EAAEyO,aAAa,iBAAkB,MAAQjS,IAAU,IAE9HkgD,EAA2Bv9C,UAAUqN,iBAAmB,WACpDlK,KAAKtJ,OAAOyT,GAAG0wC,GAA0B76C,KAAK86C,mBAAoB96C,MAClEA,KAAKtJ,OAAOyT,GAAG4wC,GAAsB/6C,KAAK0G,cAAe1G,OAE7Do6C,EAA2Bv9C,UAAUi+C,mBAAqB,SAAU/3C,GAC5DA,EAAKi4C,QACLh7C,KAAKu6C,WAAa,EAClBv6C,KAAKg3B,WAAa,EAClBh3B,KAAK2yC,SAAW3yC,KAAKtJ,OAAOoa,aAAak7B,SAAW,GAE/CjpC,EAAKu3C,mBACVt6C,KAAKs6C,kBAAmB,IAGhCF,EAA2Bv9C,UAAU6J,cAAgB,SAAU3D,GAC3D,IAAI8+B,EAAU7hC,KAAKtJ,OAAOg+B,aAAa5pB,cAAc,cACrD,GAAI9K,KAAKy6C,aAAez6C,KAAKg3B,YAAc,GAAKh3B,KAAK2yC,UAAY,EAAG,CAChE,GAAI3yC,KAAK2yC,SAAW5vC,EAAKsL,MAAQrO,KAAKtJ,OAAOoa,aAAak7B,SAAU,CAChE,IAAIiP,KAAqBpZ,EAAQpL,UAAYz2B,KAAKtJ,OAAOggC,gBACrDwkB,EAAYD,EAAkBj7C,KAAKtJ,OAAOmI,UAAUtH,OACpD2jD,EAAYn4C,EAAKsL,QACjB6sC,EAAYD,GACPl4C,EAAKsL,MAAQ4sC,IAEtBj7C,KAAKg3B,WAAakkB,EAAYl7C,KAAKtJ,OAAOmI,UAAUtH,OACpDyI,KAAK2yC,SAAWuI,OAGhBl7C,KAAKg3B,YAAc,EACnBh3B,KAAK2yC,UAAY,EAErB3yC,KAAKy6C,aAAc,EAEnBz6C,KAAKwwB,sBACLxwB,KAAKg3B,WAAa,EAClBh3B,KAAK2yC,SAAW3yC,KAAKtJ,OAAOoa,aAAak7B,SAAW,GAExDjpC,EAAKi0B,WAAah3B,KAAKg3B,WACvBj0B,EAAK4vC,SAAW3yC,KAAK2yC,UAEzByH,EAA2Bv9C,UAAU4zB,cAAgB,SAAUn1B,GAC3D,IAAI8L,EAAQpH,KACNA,KAAKtJ,OAAOC,sBAAsBC,oBAAyD+mB,IAA1C3d,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAClF3mC,KAAKtJ,OAAOC,WAAWA,WAAW2tB,SAAqD,KAA1CtkB,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAAgBxvC,EAAgB6I,KAAKtJ,QAuBvHoL,EAAOjF,UAAU4zB,cAAc1zB,KAAKiD,KAAM,OAtB1CA,KAAKtJ,OAAO4E,GAAQ,aAAc0E,KAAKm7C,YAAan7C,MACpDA,KAAKtJ,OAAO4E,GAAQ,wBAAyB0E,KAAKo7C,mBAAoBp7C,MACtEA,KAAKuY,GAAK,WACNnR,EAAMi0C,UAAUC,SAAS,SAAUC,GAAc,OAAOn0C,EAAMo0C,gBAAgBD,IAAgBn0C,EAAMq0C,mBACpGr0C,EAAM1Q,OAAOgU,IAAI,gBAAiBtD,EAAMmR,KAE5CvY,KAAKtJ,OAAOwT,iBAAiB,YAAalK,KAAK07C,eAAe9/B,KAAK5b,OACnEA,KAAKtJ,OAAOwT,iBAAiB,cAAelK,KAAK27C,iBAAiB//B,KAAK5b,OACvEA,KAAKtJ,OAAO4E,GAAQ,qBAAsB0E,KAAK47C,mBAAoB57C,MACnEA,KAAKtJ,OAAOyT,GAAG,gBAAiBnK,KAAKuY,GAAIvY,MACzCA,KAAKtJ,OAAOwT,iBAAiB2O,EAAuB7Y,KAAK67C,iBAAiBjgC,KAAK5b,OAC/EA,KAAKtJ,OAAO4E,GAAQ,mCAAoC0E,KAAKyF,UAAWzF,MACxEA,KAAKtJ,OAAO4E,GAAQ,kCAAmC0E,KAAK0F,SAAU1F,MACtEA,KAAKtJ,OAAO4E,GAAQ,8BAA+B0E,KAAK87C,mBAAoB97C,MAC5EA,KAAKtJ,OAAO4E,GAAQ,aAAc0E,KAAK+7C,iBAAkB/7C,MACzDA,KAAKtJ,OAAO4E,GAAQ,mBAAoB0E,KAAKqmC,QAASrmC,MACtDA,KAAKtJ,OAAO4E,GAAQ,6BAA8B0E,KAAKg8C,WAAYh8C,MACnEA,KAAKtJ,OAAO4E,GAAQ,6BAA8B0E,KAAKi8C,yBAA0Bj8C,MACjFA,KAAKtJ,OAAO4E,GAAQ,iCAAkC0E,KAAKk8C,YAAal8C,MACxEA,KAAKtJ,OAAO4E,GAAQ,qBAAsB0E,KAAKm8C,UAAWn8C,QAMlEo6C,EAA2Bv9C,UAAUs/C,UAAY,SAAUz+C,GAEvDoE,EAAOjF,UAA0B,iBAAEE,KAAKiD,KAAMtC,IAElD08C,EAA2Bv9C,UAAUs+C,YAAc,SAAUz9C,GACzDoE,EAAOjF,UAAUs+C,YAAYp+C,KAAKiD,KAAMtC,GAClCsC,KAAKtJ,OAAOC,sBAAsBC,oBAAyD+mB,IAA1C3d,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAClF3mC,KAAKtJ,OAAOC,WAAWA,WAAW2tB,SAAqD,KAA1CtkB,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAAgBxvC,EAAgB6I,KAAKtJ,UAClHgB,oBAAkBgG,EAAE2Q,SACrBrO,KAAK0yC,aAAeh1C,EAAE2Q,MACjBrO,KAAKtJ,OAAOgb,4BACbrT,WAAS,aAAc2B,MAAMo8C,iBAAiBp8C,KAAKtJ,OAAOggC,eAAiBh5B,EAAE2Q,MAAO,WAGtF3W,oBAAkBgG,EAAEmC,cAA6C,gBAA7BnC,EAAEmC,YAAY+H,YAAiC5H,KAAKwwB,uBAC1FxwB,KAAKq8C,SAAS5lB,UAAY,EAC1Bz2B,KAAKwwB,qBAAsB,KAIvC4pB,EAA2Bv9C,UAAU6zB,YAAc,WAC/C5uB,EAAOjF,UAAU6zB,YAAY3zB,KAAKiD,MAC5BA,KAAKtJ,OAAOC,sBAAsBC,oBAAyD+mB,IAA1C3d,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAClF3mC,KAAKtJ,OAAOC,WAAWA,WAAW2tB,SAAqD,KAA1CtkB,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAAgBxvC,EAAgB6I,KAAKtJ,UACvH2H,WAAS,WAAY2B,MAAMD,QAAQu8C,eAAgB,EACnDt8C,KAAKq7C,UAAY,IAAIkB,GAAyBl+C,WAAS,WAAY2B,MAAM2T,QAAStV,WAAS,WAAY2B,MAAMD,SAC7GC,KAAKq8C,SAAWr8C,KAAKw8C,WAAW1vC,aAGxCstC,EAA2Bv9C,UAAU4/C,cAAgB,SAAUC,EAAMC,EAASpW,EAAMqW,GAChF,OAAK58C,KAAKtJ,OAAOC,sBAAsBC,oBAAyD+mB,IAA1C3d,KAAKtJ,OAAOC,WAAWA,WAAWgwC,MAChF3mC,KAAKtJ,OAAOC,WAAWA,WAAW2tB,SAAqD,KAA1CtkB,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAAexvC,EAAgB6I,KAAKtJ,QACnHsJ,KAAK26C,gBACL36C,KAAK26C,gBAAiB,EACf36C,KAAK06C,eAGZ16C,KAAK06C,aAAe54C,EAAOjF,UAAU4/C,cAAc1/C,KAAKiD,KAAM08C,EAAMC,EAASpW,EAAMqW,GAC5E96C,EAAOjF,UAAU4/C,cAAc1/C,KAAKiD,KAAM08C,EAAMC,EAASpW,EAAMqW,IAInE96C,EAAOjF,UAAU4/C,cAAc1/C,KAAKiD,KAAM08C,EAAMC,EAASpW,EAAMqW,IAG9ExC,EAA2Bv9C,UAAU6+C,eAAiB,WAClD,IACImB,EAAgB,gBACpB,GAAI78C,KAAKtJ,OAAOmI,UAAUtH,SAAWyI,KAAK68C,KAAmBnlD,oBAAkBsI,KAAKtJ,OAAOkI,cAAc,IAAK,CAC1G,IAAIigC,EAAS7+B,KAAKtJ,OAAOkI,cAAc,GAAGyjC,wBAAwBlD,IAC9D2d,EAAU98C,KAAKtJ,OAAOid,QAAQ0uB,wBAAwBlD,IAEtDn/B,KAAK68C,GADLhe,EAAS,EACa7+B,KAAKtJ,OAAOkI,cAAc,GAAGyjC,wBAAwBlD,IAAM2d,EAG3D98C,KAAK6hC,QAAQQ,wBAAwBlD,IACvDn/B,KAAKtJ,OAAOkI,cAAc,GAAGyjC,wBAAwBtb,OAGjEjlB,EAAOjF,UAAsB,UAAEE,KAAKiD,OAExCo6C,EAA2Bv9C,UAAU8+C,iBAAmB,SAAU54C,GAE9DjB,EAAOjF,UAAqB,YAAEE,KAAKiD,KAAM+C,IAE7Cq3C,EAA2Bv9C,UAAU++C,mBAAqB,SAAU74C,GAChE,IAAI/C,KAAKtJ,OAAOm4B,OAAhB,CAGA,IACIkuB,EAAgB,gBAChBrlD,oBAAkBsI,KAAKg9C,SAASD,MAChC/8C,KAAKg9C,SAASD,GAAiB/8C,KAAKq7C,UAAU0B,KAEvB,IAAvBh6C,EAAK7H,eAAuBxD,oBAAkBsI,KAAKtJ,OAAwB,gBAAE6Q,eAAexL,WAAwB,eACpH+F,EAAOjF,UAA0B,iBAAEE,KAAKiD,KAAM+C,KAGtDq3C,EAA2Bv9C,UAAUq/C,YAAc,SAAUxS,GACzDA,EAAOhqC,MAAQM,KAAKi9C,iBAExB7C,EAA2Bv9C,UAAUogD,cAAgB,WAEjD,IAAK,IADDv9C,KACKrI,EAAI,EAAGA,EAAI2I,KAAKtJ,OAAOY,QAAQC,OAAQF,IAC5CqI,EAAMlH,KAAKwH,KAAKk9C,aAAal9C,KAAKtJ,OAAOY,QAAQD,KAErD,OAAOqI,GAEX06C,EAA2Bv9C,UAAUqgD,aAAe,SAAUnxC,EAAKoxC,EAAOC,EAAUC,EAASC,EAAQC,GACjG,IAAIn5C,GACA+wB,QAAWppB,EAAIopB,QACfqoB,YAAe9lD,oBAAkBqU,EAAI6G,OAAS7G,EAAIsH,UAClDoqC,YAAe/lD,oBAAkBqU,EAAIsH,UACrCqqC,MAASP,EACTx9C,OAAUoM,EACVqxC,SAAa1lD,oBAAkB0lD,GAAuBt/B,WAAS6/B,KAApBP,EAC3CC,QAAWA,EACXr3B,SAAYja,EAAIia,SAChB43B,aAAgB7xC,EAAI8xC,iBAAmB9xC,EAAI8xC,kBAC3CN,eAAkBxxC,EAAI8xC,iBAAmB9xC,EAAI8xC,mBAAqBx/C,WAAS0N,EAAI6G,MAAO2qC,IAK1F,OAHIn5C,EAAIo5C,YAAkC,aAApBp5C,EAAIzE,OAAOqD,MAAuBoB,EAAI4hB,YACxD5hB,EAAIlK,MAAQojD,GAET,IAAIQ,OAAK15C,IAEpBg2C,EAA2Bv9C,UAAU4I,UAAY,SAAU/H,GACvD,IAAIw6C,EAAW,yBAA2Bx6C,EAAExD,MAAQ,KAChDA,EAAQ8F,KAAKtJ,OAAOg+B,aAAa5pB,cAAcotC,GAAUxuC,SACzD+B,EAAUzL,KAAKtJ,OAAOyF,wBAAwBjC,GAClDwD,EAAEe,KAAOgN,GAEb2uC,EAA2Bv9C,UAAU6I,SAAW,SAAU3C,GACtD,IAEIkxC,GAAY53C,eAAgB2D,KAAK+9C,YAAa9iD,YAAa+E,KAAK/E,YAAai5C,aAAcl0C,KAAKk0C,cACpGl0C,KAAKtJ,OAAOmc,OAAO,mBAAoBohC,GACvCj0C,KAAK+9C,YAAc9J,EAAQ53C,eAC3B2D,KAAK/E,YAAcg5C,EAAQh5C,YAC3B+E,KAAKk0C,aAAeD,EAAQC,aAC5B,IAAIpsC,EAAO9H,KAAKtJ,OAAOmI,UACnB24C,EAAiB1vC,EAAKvQ,QAAUuQ,EAAK,GAAGqE,aAAa,iBAAmB,EACxEsrC,EAAgB3vC,EAAKvQ,QAAUuQ,EAAKA,EAAKvQ,OAAS,GAAG4U,aAAa,iBAAmB,EACrF6xC,EAAch+C,KAAKtJ,OAAO6xB,kBAAoBivB,GAAkBx3C,KAAKtJ,OAAO6xB,kBAAoBkvB,EACzE,QAArBz3C,KAAK+9C,aAA8C,WAArB/9C,KAAK+9C,cACrC/9C,KAAU,OAAI,GAEO,QAArBA,KAAK+9C,aAA8C,WAArB/9C,KAAK+9C,cAChC/9C,KAAK/E,cAAqC,IAAtB+E,KAAK/E,cAA0D,IAAlC+E,KAAKtJ,OAAO6xB,kBAA4By1B,IAC5Fl8C,EAAOjF,UAAmB,eAAEE,KAAKiD,KAAM+C,IAG/Cq3C,EAA2Bv9C,UAAUohD,iBAAmB,WAEpDn8C,EAAOjF,UAAqB,YAAEE,KAAKiD,OAEvCo6C,EAA2Bv9C,UAAUk/C,iBAAmB,WAGpD/7C,KAAKtJ,OAAOmc,OAAO,uBACO,QAArB7S,KAAK+9C,aAA8C,WAArB/9C,KAAK+9C,cAA6B/9C,KAAU,OAC3E8B,EAAOjF,UAAqB,YAAEE,KAAKiD,OAG3Co6C,EAA2Bv9C,UAAUi/C,mBAAqB,WACtD,IACIja,EAAU7hC,KAAKtJ,OAAOg+B,aAAa5pB,cAAc,cACjD9K,KAAU,OAAK6hC,EAAQ/2B,cAAc,iBACrC9K,KAAKy6C,aAAc,IAG3BL,EAA2Bv9C,UAAUm/C,WAAa,SAAUj5C,GAExDjB,EAAOjF,UAAoB,WAAEE,KAAKiD,KAAM+C,IAE5Cq3C,EAA2Bv9C,UAAUo/C,yBAA2B,SAAUl5C,GAEtEjB,EAAOjF,UAAgC,uBAAEE,KAAKiD,KAAM+C,IAExDq3C,EAA2Bv9C,UAAUqhD,cAAgB,WACjD,IACIrc,EAAU7hC,KAAKtJ,OAAOg+B,aAAa5pB,cAAc,cACjD9K,KAAU,QAAM6hC,EAAQ/2B,cAAc,iBACtC9K,KAAKtJ,OAAOm4B,QAAS,EACrB7uB,KAAKtJ,OAAOo7B,cAGpBsoB,EAA2Bv9C,UAAUwpC,QAAU,SAAU5nC,GAErDqD,EAAOjF,UAAwB,eAAEE,KAAKiD,KAAMvB,IAEhD27C,EAA2Bv9C,UAAUg/C,iBAAmB,SAAU94C,GAC9D,GAAyB,QAArBA,EAAKlD,YAAuB,CAC5B,IAAIo0C,GAAY53C,eAAgB2D,KAAK+9C,YAAa9iD,YAAa+E,KAAK/E,YAAai5C,aAAcl0C,KAAKk0C,cACpGl0C,KAAKtJ,OAAOmc,OAAO,mBAAoBohC,GACvCj0C,KAAK+9C,YAAc9J,EAAQ53C,eAC3B2D,KAAK/E,YAAcg5C,EAAQh5C,YAC3B+E,KAAKk0C,aAAeD,EAAQC,aAGhCpyC,EAAOjF,UAAwB,eAAEE,KAAKiD,KAAM+C,IAEhDq3C,EAA2Bv9C,UAAU4+C,gBAAkB,WACnD,IAAIr0C,EAAQpH,KACZ,OAAO,SAAU2T,EAASuL,EAASrD,EAAWne,EAAGygD,EAAS/6C,GAEtD,IAAKgE,EAAM1Q,OAA0B,oBAAG,CAEhCwS,UAAQk1C,OAASD,GAAW/6C,IAAUgE,EAAkB,cACxDA,EAAM1Q,OAAO8hB,cAEjB,IAAI6lC,EAAyB,MAAjBn/B,EAAQo/B,KAChBzrB,EAAIzrB,EAAMm3C,gBAAgBF,EAAQj3C,EAAMo3C,WAAWC,mBAAmB,GAAK,EAAIr3C,EAAMyS,SAAS6kC,cAAc,GAC1G,GACN,GAAIL,EAAO,CACP,IAAIpgB,EAAM5lC,OAAOC,KAAK8O,EAAMo3C,WAAWG,UAAUpnD,OAAS6P,EAAMyS,SAAS6kC,cAAcnnD,OACnFqnD,EAAUx3C,EAAMo3C,WAAWG,SAAS1gB,EAAM,GAC9CpL,EAAIA,EAAI+rB,EAAUA,EAAU/rB,EAEhCzrB,EAAMy3C,WAAWC,YAAYjsB,EAAGzrB,EAAMmzC,YAClCnzC,EAAM1Q,OAAOgb,4BACbtK,EAAM23C,OAAOF,WAAWC,YAAYjsB,EAAG,MAKvDunB,EAA2Bv9C,UAAU2+C,gBAAkB,SAAUD,GAC7D,IAAIhV,EAAOgV,EAAWyD,SAClBC,EAAYj/C,KAAKtJ,OAAOoa,aAAak7B,SAAW50B,KAAKC,KAAKrX,KAAKtJ,OAAOoa,aAAak7B,SAAW,GAC9FnK,EAAU7hC,KAAKtJ,OAAOg+B,aAAa5pB,cAAc,cACjD0rB,EAAeyoB,EAAYj/C,KAAKtJ,OAAOggC,eACvCwoB,EAAY3D,EAAW4D,OAAOhgB,IAAMn/B,KAAKu6C,WAAc,EACvD6E,EAAahoC,KAAKC,KAAKkkC,EAAW4D,OAAOhgB,IAAMn/B,KAAKu6C,aAAe/jB,EACnEjO,EAAmB,mBACvB,GAAI22B,GAAsC,UAAzB3D,EAAW1/B,WAAkD,SAAzB0/B,EAAW1/B,UAAuB,CACnF,IAAIwjC,IAAYr/C,KAAKtJ,OAAOqwB,OAAOnf,WAAWpJ,QAAQ,KAAO,EAAIwB,KAAKtJ,OAAOqwB,OACzE/mB,KAAKtJ,OAAOid,QAAQ0uB,wBAAwBtb,QAC5C7sB,KAAY2nC,EAAQpL,UAAYz2B,KAAKtJ,OAAOggC,gBAC1Ctf,KAAKC,KAAKgoC,EAAUr/C,KAAKtJ,OAAOggC,gBAChC12B,KAAKtJ,OAAOoa,aAAak7B,SAO/B,GANA9xC,EAASA,EAAQ,EAAKA,EAAQ,EACzBxC,oBAAkBsI,KAAKuoB,MAAkD,IAA5BvoB,KAAKuoB,IAA4BruB,IAAU8F,KAAKuoB,KAC9FruB,EAAQ8F,KAAKuoB,IAEjBvoB,KAAKg3B,WAAa98B,EAClB8F,KAAK2yC,SAAWz4C,EAAQ8F,KAAKtJ,OAAOoa,aAAak7B,SAC7ChsC,KAAK2yC,SAAW3yC,KAAK0yC,aAAc,CACnC,IAAI4M,EAAUt/C,KAAK0yC,aAAe,EAC9B6M,EAAUv/C,KAAK2yC,SAAW2M,EAC9Bt/C,KAAK2yC,SAAW2M,EAChBt/C,KAAKg3B,WAAch3B,KAAKg3B,WAAauoB,EAAW,EAAI,EAAKv/C,KAAKg3B,WAAauoB,EAG/E,IAAIC,EAAQpoC,KAAKC,KAAKkkC,EAAW4D,OAAOhgB,IAAMn/B,KAAKtJ,OAAOggC,gBAC1D8oB,GAAgBx/C,KAAKtJ,OAAOoa,aAAak7B,SACzC,IAAIyT,EAAa,EACjB,IAAK/nD,oBAAkBsI,KAAKtJ,OAAOmI,UAAU2gD,MACxC9nD,oBAAkBsI,KAAKtJ,OAAOg+B,aAAansB,iBAAiB,iBAAiBi3C,IAAS,CAGvFC,GAFWz/C,KAAKtJ,OAAOg+B,aAAansB,iBAAiB,iBAAiBi3C,GACjE10C,cAAc,MAAMqB,aAAa,SAG1C,GAAmB,IAAfszC,EACAz/C,KAAKu6C,WAAagB,EAAW4D,OAAOhgB,QAEnC,CACD,IAAIpY,EAAS/mB,KAAKtJ,OAAOggC,eACzB12B,KAAKu6C,WAAcgB,EAAW4D,OAAOhgB,IAAO8f,EAAYl4B,EAAU,EAC9Dw0B,EAAW4D,OAAOhgB,IAAO8f,EAAYl4B,EAAU,GAAK,QAG3D,GAAIq4B,GAAwC,UAAzB7D,EAAW1/B,WAAkD,SAAzB0/B,EAAW1/B,UAAuB,CAC1F,IAAIo/B,KAAqBpZ,EAAQpL,UAAYz2B,KAAKtJ,OAAOggC,gBACrDgpB,IAAe1/C,KAAKuoB,GAAoBvoB,KAAKtJ,OAAOoa,aAAak7B,SAAYhsC,KAAK0yC,cACjFh7C,oBAAkBsI,KAAKuoB,MAAkD,IAA5BvoB,KAAKuoB,IACnD0yB,IAAoBj7C,KAAKuoB,IAAsBm3B,IAC/CzE,EAAkBj7C,KAAKuoB,IAE3B,IAAI2yB,EAAYD,EAAkBj7C,KAAKtJ,OAAOoa,aAAak7B,SACvDkP,EAAYl7C,KAAK0yC,eACjBwI,EAAYD,GACPj7C,KAAK0yC,aAAeuI,IAE7Bj7C,KAAKg3B,WAAc0oB,EAA8DzE,EAAhDC,EAAYl7C,KAAKtJ,OAAOoa,aAAak7B,SACtEhsC,KAAK2yC,SAAWuI,EACZK,EAAW4D,OAAOhgB,IAAOn/B,KAAKtJ,OAAOggC,eAAiB12B,KAAK0yC,aAC3D1yC,KAAKu6C,WAAav6C,KAAKy8C,cAAclB,EAAW4D,OAAOhgB,IAAK0C,EAAQQ,wBAAwBtb,QAG5F/mB,KAAKu6C,WAAagB,EAAW4D,OAAOhgB,IAG5C,GAAMigB,GAAe7D,EAAW4D,OAAOhgB,IAAOn/B,KAAKtJ,OAAOggC,eAAiB12B,KAAK0yC,iBAChC,UAAzB6I,EAAW1/B,WAAkD,SAAzB0/B,EAAW1/B,UAAuB,CACzF,IAAI8jC,EAAW3/C,KAAK4Z,YAAcvb,WAAS,kBAAmB2B,MAAM+B,MAAM/B,MAAOu7C,EAAW1/B,UAAW0qB,EAAMgV,EAAW4D,SACxHn/C,KAAK4/C,aAAeD,EACpB3/C,KAAKtJ,OAAOmpD,uBAAuB7/C,KAAKtJ,OAAOgb,2BAA6BiuC,EAASjB,kBACrF,IAAIzkC,EAAO0lC,EAAS7lC,WAAa6lC,EAASG,SAAWH,EAAS3lC,SAASC,KAAO0lC,EAAS1lC,KACvFja,KAAKtJ,OAAO2nB,eAAgBvN,cAAgBiJ,YAAaE,KAAU,GACtC,UAAzBshC,EAAW1/B,WAAkD,SAAzB0/B,EAAW1/B,YAC/C8jC,EAASI,MAA2B,0BAAnBJ,EAASI,MAAoC,gBAAkBJ,EAASI,OAE7F//C,KAAKtJ,OAAOmc,OAAO8sC,EAASI,OAASlgD,YAAa,gBAAiB2mC,YAAamZ,EAAUxF,aAAcoB,EAAWpB,iBAG3HC,EAA2Bv9C,UAAUmjD,cAAgB,SAAU5+C,EAAQ6+C,EAAUviD,GAC7E,GAAKsC,KAAKtJ,OAAOC,sBAAsBC,oBAAyD+mB,IAA1C3d,KAAKtJ,OAAOC,WAAWA,WAAWgwC,MAChF3mC,KAAKtJ,OAAOC,WAAWA,WAAW2tB,SAAqD,KAA1CtkB,KAAKtJ,OAAOC,WAAWA,WAAWgwC,KAAexvC,EAAgB6I,KAAKtJ,QACnH2H,WAAS,mBAAoBX,KAC7BsC,KAAK26C,gBAAiB,GAE1B74C,EAAOjF,UAAUmjD,cAAcjjD,KAAKiD,KAAMoB,EAAQ6+C,EAAUviD,OAE3D,CACD,IAAI6oC,EAAO7oC,EAAE8oC,YAAY0Z,cAAoD,MAApCxiD,EAAE8oC,YAAY0Z,aAAa5B,MAChEjgD,WAAS,cAAe2B,MAAMia,MAAQ5b,WAAS,cAAe2B,MAAMia,OAASvc,EAAE8oC,YAAYvsB,KAC3F5b,WAAS,cAAe2B,MAAQtC,EAAE8oC,YAClC2Z,EAAU5Z,EAAKmY,cAAc,GAAM,EACnC0B,EAAUpgD,KAAKu+C,gBAAgB4B,GAC/BhzC,OAAQ,EACZ,GAAInN,KAAKtJ,OAAOgb,2BAA4B,CACxC1R,KAAK++C,OAAOF,WAAWC,YAAYsB,EAAS,GAC5C,IAAI38B,EAAS8iB,EAAKmY,cAClBvxC,EAAQnN,KAAKu+C,gBAAgB96B,EAAOA,EAAOlsB,OAAS,IAAMyI,KAAKu+C,gBAAgB96B,EAAO,GAAK,GAAK,GAChGzjB,KAAK++C,OAAOF,WAAWwB,gBAAgBlzC,GAE3CnN,KAAK6+C,WAAWwB,gBAAgBlzC,EAAQjE,UAAQk1C,MAA8B,SAAtBl1C,UAAQq9B,KAAK+Z,OACrEl/C,EAASpB,KAAKtJ,OAAO4V,cAAc,UAC5BqB,YAAYsyC,GAEnBjgD,KAAKugD,WAAWz1C,cAAc,SAAgB,YAAE1J,GAC3CpB,KAAKs6C,kBAAwC,IAApBt6C,KAAKu6C,WAI/Bv6C,KAAKs6C,kBAAmB,EAHxBj8C,WAAS,aAAc2B,MAAM8+C,YAAYsB,EAASpgD,KAAKu6C,YAK3DrkC,WAAS,WAAYlW,KAAK4/C,aAAe5/C,KAAK4/C,aAAerZ,EAAMvmC,MAC7C,kBAAlBtC,EAAEmC,aAAuE,MAApCnC,EAAE8oC,YAAY0Z,aAAa5B,MAChEt+C,KAAKtJ,OAAOmc,OjChTP,eiCqTT/Q,EAAOjF,UAAmB,UAAEE,KAAKiD,KAAMtC,GAEnCsC,KAAU,QAAMA,KAAKtJ,OAAOg+B,aAAa5pB,cAAc,cAAcA,cAAc,gBACxD,QAArB9K,KAAK+9C,aAA8C,WAArB/9C,KAAK+9C,cACjC/9C,KAAKk0C,cAAgBl0C,KAAKg3B,WAC1Bh3B,KAAKk+C,gBAEAl+C,KAAK/E,aAAe+E,KAAK/E,aAAe,IAC7C+E,KAAU,OAAI,EACdA,KAAKtJ,OAAOm4B,QAAS,IAIjC7uB,KAAKi+C,mBACLn8C,EAAOjF,UAAoB,WAAEE,KAAKiD,MAClC8B,EAAOjF,UAAmC,0BAAEE,KAAKiD,QAGzDo6C,EAA2Bv9C,UAAU2N,oBAAsB,WACnDxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,aAAc1K,KAAKm7C,aACnCn7C,KAAKtJ,OAAOgU,IAAI,gBAAiB1K,KAAKuY,IACtCvY,KAAKtJ,OAAOgU,IAAI,qBAAsB1K,KAAK47C,oBAC3C57C,KAAKtJ,OAAOgU,IAAI,YAAa1K,KAAK07C,gBAClC17C,KAAKtJ,OAAOgU,IAAI,cAAe1K,KAAK27C,kBACpC37C,KAAKtJ,OAAOgU,IAAImwC,GAA0B76C,KAAK86C,oBAC/C96C,KAAKtJ,OAAOgU,IAAIqwC,GAAsB/6C,KAAK0G,eAC3C1G,KAAKtJ,OAAOgU,IAAI,mCAAoC1K,KAAKyF,WACzDzF,KAAKtJ,OAAOgU,IAAI,kCAAmC1K,KAAK0F,UACxD1F,KAAKtJ,OAAOgU,IAAI,8BAA+B1K,KAAK87C,oBACpD97C,KAAKtJ,OAAOgU,IAAI,aAAc1K,KAAK+7C,kBACnC/7C,KAAKtJ,OAAOgU,IAAI,mBAAoB1K,KAAKqmC,SACzCrmC,KAAKtJ,OAAOgU,IAAI,6BAA8B1K,KAAKg8C,YACnDh8C,KAAKtJ,OAAOgU,IAAI,6BAA8B1K,KAAKi8C,0BACnDj8C,KAAKtJ,OAAOgU,IAAI,iCAAkC1K,KAAKk8C,aACvDl8C,KAAKtJ,OAAOgU,IAAI,qBAAsB1K,KAAKm8C,aAExC/B,GACToG,0BAEEjE,GAA0C,SAAUz6C,GAEpD,SAASy6C,IACL,IAAIn1C,EAAmB,OAAXtF,GAAmBA,EAAOC,MAAM/B,KAAMuB,YAAcvB,KAKhE,OAJAoH,EAAMq5C,YAAa,EACnBr5C,EAAMs5C,OAAS,EACft5C,EAAMu5C,QAAU,EAChBv5C,EAAMw5C,MAAQ,EACPx5C,EAqEX,OA5EA3G,GAAU87C,EAA0Bz6C,GASpCy6C,EAAyB1/C,UAAUy+C,SAAW,SAAUuF,EAAUC,GAE9Dh/C,EAAOjF,UAAuB,cAAIwB,WAAS,UAAW2B,MAAMsN,UAAU+0B,wBACtE5d,eAAa9X,IAAItO,WAAS,UAAW2B,MAAMsN,UAAW,SAAUtN,KAAK+gD,sBAAsBF,EAAUC,GAAkB9gD,OAE3Hu8C,EAAyB1/C,UAAUgqC,MAAQ,WACvC7mC,KAAK2gD,QAAU,MAEnBpE,EAAyB1/C,UAAUkkD,sBAAwB,SAAUF,EAAUC,GAC3E,IAAI15C,EAAQpH,KACRghD,EAA8B,WAAtB93C,UAAQq9B,KAAK+Z,KAAoB,IAAM,IAC/CvgD,EAAU,UAKVkhD,GADeC,WAASL,EAAUG,GACpBE,WAASL,EAAU,KAErC,OADA7gD,KAAKD,GAASohD,QAAUnhD,KAAKD,GAASqhD,SAAW,EAC1C,SAAU1jD,GACb,IAAIyhC,EAAM/3B,EAAMrH,GAASshD,iBAAmBj6C,EAAMrH,GAASuN,UAAUmpB,UAAY/4B,EAAE0D,OAAOq1B,UACtFqM,EAAO17B,EAAMrH,GAASshD,iBAAmBj6C,EAAMrH,GAASuhD,UAAU5e,WAAahlC,EAAE0D,OAAOshC,WACxF7mB,EAAYzU,EAAMrH,GAASohD,QAAUhiB,EAAM,OAAS,KACxDtjB,EAAYzU,EAAMrH,GAASqhD,WAAate,EAAOjnB,EAAYzU,EAAMrH,GAASqhD,SAAWte,EAAO,QAAU,OACtG17B,EAAMrH,GAASohD,QAAUhiB,EACzB/3B,EAAMrH,GAASqhD,SAAWte,EAC1B,IAAI5jB,EAAU9X,EAAM84C,aAAarkC,GAC7B0lC,EAAQ,EAcZ,GAbAn6C,EAAMs5C,OAASvhB,EACM,MAAjB/3B,EAAMu5C,UACNY,EAAQn6C,EAAMs5C,OAASt5C,EAAMu5C,SAEjCv5C,EAAMu5C,QAAUv5C,EAAMs5C,OAClBt5C,EAAMw5C,OACNY,aAAap6C,EAAMw5C,OAEvBx5C,EAAMw5C,MAAQa,WAAWr6C,EAAMy/B,MAAO,IACjC0a,EAAQ,KAAOA,GAAS,MAAS7jD,GAAKA,EAAEgkD,iBACzChkD,EAAEikD,aAAc,EAChBjkD,EAAEgkD,mBAE6C,IAA/Ct6C,EAAMrH,GAAS6hD,KAAKpjD,QAAQ0gB,EAAQo/B,MAAxC,CAGA,IAAIl7C,EAAQgE,EAAMhE,MAAMyY,GASxB,GARIqD,EAAQ2iC,SAA4B,MAAjB3iC,EAAQo/B,QACvBl3C,EAAgB,YAAoB,UAAdyU,GAAuC,SAAdA,EAI/CilC,EAAgB15C,EAAa,QAAG8X,EAASrD,GAAasjB,IAAKA,EAAK2D,KAAMA,GAAQ17B,EAAe,UAAGhE,GAHhG09C,EAAgB15C,EAAgB,WAAG8X,EAASrD,GAAasjB,IAAKA,EAAK2D,KAAMA,GAAQ17B,EAAe,UAAGhE,IAMvGA,EAAO,CAEc,MAAjB8b,EAAQo/B,KACH2C,GACAplC,UAAWA,EAAWmjC,SAAU9/B,EAASigC,QAAUhgB,IAAKA,EAAK2D,KAAMA,GACpEqX,aAAcnpB,SAAS6mB,gBAG3BgJ,GAAWhlC,UAAWA,EAAWmjC,SAAU9/B,EAASigC,QAAUhgB,IAAKA,EAAK2D,KAAMA,GAC1EqX,aAAcnpB,SAAS6mB,gBAGnCzwC,EAAe,WAAI,KAGpBm1C,GACTuF,wBC9iBErhD,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBrI,OAAOwI,iBAChBC,wBAA2BpE,OAAS,SAAUiE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIjD,KAAKiD,EAAOA,EAAE9D,eAAea,KAAIgD,EAAEhD,GAAKiD,EAAEjD,MACpDgD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOf,KAAKgB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE9D,UAAkB,OAAN+D,EAAavI,OAAO4I,OAAOL,IAAMG,EAAGlE,UAAY+D,EAAE/D,UAAW,IAAIkE,IAV3C,GA0BxCghD,GAA+B,WAM/B,SAASA,EAAcrrD,GACnBsJ,KAAKgiD,gBAAkB,EACvBhiD,KAAKiiD,cAAgB,EACrBjiD,KAAKtJ,OAASA,EACd+L,OAAKC,OAAOw/C,IACZliD,KAAKkK,mBAsIT,OApIA63C,EAAcllD,UAAUslD,iBAAmB,SAAUp/C,GACjDA,EAAKtE,KAAOuB,KAAKmmC,YAQrB4b,EAAcllD,UAAU+F,cAAgB,WACpC,MAAO,iBAMXm/C,EAAcllD,UAAUqN,iBAAmB,WACnClK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOyT,GAAGstB,EAAiCz3B,KAAKoiD,4BAA6BpiD,MAClFA,KAAKtJ,OAAOyT,GAAGiS,EAAsBpc,KAAKqiD,kBAAmBriD,MAC7DA,KAAKtJ,OAAOyT,GlCsCC,UkCtCkBnK,KAAK4J,QAAS5J,QAMjD+hD,EAAcllD,UAAU2N,oBAAsB,WACtCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI+sB,EAAiCz3B,KAAKoiD,6BACtDpiD,KAAKtJ,OAAOgU,IAAI0R,EAAsBpc,KAAKqiD,mBAC3CriD,KAAKtJ,OAAOgU,IlC0BC,UkC1BmB1K,KAAK4J,WAEzCm4C,EAAcllD,UAAUulD,4BAA8B,SAAUzjD,GAC5DqB,KAAKtJ,OAAOiB,KAAKkb,OAAOgoC,IAA4BP,kBAAkB,IACtEt6C,KAAKsiD,kBAAoB3jD,EAAIjG,OAC7BiG,EAAIjG,OAAOS,SAA0B,aAAfwF,EAAIrD,OAC1B,IAAIgwC,GACAv3B,OAAQ/T,KAAKtJ,OAAO8G,SACpBmB,IAAKA,EAAIA,IACTrD,OAAQqD,EAAIrD,OACZ5C,OAAQiG,EAAIjG,OACZ2V,MAAOrO,KAAKtJ,OAAO8G,SAASjG,QAEhCyI,KAAKtJ,OAAOiB,KAAK2rB,iBACjB,IAAIzjB,EAAcxB,WAAS,gBAAiB2B,KAAKtJ,QAAU,cAAgB,UAC3E2H,WAAS,oBAAqB2B,KAAKtJ,QAAQ0f,mBAAmBk1B,GAAOzrC,YAAaA,KAEtFkiD,EAAcllD,UAAUwlD,kBAAoB,SAAUzW,GAClD,IAAIxkC,EAAQpH,KACRvG,EAAK,IAAI7C,cAAYg1C,EAAe73B,QACpC5a,EAAW,IAAI0I,YAAU,WAAY,WAAY,MAAMsqC,GAAG,WAAY,gBAAYxuB,GAClFhlB,EAAUc,EAAGid,cAAa,IAAIxB,SAAQI,MAAMnc,IAC5CgtC,EAAaxtC,EAAQ8E,OAAO,SAAUC,GACtC,OAAOjF,EAAgB2O,EAAM1Q,OAAQgH,EAAG/E,KAE5CqH,KAAKmmC,WAAaA,EAClBnmC,KAAKtJ,OAAOiB,KAAKkb,OAAOozB,IAAuBxnC,KAAM0nC,IACrD,IAAIoc,GAAWvrB,YAAa,EAAG2b,UAAW,EAAGtkC,MAAOu9B,EAAev9B,OACnErO,KAAKtJ,OAAOiB,KAAKkb,OAAOkoC,GAAsBwH,GAC9C,IAAIvrB,EAAaurB,EAAOvrB,WACpB2b,EAAW4P,EAAO5P,SAEtB,GADA/G,EAAev9B,MAAQ83B,EAAW5uC,QACd,IAAhBy/B,IAAmC,IAAd2b,EAAiB,CACtC,IAAI19B,EAAQ,IAAIC,QACZ62B,EAAO/rC,KAAKtJ,OAAOiB,KAAKmZ,aAAak7B,SAErCF,EAAOC,GADG/rC,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YACf,GAC7B9E,EAAQA,EAAM62B,KAAKA,GAAMG,KAAKF,GAC9BtyC,EAAG9C,WAAW8E,KAAO0qC,EACrByF,EAAe73B,OAASta,EAAGid,aAAazB,OAEvC,CACD,IAAIpV,EAAc+rC,EAAelxB,WAAW7a,YAe5C,IAdoB,cAAhBA,GAA+C,gBAAhBA,GACd,YAAhBA,GAA6BG,KAAKtJ,OAAOsa,mBAAqB2hC,EAAWxM,EAAW5uC,UACrFy/B,EAAa,EACb2b,EAAW3yC,KAAKtJ,OAAOiB,KAAKmZ,aAAak7B,SAAW,EACpDhsC,KAAKtJ,OAAOiB,KAAK+8B,aAAa6B,kBAAkBE,UAAY,EAC5Dz2B,KAAKtJ,OAAOiB,KAAKkb,OAAOgoC,IAA4BG,QAAQ,MAI3DtjD,oBAAkBsI,KAAKsiD,qBAAiE,kBAA1C1W,EAAelxB,WAAW7a,aAC9B,YAA1C+rC,EAAelxB,WAAW7a,aAA6Bm3B,IAAeh3B,KAAKgiD,iBAC3EhrB,EAAah3B,KAAKtJ,OAAOmI,UAAUtH,QAAUo7C,GAAY3b,EAAah3B,KAAKtJ,OAAOmI,UAAUtH,SAC7Fy/B,EAAa,IAEZt/B,oBAAkBsI,KAAKsiD,mBAAoB,CAC5C,IAAIE,EAAgBxiD,KAAKtJ,OAAOmI,UAC5B4jD,EAAStc,EAAW3nC,QAAQwB,KAAKsiD,mBACtBnc,EAAW79B,MAAMm6C,EAAQA,EAASD,EAAcjrD,QAClDA,OAASirD,EAAcjrD,QAAUkrD,GAAU,GAAoB,IAAfzrB,GAGzDA,EADAyrB,GADAA,EAAStc,EAAW5uC,OAASirD,EAAcjrD,QACzB,EAAIkrD,EAAS,EAE/B9P,EAAWxM,EAAW5uC,QAEjB8G,WAAS,gBAAiB2B,KAAKtJ,UACpCsgC,EAAa,EACb2b,EAAW3yC,KAAKtJ,OAAOiB,KAAKmZ,aAAak7B,SAAW,EACpDhsC,KAAKtJ,OAAOiB,KAAKkb,OAAOgoC,IAA4BG,QAAQ,MAI/Dh7C,KAAKtJ,OAAOsa,oBAAqBhR,KAAKtJ,OAAOwC,oBAAwBxB,oBAAkBsI,KAAKsiD,qBAEzFtrB,EADA4U,EAAev9B,MAAQrO,KAAKtJ,OAAOmI,UAAU,GAAGwjC,wBAAwBtb,OAC3D,GAGyB,IAAzB/mB,KAAKgiD,eAAwB,EAAIhiD,KAAKgiD,gBAG3DhiD,KAAKsiD,kBAAoB,KACzB1W,EAAe73B,OAASoyB,EAAW79B,MAAM0uB,EAAY2b,GACrD3yC,KAAKgiD,eAAiBhrB,EACtBh3B,KAAKiiD,aAAetP,EAExB3yC,KAAKtJ,OAAOmc,OAAO,eAAgB+4B,IAQvCmW,EAAcllD,UAAU+M,QAAU,WAC9B5J,KAAKwK,uBAEFu3C,KAGPG,GAA6B,SAAUpgD,GAEvC,SAASogD,EAAYxrD,EAAQ2jD,GACzB,IAAIjzC,EAAQtF,EAAO/E,KAAKiD,KAAMtJ,EAAQ2jD,IAAYr6C,KAGlD,OAFA3B,WAAS,SAAU+I,GAAOsD,IAAI,eAAgBrM,WAAS,sBAAuB+I,GAAQA,GACtF/I,WAAS,SAAU+I,GAAO+C,GAAG,eAAgB/C,EAAMs7C,qBAAsBt7C,GAClEA,EA+BX,OApCA3G,GAAUyhD,EAAapgD,GAOvBogD,EAAYrlD,UAAU+F,cAAgB,WAClC,MAAO,qBAEXs/C,EAAYrlD,UAAU6lD,qBAAuB,WACzC,IAAIC,EAAatkD,WAAS,SAAU2B,MACpC3B,WAAS,SAAU2B,MAAM6C,KAAK,aAAc,kBAAmB,kBAC/D,IAAI+/C,EAAWvkD,WAAS,UAAW2B,MAAM6iD,WAAW,mBAChDF,EAAWjxC,4BACXrT,WAAS,cAAeukD,GACnB7gD,MAAM6gD,GAAWE,aAAWC,OAAQ,IAAIC,wBAAsB3kD,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,SAErH3B,WAAS,cAAeukD,GACnB7gD,MAAM6gD,GAAWE,aAAWG,QAAS,IAAI7I,GAA2B/7C,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,SAEvHA,KAAKkjD,kBAEThB,EAAYrlD,UAAUqmD,eAAiB,WACnC,IAAIP,EAAatkD,WAAS,SAAU2B,MAChCkoB,EAAYy6B,EAAWjsB,eACtBh/B,oBAAkBirD,EAAW57B,SAA0C,iBAAvB47B,EAAiB,SAAsD,IAApCA,EAAW57B,OAAOvoB,QAAQ,OAC9GmkD,EAAWhvC,QAAQnZ,MAAMusB,OAAS47B,EAAW57B,QAEjD,IAGIA,EAAqB,MAHX47B,EAAW57B,OAAOnf,WAAWpJ,QAAQ,KAAO,EAAImkD,EAAW57B,OACrE47B,EAAWhvC,QAAQ0uB,wBAAwBtb,QAClBmB,GAEzB6jB,EAAO4W,EAAW7xC,aAAak7B,SACnC2W,EAAWtkC,eAAgBvN,cAAgBk7B,SAAUD,EAAOhlB,EAASA,EAASglB,KAAU,IAErFmW,GACTiB,iBC5MEC,GAAwB,WAMxB,SAASA,EAAO1sD,GACZ+L,OAAKC,OAAO2gD,UACZrjD,KAAKtJ,OAASA,EACdsJ,KAAKkK,mBAkFT,OAhFAk5C,EAAOvmD,UAAUqN,iBAAmB,WAChClK,KAAKtJ,OAAOyT,GAAG,oBAAqBnK,KAAKm5C,kBAAmBn5C,MAC5DA,KAAKtJ,OAAOyT,GAAG,eAAgBnK,KAAK+4C,aAAc/4C,MAClDA,KAAKtJ,OAAOiB,KAAKwS,GAAG,WAAYnK,KAAKsjD,gBAAiBtjD,OAE1DojD,EAAOvmD,UAAU2N,oBAAsB,WAC/BxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,oBAAqB1K,KAAKm5C,mBAC1Cn5C,KAAKtJ,OAAOgU,IAAI,eAAgB1K,KAAK+4C,cACrC/4C,KAAKtJ,OAAOiB,KAAK+S,IAAI,WAAY1K,KAAKsjD,mBAE1CF,EAAOvmD,UAAUs8C,kBAAoB,SAAUp2C,GAC3C,IAEI+E,EACAy7C,EAHAvrB,EAAch4B,KAAKtJ,OAAOyY,qBAC1Bq0C,EAAaxjD,KAAKtJ,OAAOmI,UAGzBs3B,EAAUn2B,KAAKtJ,OAAO0b,4BAA8B,GACpDpS,KAAKtJ,OAAO2b,6BAA+B,EAC3C8jB,IACAotB,EAAkBvjD,KAAKtJ,OAAO2hC,qBAAqB56B,OAAO,SAAUC,GAChE,OAAOA,EAAEoN,cAAc,kBAAoB/H,EAAKrK,OAAOwB,MAAQ,SAAW6I,EAAKrK,OAAOyB,MAAQ,OASlG2N,EANC/E,EAAKs0B,WAAW9/B,OAMVwL,EAAKs0B,WALLW,EAAYv6B,OAAO,SAAUC,GAChC,OAAOA,EAAEoN,cAAc,kBAAoB/H,EAAKrK,OAAOwB,MAAQ,SAAW6I,EAAKrK,OAAOyB,MAAQ,MAMtG,IAAK,IAAI9C,EAAI,EAAGA,EAAIyQ,EAAKvQ,OAAQF,IAAK,CAClC,IAAIosD,EAAQzjD,KAAKtJ,OAAOiB,KAAKmgB,oBAAoBhQ,EAAKzQ,GAAG8U,aAAa,aAAa1N,KACnFqJ,EAAKzQ,GAAGmD,MAAMG,QAAUoI,EAAKzH,OACzB66B,IACAotB,EAAgBlsD,GAAGmD,MAAMG,QAAUoI,EAAKzH,QAE5C,IAAIooD,EAAgC,SAAhB3gD,EAAKzH,OAAoB,8CACvC,4CACN,GAAIkoD,EAAW17C,EAAKzQ,GAAGqS,UAAUoB,cAAc44C,GAAgB,CAE3D,IAAK,IADD3qB,KACKE,EAAM,EAAGA,EAAMjB,EAAYzgC,OAAQ0hC,IACpCjB,EAAYiB,GAAKnuB,cAAc,kBAAoB24C,EAAMvpD,MAAQ,SAAWupD,EAAMtpD,MAAQ,KAC1F4+B,EAAKvgC,KAAKw/B,EAAYiB,IAG1BF,EAAKxhC,QACLyI,KAAKm5C,mBAAoB9hB,WAAY0B,EAAMz9B,OAAQyH,EAAKzH,YAKxE8nD,EAAOvmD,UAAUymD,gBAAkB,SAAU5lD,GACrCmN,eAAanN,EAAE0D,OAAQ,cACvBpB,KAAKtJ,OAAOiB,KAAKkE,aAAaqzB,qBAAyD,SAAlClvB,KAAKtJ,OAAOmF,aAAaC,MAC9EkE,KAAKtJ,OAAOiB,KAAKoE,WAAWs2B,UAAUxnB,eAAanN,EAAE0D,OAAQ,WAGrEgiD,EAAOvmD,UAAUk8C,aAAe,WACP/4C,KAAKtJ,OAAOkJ,aAAanC,OAAO,SAAUC,GAC3D,OAAOA,EAAElG,eAEMD,QAAUyI,KAAKtJ,OAAOitD,cAAgB3jD,KAAKtJ,OAAOuC,eACjEmX,YAAUpQ,KAAKtJ,OAAOid,QAAQkE,uBAAuB,UAAU,IAAK,qBAG5EurC,EAAOvmD,UAAU+M,QAAU,WACvB5J,KAAKwK,uBAQT44C,EAAOvmD,UAAU+F,cAAgB,WAC7B,MAAO,UAEJwgD,KC7FPQ,GAA+B,WAM/B,SAASA,EAAcltD,GACnB+L,OAAKC,OAAOmhD,iBACZ7jD,KAAKtJ,OAASA,EA8BlB,OArBAktD,EAAc/mD,UAAU+1B,kBAAoB,SAAUkxB,EAAGC,GACrD,OAAO/jD,KAAKtJ,OAAOiB,KAAKo7B,oBAAoBH,kBAAkBkxB,EAAGC,IAQrEH,EAAc/mD,UAAU+M,QAAU,aASlCg6C,EAAc/mD,UAAU+F,cAAgB,WACpC,MAAO,iBAEJghD,KCjCPI,GAAgC,WAMhC,SAASA,EAAettD,GACpBsJ,KAAKtJ,OAASA,EACd+L,OAAKC,OAAOuhD,kBACZjkD,KAAKkK,mBA+RT,OAvRA85C,EAAennD,UAAU+F,cAAgB,WACrC,MAAO,kBAMXohD,EAAennD,UAAUqN,iBAAmB,WACxClK,KAAKtJ,OAAOyT,GAAGiS,EAAsBpc,KAAKkkD,mBAAoBlkD,MAC9DA,KAAKtJ,OAAOyT,GAAG,yBAA0BnK,KAAKmkD,qBAAsBnkD,MACpEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,kBAAmBnK,KAAKokD,sBAAuBpkD,MACnEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,wBAAyBnK,KAAKqkD,oBAAqBrkD,MACvEA,KAAKtJ,OAAOiB,KAAKwS,GAAG,uBAAwBnK,KAAKskD,WAAYtkD,MAC7DA,KAAKtJ,OAAOiB,KAAKwS,GAAG,gBAAiBnK,KAAKszC,aAActzC,OAM5DgkD,EAAennD,UAAU2N,oBAAsB,WACvCxK,KAAKtJ,OAAO+T,cAGhBzK,KAAKtJ,OAAOgU,IAAI,yBAA0B1K,KAAKmkD,sBAC/CnkD,KAAKtJ,OAAOiB,KAAK+S,IAAI,kBAAmB1K,KAAKokD,uBAC7CpkD,KAAKtJ,OAAOiB,KAAK+S,IAAI,wBAAyB1K,KAAKqkD,qBACnDrkD,KAAKtJ,OAAOgU,IAAI0R,EAAsBpc,KAAKkkD,oBAC3ClkD,KAAKtJ,OAAOiB,KAAK+S,IAAI,uBAAwB1K,KAAKskD,YAClDtkD,KAAKtJ,OAAOiB,KAAK+S,IAAI,gBAAiB1K,KAAKszC,gBAU/C0Q,EAAennD,UAAUsnD,qBAAuB,SAAUphD,GAWtD,IAAK,IAVD0xC,EAAaz0C,KAAKtJ,OAAOiB,KAAKghB,gBAG9B4rC,EAAiBvkD,KAAKtJ,OAAOiB,KAAK49C,qBAA4B,eAC9DiP,EAAc,IAAIC,cAAYF,EAAgB,KAAMvkD,KAAKtJ,OAAOiB,MAChEmQ,EAAO9H,KAAKtJ,OAAOmI,UACnBkzB,EAAWhvB,EAAK7I,QAAU4N,EAAKvQ,OAAS,EAAI,QAAU,SACtD29B,EAAOl1B,KAAKtJ,OAAOiB,KAAKiI,aACxB8kD,EAAkB1kD,KAAKtJ,OAAOiB,KAAK49C,qBAAiC,aAAExyC,EAAK8G,UAAW9G,GACtF4hD,KACKttD,EAAI,EAAGA,EAAIqtD,EAAgBntD,OAAQF,IACxCstD,EAAiBnsD,KAAKgsD,EAAYn+B,OAAOq+B,EAAgBrtD,GAAI69B,IAEjEuf,EAAWt3C,OAAO4E,MAAM0yC,GAAa1xC,EAAK7I,MAAQ,EAAG,GAAGX,OAAOmrD,IAC/D,IAASrtD,EAAI,EAAGA,EAAIstD,EAAiBptD,OAAQF,IACxB,UAAb06B,EACAjqB,EAAK/E,EAAK7I,MAAQ7C,GAAG06B,GAAU4yB,EAAiBttD,IAGhDyQ,EAAK/E,EAAK7I,MAAQ7C,EAAI,GAAG06B,GAAU4yB,EAAiBttD,IAExDyQ,EAAK3K,OAAO4F,EAAK7I,MAAQ,EAAI7C,EAAG,EAAGstD,EAAiBttD,IAExD69C,gBAAcl1C,KAAKtJ,OAAOiB,KAAMqI,KAAKtJ,OAAOiB,KAAKghB,gBAAiB3Y,KAAKtJ,OAAOiB,KAAKkH,UAAW,IAOlGmlD,EAAennD,UAAUy2C,aAAe,WACpC,GAAItzC,KAAKtJ,OAAOoxB,uBAAuBmtB,cAAgBv9C,oBAAkBsI,KAAKtJ,OAAOqF,YAAa,CAE9FiE,KAAKtJ,OAAOqF,WAAsB,YAAEiE,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOmI,UAAWmB,KAAKtJ,OAAOyF,yBAChG6D,KAAKtJ,OAAOuI,oBACZe,KAAKtJ,OAAOqF,WAAsB,YAAEiE,KAAKtJ,OAAOiB,KAAKhB,WAAYqJ,KAAKtJ,OAAOyY,qBAAsBnP,KAAKtJ,OAAOyF,2BAa3H6nD,EAAennD,UAAUqnD,mBAAqB,SAAUtY,GACpD,IAAInyC,EAAK,IAAI7C,cAAYg1C,EAAe73B,QACpC5a,EAAW,IAAI0I,YAAU,WAAY,WAAY,MAAMsqC,GAAG,WAAY,gBAAYxuB,GAClFwoB,EAAa1sC,EAAGid,cAAa,IAAIxB,SAAQI,MAAMnc,IAC/CuhB,EAAarc,WAAS,aAAcutC,EAAelxB,YAGnDzhB,IAFUoF,WAAS,UAAW2B,KAAKtJ,OAAOiB,KAAK49C,sBAC7BxvB,KAAK,SAAU9rB,GAAS,OAAOA,IAAUygB,EAAW7a,iBACrCG,KAAKtJ,OAAOuC,cAGjD,GAFA+G,KAAKmmC,WAAaA,EAClByF,EAAev9B,MAAQ83B,EAAW5uC,OAC9B8G,WAAS,aAAcutC,EAAelxB,YACtCkxB,EAAe73B,OAASoyB,MAEvB,CACD,IAAIlxB,EAAQ,IAAIC,QACZ8/B,EAAUh1C,KAAKtJ,OAAOoxB,uBAAuBmtB,YAC7CD,GAAWh1C,KAAKtJ,OAAOoxB,uBAAuB88B,cAAgB5kD,KAAKtJ,OAAOoxB,uBAAuB+8B,YACjG7kD,KAAKtJ,OAAOoxB,uBAAuB88B,cAAgB5kD,KAAKtJ,OAAOoxB,uBAAuB+8B,WAE1F,IAAI9Y,EAAO9yC,EACP+G,KAAKtJ,OAAOoa,aAAak7B,SAAWhsC,KAAKtJ,OAAOoxB,uBAAuB88B,cACvE5kD,KAAKtJ,OAAOoa,aAAak7B,SACzB9sB,EAAUlf,KAAKtJ,OAAOiB,KAAKmZ,aAAaiJ,YAC5C,GAAKriB,oBAAkBgjB,GAkBnBzF,EAAQA,EAAMgF,KAAKiF,EAAS6sB,OAlBI,CAChC,IAAImP,EAAY78C,WAAS,YAAa2B,KAAKtJ,OAAOiB,KAAK49C,sBACnDuP,EAAazmD,WAAS,aAAc2B,KAAKtJ,OAAOiB,KAAK49C,sBACzD,GAAKP,GAAsC,WAA3Bt6B,EAAW7a,YAQvBoV,EAHK+/B,GAAsC,WAA3Bt6B,EAAW7a,aACC,SAA3B6a,EAAW7a,aAAgD,QAAtB6a,EAAWpf,QACjD2Z,EAAQA,EAAM62B,KAAKgZ,IACL7Y,KAAKjsC,KAAKtJ,OAAOoxB,uBAAuB88B,cAAgB5kD,KAAKtJ,OAAOoa,aAAak7B,UAGvF/2B,EAAMgF,KAAKiF,EAAS6sB,OAXqB,CACjD,IAAID,EAAOoP,EAAYxgC,EAAWjc,KAAKlH,OAAS,EAC5C00C,EAAOvxB,EAAWjc,KAAKlH,OAC3B0d,EAAQA,EAAM62B,KAAKA,GAAMG,KAAKA,IActCxyC,EAAG9C,WAAW8E,KAAO0qC,EAChB6O,GAAYt9C,oBAAkBgjB,IAA0C,SAA3BA,EAAW7a,aAAgD,QAAtB6a,EAAWpf,OAI9FswC,EAAe73B,OAASta,EAAGid,aAAazB,GAHxC22B,EAAe73B,QAAU2G,EAAWjc,MAM5CuB,KAAKtJ,OAAOmc,OAAO,eAAgB+4B,IAUvCoY,EAAennD,UAAUwnD,oBAAsB,SAAUthD,GACrD,IACIuyC,EAA0Bt1C,KAAKtJ,OAAOiB,KAAK49C,qBAAiC,wBAC5Ej9C,EAAOD,OAAOC,KAAKg9C,GACvB,GAA2B,WAAvBvyC,EAAKrF,EAAEmC,aAA4BkD,EAAKgR,OAAOxc,OAAS,EACxD,IAAK,IAAIF,EAAI,EAAGA,EAAI0L,EAAKgR,OAAOxc,OAAQF,IACpCi+C,EAAwBh9C,EAAKA,EAAKf,OAAS,IAAIiB,KAAKuK,EAAKgR,OAAO1c,KAU5E2sD,EAAennD,UAAUunD,sBAAwB,SAAUrhD,GACvD,GAAyB,WAArBA,EAAKlD,YAA0B,CAC/B,IAAIiI,EAAO9H,KAAKtJ,OAAOiB,KAAKghB,gBACxBosC,EAAU/kD,KAAKtJ,OAAOmI,UACtBJ,EAAOsE,EAAKtE,gBAAgB/B,MAAQqG,EAAKtE,MAAQsE,EAAKtE,MACtDumD,EAAWhlD,KAAKtJ,OAAOiB,KAAK4D,0BAA0B,GAE1D,GADAyE,KAAKilD,WAAWF,EAASj9C,EAAMrJ,EAAMumD,GAAU,GAC3ChlD,KAAKtJ,OAAOuI,mBAAqB,EAAG,CACpC,IAAIkzC,EAAQnyC,KAAKtJ,OAAOiB,KAAKo9C,uBACzBmQ,EAAWllD,KAAKtJ,OAAOiB,KAAKygC,iBAChCp4B,KAAKilD,WAAWC,EAAU/S,EAAO1zC,EAAMumD,MAcnDhB,EAAennD,UAAUooD,WAAa,SAAUF,EAASj9C,EAAMrJ,EAAMumD,EAAUhqB,GAgB3E,IAAK,IAfD5zB,EAAQpH,KAERpD,EAAU,SAAUvF,GACpByQ,EAAKrK,OAAO,SAAUC,EAAGxD,GACrB,GAAIwD,EAAEe,KAAKumD,KAAcvmD,EAAKpH,GAAG2tD,GAAW,CACxC,GAAIhqB,EAAU,CACV,IAAI/gB,EAAO7C,KAAKC,MAAMnd,EAAQ,GAAKkN,EAAM1Q,OAAOiB,KAAKmZ,aAAak7B,UAClE5kC,EAAM1Q,OAAOiB,KAAK49C,qBAAiD,6BAAEt7B,EAAM/f,GAE/E4N,EAAK3K,OAAOjD,EAAO,GACnBisB,SAAO4+B,EAAQ7qD,IACf6qD,EAAQ5nD,OAAOjD,EAAO,OAIzB7C,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAC7BuF,EAAQvF,IAMhB2sD,EAAennD,UAAUynD,WAAa,SAAUlQ,GAC5C,IAKI+Q,EAJAzqC,EAAa05B,EAAUrxC,KAAKrF,EAC5BiB,EAAMy1C,EAAUz1C,IAChB4lD,EAAiBvkD,KAAKtJ,OAAOiB,KAAK49C,qBAA4B,eAC9DiP,EAAc,IAAIC,cAAYF,EAAgB,KAAMvkD,KAAKtJ,OAAOiB,MAEhEyiB,EAAcpa,KAAKtJ,OAAOyF,wBAC1BipD,EAAchR,EAAUiR,UAAYrlD,KAAKtJ,OAAOiB,KAAKygC,iBACnDp4B,KAAKtJ,OAAOiB,KAAKk9B,cAEnBswB,EADA/Q,EAAUkR,cACFtlD,KAAKtJ,OAAOid,QAAQ7I,cAAc,2BAA2BA,cAAc,SAG1E9K,KAAKtJ,OAAOiB,KAAK4tD,eAAmEnR,EAAUiR,UACjGrlD,KAAKtJ,OAAOiB,KAAK6tD,2BAA2B16C,cAAc,SAC1D9K,KAAKtJ,OAAOiB,KAAK8tD,0BAA0B36C,cAAc,SAFpB9K,KAAKtJ,OAAOg+B,aAAa5pB,cAAc,SAIlF9K,KAAKtJ,OAAOsI,aACZmmD,EAAQ/Q,EAAUsR,cAAsE,QAAtD1lD,KAAKtJ,OAAOiB,KAAK49C,qBAAqB11C,cAChEu0C,EAAUsR,cAAsE,QAAtD1lD,KAAKtJ,OAAOiB,KAAK49C,qBAAqB11C,YACjEG,KAAKtJ,OAAOiB,KAAK4tD,eACdnR,EAAUiR,UAAYrlD,KAAKtJ,OAAOiB,KAAKguD,0BAA0B76C,cAAc,SAC3EspC,EAAUkR,cAAgBtlD,KAAKtJ,OAAOid,QAAQ7I,cAAc,0BAA0BA,cAAc,SAChG9K,KAAKtJ,OAAOiB,KAAKiuD,yBAAyB96C,cAAc,SAHjC9K,KAAKtJ,OAAOwV,mBAAmBpB,cAAc,SAGDq6C,GAKzF,IAAK,IAHDpzB,EAEAqjB,EAAcp1C,KAAKtJ,OAAOqF,WAAsB,YAC3C1E,EAAI,EAAGA,EAAIsH,EAAIpH,OAAQF,IAAK,CACjC,IAAIwuD,EAASrB,EAAYn+B,OAAO1nB,EAAItH,GAAI2I,KAAKtJ,OAAOiB,KAAKiI,cAC1B,SAA3B8a,EAAW7a,aAAgD,QAAtB6a,EAAWpf,QACW,IAAvD+C,WAAS,gBAAiB2B,KAAKtJ,OAAOqF,aAAkE,QAA5CiE,KAAKtJ,OAAOmF,aAAaQ,eACrC,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAA0E,UAA5C2D,KAAKtJ,OAAOmF,aAAaQ,gBAChF01B,EAAW,QACXqjB,GAAeh8C,EAAoBghB,EAAYg7B,EAAc,IAAI79C,OACjB,UAA5CyI,KAAKtJ,OAAOmF,aAAaQ,iBACzB+4C,GAAe,GAEnBgQ,EAAYhQ,GAAarjB,GAAU8zB,IAEc,UAA5C7lD,KAAKtJ,OAAOmF,aAAaQ,iBAC9B01B,EAAW,SACXqzB,EAAYplD,KAAKtJ,OAAOqF,WAAsB,aAAGg2B,GAAU8zB,IAGd,WAA5C7lD,KAAKtJ,OAAOmF,aAAaQ,eAC9B8oD,EAAMx3C,YAAYk4C,GAGlBV,EAAMv4C,aAAai5C,EAAQV,EAAM5uB,mBAGL,WAA3B7b,EAAW7a,aAChBslD,EAAMx3C,YAAYk4C,GAG1BzR,EAAUprC,QAAS,GAQvBg7C,EAAennD,UAAU+M,QAAU,WAC/B5J,KAAKwK,uBAEFw5C,0BrChTO,oCAIK,wHAYG,4IAcF,sCAID,uCAIC,sJAcA,2BAEC,wCAEY,qSAgCb,kDAIQ,sDAIX,mHAUc,wDAId,4CAIA,yBAEK,sFAUL"}