@syncfusion/ej2-inputs 19.2.59 → 19.3.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/ej2-inputs.umd.min.js +2 -2
- package/dist/ej2-inputs.umd.min.js.map +1 -1
- package/dist/es6/ej2-inputs.es2015.js +346 -606
- package/dist/es6/ej2-inputs.es2015.js.map +1 -1
- package/dist/es6/ej2-inputs.es5.js +358 -623
- package/dist/es6/ej2-inputs.es5.js.map +1 -1
- package/dist/global/ej2-inputs.min.js +2 -2
- package/dist/global/ej2-inputs.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/helpers/e2e/colorpickerHelper.d.ts +23 -0
- package/helpers/e2e/colorpickerHelper.js +53 -0
- package/package.json +9 -9
- package/src/maskedtextbox/maskedtextbox/maskedtextbox-model.d.ts +1 -4
- package/src/maskedtextbox/maskedtextbox/maskedtextbox.d.ts +0 -3
- package/src/maskedtextbox/maskedtextbox/maskedtextbox.js +2 -11
- package/src/numerictextbox/numerictextbox-model.d.ts +1 -10
- package/src/numerictextbox/numerictextbox.d.ts +0 -9
- package/src/numerictextbox/numerictextbox.js +51 -95
- package/src/slider/slider.d.ts +1 -0
- package/src/slider/slider.js +10 -1
- package/src/textbox/textbox-model.d.ts +1 -4
- package/src/textbox/textbox.d.ts +0 -3
- package/src/textbox/textbox.js +90 -112
- package/src/uploader/uploader-model.d.ts +1 -26
- package/src/uploader/uploader.d.ts +0 -40
- package/src/uploader/uploader.js +210 -407
- package/styles/bootstrap-dark.css +14 -6
- package/styles/bootstrap.css +14 -6
- package/styles/bootstrap4.css +22 -12
- package/styles/bootstrap5-dark.css +7548 -0
- package/styles/bootstrap5-dark.scss +7 -0
- package/styles/bootstrap5.css +7548 -0
- package/styles/bootstrap5.scss +7 -0
- package/styles/color-picker/_bootstrap5-dark-definition.scss +1 -0
- package/styles/color-picker/_bootstrap5-definition.scss +134 -0
- package/styles/color-picker/_layout.scss +26 -3
- package/styles/color-picker/_tailwind-dark-definition.scss +1 -132
- package/styles/color-picker/_tailwind-definition.scss +25 -24
- package/styles/color-picker/_theme.scss +33 -0
- package/styles/color-picker/bootstrap5-dark.css +964 -0
- package/styles/color-picker/bootstrap5-dark.scss +11 -0
- package/styles/color-picker/bootstrap5.css +964 -0
- package/styles/color-picker/bootstrap5.scss +11 -0
- package/styles/color-picker/icons/_bootstrap5-dark.scss +1 -0
- package/styles/color-picker/icons/_bootstrap5.scss +10 -0
- package/styles/fabric-dark.css +15 -7
- package/styles/fabric.css +15 -7
- package/styles/highcontrast-light.css +15 -7
- package/styles/highcontrast.css +16 -8
- package/styles/input/_bootstrap5-dark-definition.scss +1 -0
- package/styles/input/_bootstrap5-definition.scss +320 -0
- package/styles/input/_definition.scss +217 -0
- package/styles/input/_fabric-definition.scss +1 -1
- package/styles/input/_highcontrast-definition.scss +1 -1
- package/styles/input/_layout.scss +196 -157
- package/styles/input/_material-dark-definition.scss +133 -120
- package/styles/input/_material-definition.scss +1 -0
- package/styles/input/_tailwind-dark-definition.scss +1 -315
- package/styles/input/_tailwind-definition.scss +50 -47
- package/styles/input/_theme.scss +92 -59
- package/styles/input/bootstrap-dark.css +12 -3
- package/styles/input/bootstrap.css +12 -3
- package/styles/input/bootstrap4.css +15 -3
- package/styles/input/bootstrap5-dark.css +4670 -0
- package/styles/input/bootstrap5-dark.scss +4 -0
- package/styles/input/bootstrap5.css +4670 -0
- package/styles/input/bootstrap5.scss +4 -0
- package/styles/input/fabric-dark.css +12 -3
- package/styles/input/fabric.css +13 -4
- package/styles/input/highcontrast-light.css +12 -3
- package/styles/input/highcontrast.css +13 -4
- package/styles/input/icons/_bootstrap5-dark.scss +1 -0
- package/styles/input/icons/_bootstrap5.scss +17 -0
- package/styles/input/icons/_material-dark.scss +32 -0
- package/styles/input/icons/_tailwind-dark.scss +1 -17
- package/styles/input/material-dark.css +2320 -201
- package/styles/input/material.css +12 -3
- package/styles/input/tailwind-dark.css +14 -5
- package/styles/input/tailwind.css +14 -5
- package/styles/maskedtextbox/_bootstrap5-dark-definition.scss +1 -0
- package/styles/maskedtextbox/_bootstrap5-definition.scss +7 -0
- package/styles/maskedtextbox/_tailwind-dark-definition.scss +1 -6
- package/styles/maskedtextbox/_tailwind-definition.scss +4 -1
- package/styles/maskedtextbox/bootstrap5-dark.css +33 -0
- package/styles/maskedtextbox/bootstrap5-dark.scss +4 -0
- package/styles/maskedtextbox/bootstrap5.css +33 -0
- package/styles/maskedtextbox/bootstrap5.scss +4 -0
- package/styles/material-dark.css +2337 -218
- package/styles/material.css +14 -5
- package/styles/numerictextbox/_bootstrap5-dark-definition.scss +1 -0
- package/styles/numerictextbox/_bootstrap5-definition.scss +3 -0
- package/styles/numerictextbox/_tailwind-dark-definition.scss +1 -5
- package/styles/numerictextbox/_tailwind-definition.scss +1 -1
- package/styles/numerictextbox/bootstrap5-dark.css +48 -0
- package/styles/numerictextbox/bootstrap5-dark.scss +5 -0
- package/styles/numerictextbox/bootstrap5.css +48 -0
- package/styles/numerictextbox/bootstrap5.scss +5 -0
- package/styles/numerictextbox/icons/_bootstrap5-dark.scss +1 -0
- package/styles/numerictextbox/icons/_bootstrap5.scss +12 -0
- package/styles/numerictextbox/icons/_tailwind-dark.scss +1 -12
- package/styles/slider/_bootstrap5-dark-definition.scss +1 -0
- package/styles/slider/_bootstrap5-definition.scss +90 -0
- package/styles/slider/_fabric-dark-definition.scss +2 -2
- package/styles/slider/_layout.scss +294 -69
- package/styles/slider/_material-dark-definition.scss +1 -1
- package/styles/slider/_tailwind-dark-definition.scss +1 -80
- package/styles/slider/_tailwind-definition.scss +32 -27
- package/styles/slider/_theme.scss +14 -6
- package/styles/slider/bootstrap-dark.css +2 -3
- package/styles/slider/bootstrap.css +2 -3
- package/styles/slider/bootstrap4.css +7 -9
- package/styles/slider/bootstrap5-dark.css +749 -0
- package/styles/slider/bootstrap5-dark.scss +5 -0
- package/styles/slider/bootstrap5.css +749 -0
- package/styles/slider/bootstrap5.scss +5 -0
- package/styles/slider/fabric-dark.css +3 -4
- package/styles/slider/fabric.css +2 -3
- package/styles/slider/highcontrast-light.css +3 -4
- package/styles/slider/highcontrast.css +3 -4
- package/styles/slider/material-dark.css +16 -16
- package/styles/slider/material.css +2 -2
- package/styles/slider/tailwind-dark.css +9 -8
- package/styles/slider/tailwind.css +7 -3
- package/styles/tailwind-dark.css +23 -13
- package/styles/tailwind.css +21 -8
- package/styles/textbox/_bootstrap5-dark-definition.scss +1 -0
- package/styles/textbox/_bootstrap5-definition.scss +0 -0
- package/styles/textbox/_tailwind-dark-definition.scss +1 -0
- package/styles/textbox/bootstrap5-dark.css +0 -0
- package/styles/textbox/bootstrap5-dark.scss +4 -0
- package/styles/textbox/bootstrap5.css +0 -0
- package/styles/textbox/bootstrap5.scss +4 -0
- package/styles/uploader/_bootstrap5-dark-definition.scss +1 -0
- package/styles/uploader/_bootstrap5-definition.scss +216 -0
- package/styles/uploader/_definition.scss +142 -0
- package/styles/uploader/_tailwind-dark-definition.scss +1 -216
- package/styles/uploader/_tailwind-definition.scss +21 -21
- package/styles/uploader/_theme.scss +2 -2
- package/styles/uploader/bootstrap5-dark.css +1079 -0
- package/styles/uploader/bootstrap5-dark.scss +6 -0
- package/styles/uploader/bootstrap5.css +1079 -0
- package/styles/uploader/bootstrap5.scss +6 -0
- package/styles/uploader/icons/_bootstrap5-dark.scss +1 -0
- package/styles/uploader/icons/_bootstrap5.scss +34 -0
- package/styles/uploader/icons/_tailwind-dark.scss +1 -35
- package/styles/uploader/material-dark.css +1 -1
- package/.eslintrc.json +0 -244
- package/styles/color-picker/_icons.scss +0 -10
- package/tslint.json +0 -111
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-inputs.min.js","sources":["../../src/maskedtextbox/base/mask-base.js","../../src/input/input.js","../../src/numerictextbox/numerictextbox.js","../../src/maskedtextbox/maskedtextbox/maskedtextbox.js","../../src/slider/slider.js","../../src/form-validator/form-validator.js","../../src/uploader/uploader.js","../../src/color-picker/color-picker.js","../../src/textbox/textbox.js"],"sourcesContent":["/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]'\n};\n/**\n * Generate required masking elements to the MaskedTextBox from user mask input.\n *\n * @hidden\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 1) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * Apply mask ability with masking elements to the MaskedTextBox.\n *\n * @hidden\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * To wire required events to the MaskedTextBox.\n *\n * @hidden\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n EventHandler.add(this.element, 'mousedown', maskInputMouseDownHandler, this);\n EventHandler.add(this.element, 'mouseup', maskInputMouseUpHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', resetFormHandler, this);\n }\n }\n}\n/**\n * To unwire events attached to the MaskedTextBox.\n *\n * @hidden\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n EventHandler.remove(this.element, 'mousedown', maskInputMouseDownHandler);\n EventHandler.remove(this.element, 'mouseup', maskInputMouseUpHandler);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', resetFormHandler);\n }\n}\n/**\n * To bind required events to the MaskedTextBox clearButton.\n *\n * @hidden\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide')) {\n clear.call(this, e);\n this.value = '';\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\nfunction resetFormHandler() {\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n this.value = this.initInputValue;\n }\n}\n/**\n * To get masked value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * To extract raw value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((this._callPasteHandler || !isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputMouseDownHandler() {\n this.isClicked = true;\n}\nexport function maskInputMouseUpHandler() {\n this.isClicked = false;\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n var inputElement = this.element;\n var startIndex = 0;\n var modelValue = strippedValue.call(this, inputElement);\n var toAllowForward = false;\n var toAllowBackward = false;\n var eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n if (!this.isClicked) {\n triggerFocus.call(this, eventArgs, inputElement);\n }\n if (this.mask) {\n if (!(!(modelValue === null || modelValue === '') || this.floatLabelType === 'Always' ||\n this.placeholder === null || this.placeholder === '')) {\n inputElement.value = this.promptMask;\n }\n setTimeout(function () {\n if (inputElement.selectionStart === _this.promptMask.length ||\n inputElement.value[inputElement.selectionStart] === _this.promptChar) {\n toAllowForward = true;\n }\n else {\n for (var i = inputElement.selectionStart; i < _this.promptMask.length; i++) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowForward = false;\n break;\n }\n }\n else {\n toAllowForward = true;\n break;\n }\n }\n }\n });\n setTimeout(function () {\n var backSelectionStart = inputElement.selectionStart - 1;\n if (backSelectionStart === _this.promptMask.length - 1 ||\n inputElement.value[backSelectionStart] === _this.promptChar) {\n toAllowBackward = true;\n }\n else {\n for (var i = backSelectionStart; i >= 0; i--) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowBackward = false;\n break;\n }\n }\n else {\n toAllowBackward = true;\n break;\n }\n }\n }\n });\n if ((this.isClicked || (this.floatLabelType !== 'Always' &&\n ((modelValue === null || modelValue === '') &&\n (this.placeholder !== null && this.placeholder !== ''))))) {\n for (startIndex = 0; startIndex < this.promptMask.length; startIndex++) {\n if (inputElement.value[startIndex] === this.promptChar) {\n setTimeout(function () {\n if (toAllowForward || toAllowBackward) {\n inputElement.selectionEnd = startIndex;\n inputElement.selectionStart = startIndex;\n }\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: _this.value,\n maskedValue: inputElement.value,\n container: _this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n });\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(this.promptChar))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(this, eventArgs, inputElement);\n }\n this.isClicked = false;\n }\n }\n}\nexport function triggerFocus(eventArgs, inputElement) {\n this.trigger('focus', eventArgs, function (eventArgs) {\n inputElement.selectionStart = eventArgs.selectionStart;\n inputElement.selectionEnd = eventArgs.selectionEnd;\n });\n}\nexport function maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: this.inputObj.container\n };\n this.trigger('blur', this.blurEventArgs);\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n if (Browser.isIE === true && this.element.value === '' && this.floatLabelType === 'Never') {\n return;\n }\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask && !this.readonly) {\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var deleteEndIndex = this.element.selectionEnd;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n sIndex++;\n }\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (event.keyCode === 46 && multipleDel && isDeleted) {\n this.element.selectionStart = this.element.selectionEnd = deleteEndIndex;\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask && !this.readonly) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n if (event.keyCode === 32 && key === ' ' && this.promptChar === ' ') {\n this.element.selectionStart = this.element.selectionEnd = this.element.selectionStart - key.length;\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction triggerMaskChangeEvent(event, oldValue) {\n var prevOnChange = this.isProtectedOnChange;\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false, isInteracted: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteracted = true;\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n this.isProtectedOnChange = true;\n this.value = this.changeEventArgs.value;\n this.isProtectedOnChange = prevOnChange;\n merge(eventArgs, this.changeEventArgs);\n /* istanbul ignore next */\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask && !this.readonly) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n if (!isNullOrUndefined(parentElement)) {\n removeClass([parentElement], ERROR);\n }\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * Validates user input using masking elements '<' , '>' and '|'.\n *\n * @hidden\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * To set updated values in the MaskedTextBox.\n *\n * @hidden\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '' && !(val === null && this.floatLabelType === 'Never' && this.placeholder)) {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * To set updated values in the input element.\n *\n * @hidden\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * Provide mask support to input textbox through utility method.\n *\n * @hidden\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * Gets raw value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * Gets masked value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * Arguments to perform undo and redo functionalities.\n *\n * @hidden\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar maskUndo = new MaskUndo();\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction == undefined || isBindClearAction) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '<input placeholder=\"' + placeholder + '\"/>';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n innerWrapper.appendChild(result[i]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\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, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject, isBlazor } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * <input type='text' id=\"numeric\"/>\n * ```\n * ```typescript\n * <script>\n * var numericObj = new NumericTextBox({ value: 10 });\n * numericObj.appendTo(\"#numeric\");\n * </script>\n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isVue = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n if (!(isBlazor() && this.isServerRendered)) {\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n if (!(isBlazor() && this.isServerRendered)) {\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null && !(isBlazor() && this.isServerRendered)) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (!(isBlazor() && this.isServerRendered)) {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n }\n else {\n this.container = this.element.parentElement;\n this.inputWrapper = { container: this.container };\n this.hiddenInput = this.container.querySelector('input[type=\"hidden\"]');\n if (this.showClearButton) {\n this.inputWrapper.clearButton = this.container.querySelector('.e-clear-icon');\n Input.wireClearBtnEvents(this.element, this.inputWrapper.clearButton, this.inputWrapper.container);\n }\n if (this.showSpinButton) {\n this.spinDown = this.container.querySelector('.' + SPINDOWN);\n this.spinUp = this.container.querySelector('.' + SPINUP);\n this.wireSpinBtnEvents();\n }\n Input.bindInitialEvent({\n element: this.element, buttons: null, customTag: null, floatLabelType: this.floatLabelType, properties: this.properties\n });\n }\n this.wireEvents();\n if (!(isBlazor() && this.isServerRendered)) {\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === \"touchmove\") {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n if (!(isBlazor() && this.isServerRendered)) {\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete', 'tabindex', 'aria-valuemin',\n 'aria-valuemax', 'aria-live', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n _super.prototype.destroy.call(this);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n if (isBlazor()) {\n if (this.showClearButton) {\n this.inputWrapper.clearButton = this.container.querySelector('.e-clear-icon');\n Input.wireClearBtnEvents(this.element, this.inputWrapper.clearButton, this.inputWrapper.container);\n }\n }\n else {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (isBlazor()) {\n if (this.showSpinButton) {\n this.spinDown = this.container.querySelector('.' + SPINDOWN);\n this.spinUp = this.container.querySelector('.' + SPINUP);\n this.wireSpinBtnEvents();\n }\n }\n else {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach } from '@syncfusion/ej2-base';\nimport { removeClass, Browser, closest, isBlazor } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nvar ROOT = 'e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\nvar MASKINPUT_FOCUS = 'e-input-focus';\nvar wrapperAttr = ['title', 'style', 'class'];\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * <input id=\"mask\" type=\"text\" />\n * ```\n * ```typescript\n * <script>\n * var maskObj = new MaskedTextBox({ mask: \"(999) 9999-999\" });\n * maskObj.appendTo('#mask');\n * </script>\n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n /**\n *\n * @param {MaskedTextBoxModel} options - Specifies the MaskedTextBox model.\n * @param {string | HTMLElement | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function MaskedTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initInputValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isClicked = false;\n _this.maskOptions = options;\n return _this;\n }\n /**\n * Gets the component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.blurEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkHtmlAttributes(false);\n if (this.formElement) {\n this.initInputValue = this.value;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Initializes the component rendering.\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n var _this = this;\n if (this.element.tagName.toLowerCase() === 'input') {\n var checkBlazor = isBlazor() && this.isServerRendered;\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n this.updateHTMLAttrToWrapper();\n if (this.element.name === '') {\n this.element.setAttribute('name', this.element.id);\n }\n this.isInitial = true;\n if (checkBlazor && Browser.isIE === true) {\n setTimeout(function () {\n _this.resetMaskedTextBox();\n });\n }\n else {\n this.resetMaskedTextBox();\n }\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n this.preEleVal = this.element.value;\n if (!Browser.isDevice && (Browser.info.version === '11.0' || Browser.info.name === 'edge')) {\n this.element.blur();\n }\n if (Browser.isDevice && Browser.isIos) {\n this.element.blur();\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n }\n this.renderComplete();\n }\n };\n MaskedTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n MaskedTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getValidClassList(newClass), [this.inputObj.container], this.getValidClassList(oldClass));\n };\n MaskedTextBox.prototype.getValidClassList = function (maskClassName) {\n var result = maskClassName;\n if (!isNullOrUndefined(maskClassName) && maskClassName !== '') {\n result = (maskClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n MaskedTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputObj.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var maskStyle = this.inputObj.container.getAttribute(key);\n maskStyle = !isNullOrUndefined(maskStyle) ? (maskStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.inputObj.container.setAttribute(key, maskStyle);\n }\n else {\n this.inputObj.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if ((this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') ||\n this.element.value === this.promptMask && this.floatLabelType === 'Never') {\n setElementValue.call(this, '');\n }\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputObj.container.style.width = formatUnit(width);\n this.element.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n var elementWidth = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n this.inputObj.container.style.width = elementWidth;\n this.element.style.width = elementWidth;\n }\n }\n };\n MaskedTextBox.prototype.checkHtmlAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes)\n : ['placeholder', 'disabled', 'value', 'readonly'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'placeholder':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['enabled'] === undefined)) || isDynamic) {\n var isEnabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: isEnabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['readonly'] === undefined)) || isDynamic) {\n var isReadonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: isReadonly }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = this.getValidClassList(this.cssClass);\n }\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {MaskedTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {MaskedTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element, this.floatLabelType, this.inputObj.container);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'mask':\n {\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n }\n break;\n case 'promptChar': {\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete',\n 'aria-live', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property({})\n ], MaskedTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"blur\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n * var sliderObj = new Slider({ value: 10 });\n * sliderObj.appendTo('#slider');\n * </script>\n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n // eslint-disable-next-line\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isMaterialTooltip = this.isMaterial && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = this.tooltipObj.content;\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n _this.tooltipObj.content = observedArgs.text;\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || (this.isMaterial && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isBootstrap4 || this.isTailwind,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = this.isMaterialTooltip ? 'Always' : (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span, tickWidth);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.tooltipObj.content, isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n // eslint-disable-next-line\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n // eslint-disable-next-line\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n // eslint-disable-next-line\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n this.changeEvent('changed', evt);\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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 { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n * <form id='formId'>\n * <input type='text' name='Name' />\n * <input type='text' name='Age' />\n * </form>\n * <script>\n * let formObject = new FormValidator('#formId', {\n * rules: { Name: { required: true }, Age: { range: [18, 30] } };\n * });\n * formObject.validate();\n * </script>\n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[rule] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { updateBlazorTemplate, resetBlazorTemplate, isBlazor, select, selectAll } from '@syncfusion/ej2-base';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * <input type='file' name='images[]' id='upload'/>\n * ```\n * ```typescript\n * <script>\n * var uploadObj = new Uploader();\n * uploadObj.appendTo('#upload');\n * </script>\n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n *\n * @param {UploaderModel} options - Specifies the Uploader model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.uploadedFilesData = [];\n _this.base64String = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n _this.btnTabIndex = '0';\n _this.disableKeyboardNavigation = false;\n _this.count = -1;\n _this.actionCompleteCount = 0;\n _this.flag = true;\n _this.selectedFiles = [];\n _this.uploaderName = 'UploadFiles';\n _this.fileStreams = [];\n _this.newFileRef = 0;\n _this.isFirstFileOnSelection = false;\n _this.dragCounter = 0;\n /**\n * Get the file item(li) which are shown in file list.\n *\n * @private\n */\n _this.fileList = [];\n /**\n * Get the data of files which are shown in file list.\n *\n * @private\n */\n _this.filesData = [];\n _this.uploaderOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {UploaderModel} newProp - Returns the dynamic property value of the component.\n * @param {UploaderModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.updateDropArea();\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHTMLAttributes(true);\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'template':\n if (!this.isServerBlazor) {\n this.clearAll();\n }\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'sequentialUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n if (this.uploadWrapper && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + DROP_AREA))) {\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n /* istanbul ignore next */\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled', invalidFileSelection: 'Invalid files selected', totalFiles: 'Total files',\n size: 'Size'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.isServerBlazor = (isBlazor() && this.isServerRendered) ? true : false;\n this.isBlazorTemplate = this.isServerBlazor && this.template !== '' && !isNullOrUndefined(this.template) ? true : false;\n this.isBlazorSaveUrl = (this.isServerRendered &&\n (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl))) ? true : false;\n if (this.isBlazorSaveUrl && this.sequentialUpload) {\n this.sequentialUpload = false;\n }\n if (!this.isBlazorSaveUrl) {\n this.formRendered();\n }\n if (!this.isServerBlazor) {\n this.updateHTMLAttrToElement();\n this.checkHTMLAttributes(false);\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n }\n this.keyConfigs = {\n enter: 'enter'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n this.browserName = Browser.info.name;\n this.uploaderName = this.element.getAttribute('name');\n };\n Uploader.prototype.formRendered = function () {\n var parentEle = closest(this.element, 'form');\n if (!isNullOrUndefined(parentEle)) {\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist(['filesData']);\n };\n /**\n * Return the module name of the component.\n *\n * @returns {string} Returns the component name.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Uploader.prototype.render = function () {\n if (!this.isServerBlazor) {\n this.renderBrowseButton();\n this.initializeUpload();\n this.updateHTMLAttrToWrapper();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n this.setCSSClass();\n }\n else {\n this.dropAreaWrapper = closest(this.element, '.' + DROP_WRAPPER);\n this.uploadWrapper = closest(this.element, '.e-upload.e-control-wrapper');\n this.browseButton = this.dropAreaWrapper.querySelector('button.e-upload-browse-btn');\n this.setDropArea();\n this.renderPreLoadFiles();\n this.wireEvents();\n }\n if (this.isServerBlazor) {\n this.renderComplete();\n }\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n if (!this.isPreloadFiles) {\n this.uploadButton.focus();\n }\n this.wireActionButtonEvents();\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.serverActionButtonsEventBind = function (element) {\n if (element && !this.isForm) {\n this.browseButton.blur();\n this.actionButtons = element;\n this.uploadButton = this.actionButtons.querySelector('.e-file-upload-btn');\n this.clearButton = this.actionButtons.querySelector('.e-file-clear-btn');\n this.uploadButton.focus();\n this.unwireActionButtonEvents();\n this.wireActionButtonEvents();\n this.checkActionButtonStatus();\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.serverUlElement = function (element) {\n if (element) {\n if (this.isBlazorSaveUrl || this.isBlazorTemplate) {\n this.listParent = element;\n this.fileList = [].slice.call(this.listParent.querySelectorAll('li'));\n this.serverRemoveIconBindEvent();\n if (!this.isForm) {\n this.checkAutoUpload(this.filesData);\n }\n }\n }\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n detach(this.actionButtons);\n }\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.textContent);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.textContent);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (this.files.length) {\n if (this.enablePersistence && this.filesData.length) {\n this.createFileList(this.filesData);\n return;\n }\n if (isNullOrUndefined(this.files[0].size)) {\n return;\n }\n this.isPreloadFiles = true;\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n if (this.sequentialUpload) {\n this.count = this.filesData.length - 1;\n }\n this.isPreloadFiles = false;\n }\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n select(this.dropArea, document);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n if (!dropTextArea) {\n this.createDropTextHint();\n }\n else if (!this.isServerBlazor) {\n dropTextArea.innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n }\n if (!enableDropText && dropTextArea) {\n remove(dropTextArea);\n }\n }\n else if (!isNullOrUndefined(this.uploaderOptions) && this.uploaderOptions.dropArea === undefined) {\n this.createDropTextHint();\n this.dropZoneElement = this.uploadWrapper;\n this.setProperties({ dropArea: this.uploadWrapper }, true);\n }\n this.bindDropEvents();\n };\n Uploader.prototype.updateDropArea = function () {\n if (this.dropArea) {\n this.setDropArea();\n }\n else {\n this.dropZoneElement = null;\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (dropTextArea) {\n remove(dropTextArea);\n }\n }\n };\n Uploader.prototype.createDropTextHint = function () {\n if (!this.isServerBlazor) {\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n }\n };\n Uploader.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n Uploader.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValues = (this.htmlAttributes[pro].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.uploadWrapper], updatedClassValues.split(' '));\n }\n }\n else if (pro === 'style') {\n var uploadStyle = this.uploadWrapper.getAttribute(pro);\n uploadStyle = !isNullOrUndefined(uploadStyle) ? (uploadStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.uploadWrapper.setAttribute(pro, uploadStyle);\n }\n else {\n this.uploadWrapper.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n newAttr.value = 'multiple';\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.sequenceUpload(fileData);\n }\n else {\n this.upload(fileData);\n }\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.sequenceUpload = function (fileData) {\n if (this.filesData.length - fileData.length === 0 ||\n this.filesData[(this.filesData.length - fileData.length - 1)].statusCode !== '1') {\n ++this.count;\n var isFileListCreated = this.showFileList ? false : true;\n if (typeof this.filesData[this.count] === 'object') {\n this.isFirstFileOnSelection = false;\n this.upload(this.filesData[this.count], isFileListCreated);\n if (this.filesData[this.count].statusCode === '0') {\n this.sequenceUpload(fileData);\n }\n }\n else {\n --this.count;\n }\n }\n };\n Uploader.prototype.setCSSClass = function (oldCSSClass) {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(this.cssClass) && updatedCssClassValue !== '') {\n addClass([this.uploadWrapper], updatedCssClassValue.split(updatedCssClassValue.indexOf(',') > -1 ? ',' : ' '));\n }\n var updatedOldCssClass = oldCSSClass;\n if (!isNullOrUndefined(oldCSSClass)) {\n updatedOldCssClass = (oldCSSClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCSSClass) && updatedOldCssClass !== '') {\n removeClass([this.uploadWrapper], updatedOldCssClass.split(' '));\n }\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n if (!isNullOrUndefined(metaData)) {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n var target = e.target.parentElement;\n var fileData = this.filesData[this.fileList.indexOf(target)];\n this.retry(fileData);\n }\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = e.target.parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n if (this.sequentialUpload) {\n this.sequenceUpload(this.filesData);\n }\n else {\n this.upload(this.filesData);\n }\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n /* istanbul ignore next */\n if (this.sequentialUpload) {\n this.count = -1;\n }\n this.actionCompleteCount = 0;\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n EventHandler.add(this.dropZoneElement, 'dragenter', this.onDragEnter, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n EventHandler.remove(this.dropZoneElement, 'dragenter', this.onDragEnter);\n }\n };\n Uploader.prototype.onDragEnter = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n this.dragCounter = this.dragCounter + 1;\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.onDragLeave = function () {\n if (!this.enabled) {\n return;\n }\n this.dragCounter = this.dragCounter - 1;\n if (!this.dragCounter) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n }\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.dropEffect !== 'Default') {\n e.dataTransfer.dropEffect = this.dropEffect.toLowerCase();\n }\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.dropElement = function (e) {\n this.dragCounter = 0;\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.getSelectedFiles = function (index) {\n var data = [];\n var liElement = this.fileList[index];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < index; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n for (var j = startIndex; j < (startIndex + nameElements); j++) {\n data.push(allFiles[j]);\n }\n return data;\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n if (this.isBlazorSaveUrl) {\n this.fileList = [].slice.call(this.uploadWrapper.querySelectorAll('li'));\n }\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var formUpload = this.isFormUpload();\n var fileData = formUpload ? this.getSelectedFiles(index) : this.getFilesInArray(this.filesData[index]);\n if (isNullOrUndefined(fileData)) {\n return;\n }\n if (args.target.classList.contains(ABORT_ICON) && !formUpload) {\n fileData[0].statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.uploadSequential();\n }\n if (!(liElement.classList.contains(RESTRICT_RETRY))) {\n this.checkActionComplete(true);\n }\n }\n else if (!closest(args.target, '.' + SPINNER_PANE)) {\n this.remove(fileData, false, false, true, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n if (!this.isBlazorSaveUrl) {\n detach(selectedElement);\n }\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (!this.isBlazorSaveUrl) {\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n if (index <= this.count) {\n --this.count;\n }\n }\n }\n else {\n this.interopAdaptor.invokeMethodAsync('removeFileData', index);\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (isBlazor()) {\n if (_this.currentRequestHeader) {\n _this.updateCustomheader(ajax.httpRequest, _this.currentRequestHeader);\n }\n if (_this.customFormDatas) {\n _this.updateFormData(formData, _this.customFormDatas);\n }\n }\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n e.cancel = true;\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n });\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n };\n if (this.isServerBlazor) {\n var name_1 = this.element.getAttribute('name');\n if (!isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name_1, selectedFiles.rawFile, selectedFiles.name);\n }\n else {\n formData.append(name_1, selectedFiles.name);\n }\n }\n ajax.onLoad = function (e) {\n _this.removeCompleted(e, selectedFiles, custom);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.removeFailed(e, selectedFiles, custom);\n return {};\n };\n ajax.send(formData);\n };\n Uploader.prototype.removingEventCallback = function (eventArgs, formData, selectedFiles, file) {\n /* istanbul ignore next */\n var name = this.element.getAttribute('name');\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ?\n liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (!this.isServerBlazor) {\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile, selectedFiles.name);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateCustomheader = function (request, currentRequest) {\n if (currentRequest.length > 0 && currentRequest[0]) {\n var _loop_2 = function (i) {\n var data = currentRequest[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n request.setRequestHeader(Object.keys(data)[0], value);\n };\n for (var i = 0; i < currentRequest.length; i++) {\n _loop_2(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n }\n else {\n this.removeFailed(e, files, customTemplate);\n }\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n rootElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n var statusElement = rootElement.querySelector('.' + STATUS);\n if (statusElement) {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items = this.multiple ?\n event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_3 = function (i) {\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_3(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; items && i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\n if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n var directoryReader = item.createReader();\n this.readFileFromDirectory(directoryReader, event);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n var _this = this;\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i], event);\n }\n _this.pushFilesEntries(event);\n if (entries.length) {\n _this.readFileFromDirectory(directoryReader);\n }\n });\n };\n Uploader.prototype.pushFilesEntries = function (event) {\n var _this = this;\n var files = [];\n var _loop_4 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n if (_this.filesEntries.length) {\n var path = _this.filesEntries[i].fullPath;\n files.push({ 'path': path, 'file': fileObj });\n if (i === _this.filesEntries.length - 1) {\n _this.filesEntries = [];\n _this.renderSelectedFiles(event, files, true);\n }\n }\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_4(i);\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n /* istanbul ignore next */\n if (args.type === 'drop') {\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = this.sortFilesList = args.dataTransfer.files;\n if (this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n this.element.files = files;\n }\n if (files.length > 0) {\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getBase64 = function (file) {\n return new Promise(function (resolve, reject) {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function () { return resolve(fileReader.result); };\n fileReader.onerror = function (error) { return reject(error); };\n });\n };\n /* istanbul ignore next */\n /* tslint:ignore */\n Uploader.prototype.renderSelectedFiles = function (args, targetFiles, directory, paste) {\n var _this = this;\n this.base64String = [];\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false,\n currentRequest: null,\n customFormData: null\n };\n /* istanbul ignore next */\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n this.flag = true;\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n this.updateInitialFileDetails(args, targetFiles, file, i, fileData, directory, paste);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs, function (eventArgs) {\n _this._internalRenderSelect(eventArgs, fileData);\n });\n };\n Uploader.prototype.updateInitialFileDetails = function (args, \n // eslint-disable-next-line @typescript-eslint/indent\n targetFiles, file, i, fileData, directory, paste) {\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1',\n id: getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name)\n };\n /* istanbul ignore next */\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n };\n Uploader.prototype._internalRenderSelect = function (eventArgs, fileData) {\n if (!eventArgs.cancel) {\n /* istanbul ignore next */\n if (isBlazor()) {\n this.currentRequestHeader = eventArgs.currentRequest;\n this.customFormDatas = eventArgs.customFormData;\n }\n this.selectedFiles = this.selectedFiles.concat(fileData);\n this.btnTabIndex = this.disableKeyboardNavigation ? '-1' : '0';\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n for (var j = 0; j < eventArgs.modifiedFilesData.length; j++) {\n for (var k = 0; k < fileData.length; k++) {\n if (eventArgs.modifiedFilesData[j].id === fileData[k].id) {\n eventArgs.modifiedFilesData[j].rawFile = fileData[k].rawFile;\n }\n }\n }\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData, true);\n if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n this.filesData = this.filesData.concat(fileData);\n }\n if (!this.isForm || this.allowUpload()) {\n if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n this.checkAutoUpload(fileData);\n }\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.isBlazorSaveUrl) {\n this.interopAdaptor.invokeMethodAsync('updateServerFileData', this.filesData, this.isForm);\n }\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n this.raiseActionComplete();\n this.isFirstFileOnSelection = true;\n }\n };\n Uploader.prototype.allowUpload = function () {\n var allowFormUpload = false;\n if (this.isForm && (!isNullOrUndefined(this.asyncSettings.saveUrl) && this.asyncSettings.saveUrl !== '')) {\n allowFormUpload = true;\n }\n return allowFormUpload;\n };\n Uploader.prototype.isFormUpload = function () {\n var isFormUpload = false;\n if (this.isForm && ((isNullOrUndefined(this.asyncSettings.saveUrl) || this.asyncSettings.saveUrl === '')\n && (isNullOrUndefined(this.asyncSettings.removeUrl) || this.asyncSettings.removeUrl === ''))) {\n isFormUpload = true;\n }\n return isFormUpload;\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent) && !(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (this.browserName !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n if (this.isBlazorSaveUrl || this.isBlazorTemplate) {\n this.interopAdaptor.invokeMethodAsync('clearAll');\n }\n else {\n this.removeActionButtons();\n }\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.isPreLoadFile = function (fileData) {\n var isPreload = false;\n for (var i = 0; i < this.files.length; i++) {\n if (this.files[i].name === fileData.name.slice(0, fileData.name.lastIndexOf('.')) && this.files[i].type === fileData.type) {\n isPreload = true;\n }\n }\n return isPreload;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n resetBlazorTemplate(this.element.id + 'Template', 'Template');\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var listElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, listElement);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, listElement);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(listElement);\n this.fileList.push(listElement);\n }\n this.renderReactTemplates();\n updateBlazorTemplate(this.element.id + 'Template', 'Template', this, false);\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formFileList = function (fileData, files) {\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n var fileContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var statusMessage;\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var fileNameEle = this.createElement('span', { className: FILE_NAME });\n fileNameEle.innerHTML = this.getFileNameOnly(listItem.name);\n var fileTypeEle = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileTypeEle.innerHTML = '.' + fileType;\n if (!fileType) {\n fileTypeEle.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n fileContainer.appendChild(fileNameEle);\n fileContainer.appendChild(fileTypeEle);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileTypeEle);\n rtlContainer.appendChild(fileNameEle);\n fileContainer.appendChild(rtlContainer);\n }\n this.truncateName(fileNameEle);\n statusMessage = this.formValidateFileInfo(listItem, fileList);\n }\n fileList.appendChild(fileContainer);\n this.setListToFileInfo(fileData, fileList);\n var index = this.listParent.querySelectorAll('li').length;\n var infoEle = this.createElement('span');\n if (fileList.classList.contains(INVALID_FILE)) {\n infoEle.classList.add(STATUS);\n infoEle.classList.add(INVALID_FILE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n infoEle.classList.add(fileData.length > 1 ? INFORMATION : FILE_SIZE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData)) : this.bytesToSize(fileData[0].size);\n this.createFormInput(fileData);\n }\n fileContainer.appendChild(infoEle);\n if (isNullOrUndefined(fileList.querySelector('.e-icons'))) {\n var iconElement = this.createElement('span', { className: 'e-icons', attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n fileList.appendChild(fileContainer);\n fileList.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n iconElement.classList.add(REMOVE_ICON);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n };\n Uploader.prototype.formValidateFileInfo = function (listItem, fileList) {\n var statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n this.addInvalidClass(fileList);\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n this.addInvalidClass(fileList);\n statusMessage = typeValidationMessage;\n }\n return statusMessage;\n };\n Uploader.prototype.addInvalidClass = function (fileList) {\n fileList.classList.add(INVALID_FILE);\n };\n Uploader.prototype.createFormInput = function (fileData) {\n var inputElement = this.element.cloneNode(true);\n inputElement.classList.add(HIDDEN_INPUT);\n for (var _i = 0, fileData_3 = fileData; _i < fileData_3.length; _i++) {\n var listItem = fileData_3[_i];\n listItem.input = inputElement;\n }\n inputElement.setAttribute('name', this.uploaderName);\n this.uploadWrapper.querySelector('.' + INPUT_WRAPPER).appendChild(inputElement);\n if (this.browserName !== 'msie' && this.browserName !== 'edge') {\n this.element.value = '';\n }\n };\n Uploader.prototype.getFileSize = function (fileData) {\n var fileSize = 0;\n for (var _i = 0, fileData_4 = fileData; _i < fileData_4.length; _i++) {\n var file = fileData_4[_i];\n fileSize += file.size;\n }\n return fileSize;\n };\n Uploader.prototype.mergeFileInfo = function (fileData, fileList) {\n var result = {\n name: '',\n rawFile: '',\n size: 0,\n status: '',\n type: '',\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '1',\n list: fileList\n };\n var fileNames = [];\n var type = '';\n for (var _i = 0, fileData_5 = fileData; _i < fileData_5.length; _i++) {\n var listItem = fileData_5[_i];\n fileNames.push(listItem.name);\n type = listItem.type;\n }\n result.name = fileNames.join(', ');\n result.size = this.getFileSize(fileData);\n result.type = type;\n result.status = this.statusForFormUpload(fileData, fileList);\n return result;\n };\n Uploader.prototype.statusForFormUpload = function (fileData, fileList) {\n var isValid = true;\n var statusMessage;\n for (var _i = 0, fileData_6 = fileData; _i < fileData_6.length; _i++) {\n var listItem = fileData_6[_i];\n statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n isValid = false;\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n isValid = false;\n statusMessage = typeValidationMessage;\n }\n }\n if (!isValid) {\n fileList.classList.add(INVALID_FILE);\n statusMessage = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n statusMessage = this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData));\n }\n return statusMessage;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formCustomFileList = function (fileData, files) {\n this.createParentUL();\n resetBlazorTemplate(this.element.id + 'Template', 'Template');\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n this.setListToFileInfo(fileData, fileList);\n var result = this.mergeFileInfo(fileData, fileList);\n fileList.setAttribute('data-file-name', result.name);\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(result, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, fileList);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, fileList);\n }\n var index = this.listParent.querySelectorAll('li').length;\n if (!fileList.classList.contains(INVALID_FILE)) {\n this.createFormInput(fileData);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n this.renderReactTemplates();\n updateBlazorTemplate(this.element.id + 'Template', 'Template', this, false);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Create the file list for specified files data.\n *\n * @param { FileInfo[] } fileData - Specifies the files data for file list creation.\n * @returns {void}\n */\n Uploader.prototype.createFileList = function (fileData, isSelectedFile) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (this.isBlazorSaveUrl || this.isBlazorTemplate) {\n var fileListData = (isSelectedFile) ? this.filesData = this.filesData.concat(fileData) : fileData;\n this.interopAdaptor.invokeMethodAsync('createFileList', fileListData, this.isForm);\n }\n else {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formCustomFileList(fileData, this.element.files);\n }\n else {\n this.createCustomfileList(fileData);\n }\n }\n else if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formFileList(fileData, this.element.files);\n }\n else {\n for (var _i = 0, fileData_7 = fileData; _i < fileData_7.length; _i++) {\n var listItem = fileData_7[_i];\n var liElement = this.createElement('li', {\n className: FILE,\n attrs: { 'data-file-name': listItem.name, 'data-files-count': '1' }\n });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileExtension.innerHTML = '.' + fileType;\n if (!fileType) {\n fileExtension.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons',\n attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n var preventActionComplete = this.flag;\n if (this.isPreLoadFile(listItem)) {\n this.flag = false;\n this.checkActionComplete(true);\n this.flag = preventActionComplete;\n }\n }\n }\n }\n };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n };\n Uploader.prototype.setListToFileInfo = function (fileData, fileList) {\n for (var _i = 0, fileData_8 = fileData; _i < fileData_8.length; _i++) {\n var listItem = fileData_8[_i];\n listItem.list = fileList;\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n if (this.browserName !== 'edge' && nameElement.offsetWidth < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n /* istanbul ignore next */\n }\n else if (nameElement.offsetWidth + 1 < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode, updateLiStatus) {\n if (updateLiStatus === void 0) { updateLiStatus = true; }\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n if (this.isBlazorSaveUrl) {\n for (var i = 0; i < this.filesData.length; i++) {\n if (this.filesData[i].name === files.name) {\n this.filesData[i].status = status;\n this.filesData[i].statusCode = statusCode;\n }\n }\n }\n else {\n files.status = status;\n files.statusCode = statusCode;\n }\n }\n if (updateLiStatus) {\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if ((!isNullOrUndefined(this.filesData[i].id) && !isNullOrUndefined(files.id)) ? (this.filesData[i].name === files.name &&\n this.filesData[i].id === files.id) : this.filesData[i].name === files.name) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false,\n customFormData: []\n };\n this.trigger('canceling', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n }\n else {\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_2 = _this.element.getAttribute('name');\n formData.append(name_2, files.name);\n formData.append('cancel-uploading', files.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n if (!isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n deleteIcon.parentElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement, false);\n }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n /* istanbul ignore next */\n liElement.classList.add(RESTRICT_RETRY);\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n /* istanbul ignore next */\n Uploader.prototype.serverRemoveIconBindEvent = function () {\n if (this.uploadWrapper && this.isBlazorSaveUrl) {\n var iconElement = [].slice.call(this.uploadWrapper.querySelectorAll('ul li'));\n for (var i = 0; i < iconElement.length; i++) {\n var removeIconEle = (iconElement[i]) ? iconElement[i].querySelector('.e-icons') : null;\n if (removeIconEle) {\n EventHandler.remove(removeIconEle, 'click', this.removeFiles);\n EventHandler.add(removeIconEle, 'click', this.removeFiles, this);\n }\n }\n }\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var _this = this;\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadSuccessMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '2', false), statusText: statusMessage\n };\n if (!this.isBlazorSaveUrl) {\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement)) {\n var spinnerEle = liElement.querySelector('.' + SPINNER_PANE);\n if (!isNullOrUndefined(spinnerEle)) {\n hideSpinner(liElement);\n detach(spinnerEle);\n }\n }\n }\n this.trigger('success', args, function (args) {\n _this.updateStatus(file, args.statusText, '2');\n _this.uploadedFilesData.push(file);\n if (!_this.isBlazorSaveUrl) {\n _this.trigger('change', { file: _this.uploadedFilesData });\n }\n _this.checkActionButtonStatus();\n if (_this.fileList.length > 0) {\n if ((!(_this.getLiElement(file)).classList.contains(RESTRICT_RETRY))) {\n _this.uploadSequential();\n _this.checkActionComplete(true);\n }\n else {\n /* istanbul ignore next */\n (_this.getLiElement(file)).classList.remove(RESTRICT_RETRY);\n }\n }\n });\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var _this = this;\n var li = this.getLiElement(file);\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '0', false), statusText: statusMessage\n };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args, function (args) {\n _this.updateStatus(file, args.statusText, '0');\n _this.checkActionButtonStatus();\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.checkActionComplete = function (increment) {\n if (increment) {\n ++this.actionCompleteCount;\n }\n else {\n --this.actionCompleteCount;\n }\n this.raiseActionComplete();\n };\n Uploader.prototype.raiseActionComplete = function () {\n if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n this.flag = false;\n var eventArgs = {\n fileData: []\n };\n eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n this.trigger('actionComplete', eventArgs);\n }\n };\n Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n var matchFiles = [];\n var matchFilesIndex = 0;\n for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n var selectedFileData = selectedFiles[selectFileIndex];\n for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n if (this.filesData[fileDataIndex].name === selectedFileData.name) {\n matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n ++matchFilesIndex;\n }\n }\n }\n return matchFiles;\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () {\n _this.animateProgressBar(li, callType);\n }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n if (extensions !== '' && !isNullOrUndefined(extensions)) {\n this.element.setAttribute('accept', extensions);\n }\n else {\n this.element.removeAttribute('accept');\n }\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n try {\n if (selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n if (this.enableRtl) {\n addClass([this.uploadWrapper], RTL);\n }\n else {\n removeClass([this.uploadWrapper], RTL);\n }\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['accept', 'multiple', 'disabled'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'accept':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['allowedExtensions'] === undefined))\n || isDynamic) {\n this.setProperties({ allowedExtensions: this.element.getAttribute('accept') }, !isDynamic);\n this.initialAttr.accept = this.allowedExtensions;\n }\n break;\n case 'multiple':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['multiple'] === undefined)) || isDynamic) {\n var isMutiple = this.element.getAttribute(prop) === 'multiple' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ multiple: isMutiple }, !isDynamic);\n this.initialAttr.multiple = true;\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['enabled'] === undefined)) || isDynamic) {\n var isDisabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: isDisabled }, !isDynamic);\n this.initialAttr.disabled = true;\n }\n }\n }\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom, fileIndex) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom, fileIndex);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append(this.uploaderName, blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.chunkUploadComplete(e, metaData, custom);\n return {};\n };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n /* istanbul ignore next */\n if (isBlazor()) {\n if (_this.currentRequestHeader) {\n _this.updateCustomheader(ajax.httpRequest, _this.currentRequestHeader);\n }\n if (_this.customFormDatas) {\n _this.updateFormData(formData, _this.customFormDatas);\n }\n }\n if (eventArgs.currentChunkIndex === 0) {\n // This event is currently not required but to avoid breaking changes for previous customer, we have included.\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n else {\n _this.trigger('chunkUploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.chunkUploadFailed(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.uploadingEventCallback = function (formData, eventArgs, e, file) {\n if (eventArgs.cancel) {\n this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n var liElement = this.getLiElement(eventArgs.fileData);\n if (liElement) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n var removeIcon = liElement.querySelector('.' + REMOVE_ICON);\n if (removeIcon) {\n removeIcon.parentElement.insertBefore(this.pauseButton, removeIcon);\n }\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement);\n }, false);\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize,\n response: requestResponse\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false, customFormData: [] };\n this.trigger('canceling', eventArgs_1, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n _this.sendNextRequest(metaData);\n }\n else {\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_3 = _this.element.getAttribute('name');\n formData.append(name_3, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n formData.append('cancelUploading', metaData.file.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removeChunkFile(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n }\n });\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement && !isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n if (metaData.file.statusCode !== '4') {\n this.sendNextRequest(metaData);\n }\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon && deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon && deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon && pauseIcon.classList.add(RETRY_ICON);\n pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)\n && !isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n if (metaData.file.statusCode !== '4') {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n }\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs, function (eventArgs) {\n // To prevent triggering of failure event\n if (!eventArgs.cancel) {\n if (metaData.retryCount < _this.asyncSettings.retryCount) {\n setTimeout(function () {\n _this.retryRequest(liElement, metaData, custom);\n }, _this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n _this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n _this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON) ?\n liElement.querySelector('.' + ABORT_ICON) : liElement.querySelector('.' + REMOVE_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file_1 = metaData.file;\n var failureMessage = _this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: _this.updateStatus(file_1, failureMessage, '0', false),\n statusText: failureMessage\n };\n _this.trigger('failure', args, function (args) {\n _this.updateStatus(file_1, args.statusText, '0');\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n }\n }\n });\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n /* istanbul ignore next */\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n /* istanbul ignore next */\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var progressVal = void 0;\n var totalChunks = Math.ceil(metaData.file.size / this.asyncSettings.chunkSize) - 1;\n if (this.asyncSettings.chunkSize && totalChunks) {\n progressVal = Math.round(metaData.chunkIndex / totalChunks * 100);\n this.changeProgressValue(liElement, progressVal.toString() + '%');\n }\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)\n && isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n if (this.browserName === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n var abortIcon = liElement.querySelector('.' + ABORT_ICON);\n abortIcon.parentElement.insertBefore(this.pauseButton, abortIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) {\n _this.checkPausePlayAction(e);\n }, false);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n *\n * @param { number } bytes - Specifies the file size in bytes.\n * @returns {string}\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n *\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns {File[]}\n */\n /* istanbul ignore next */\n Uploader.prototype.sortFileList = function (filesData) {\n filesData = filesData ? filesData : this.sortFilesList;\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_4 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_4 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearTemplate();\n if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n this.clearAll();\n }\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n var attributes = ['aria-label', 'directory', 'webkitdirectory', 'tabindex'];\n for (var _i = 0, attributes_2 = attributes; _i < attributes_2.length; _i++) {\n var key = attributes_2[_i];\n this.element.removeAttribute(key);\n }\n if (!this.isServerBlazor) {\n if (!isNullOrUndefined(this.uploadWrapper)) {\n this.uploadWrapper.parentElement.appendChild(this.element);\n detach(this.uploadWrapper);\n }\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n }\n else {\n this.uploadWrapper = null;\n }\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n *\n * @param { FileInfo | FileInfo[] } files - Specifies the files data for upload.\n * @param {boolean} custom - Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.upload = function (files, custom) {\n var _this = this;\n files = files ? files : this.filesData;\n if (this.sequentialUpload && (this.isFirstFileOnSelection || custom)) {\n this.sequenceUpload(files);\n }\n else {\n var uploadFiles_1 = this.getFilesInArray(files);\n var eventArgs = {\n customFormData: [],\n currentRequest: null,\n cancel: false\n };\n this.trigger('beforeUpload', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n if (isBlazor()) {\n _this.currentRequestHeader = eventArgs.currentRequest ? eventArgs.currentRequest : _this.currentRequestHeader;\n _this.customFormDatas = (eventArgs.customFormData && eventArgs.customFormData.length > 0) ?\n eventArgs.customFormData : _this.customFormDatas;\n }\n _this.uploadFiles(uploadFiles_1, custom);\n }\n });\n }\n };\n Uploader.prototype.getFilesInArray = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n /* istanbul ignore next */\n Uploader.prototype.serverReadFileBase64 = function (fileIndex, position, totalCount) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var file = _this.fileStreams[fileIndex].rawFile;\n try {\n var reader = new FileReader();\n reader.onload = (function (args) {\n return function () {\n try {\n var contents = args.result;\n var data = contents ? contents.split(';base64,')[1] : null;\n resolve(data);\n }\n catch (e) {\n reject(e);\n }\n };\n })(reader);\n reader.readAsDataURL(file.slice(position, position + totalCount));\n }\n catch (e) {\n reject(e);\n }\n });\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.uploadFileCount = function (ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var result = files.length;\n return result;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileRead = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var file = files[index];\n var fileCount = this.newFileRef++;\n this.fileStreams[fileCount] = file;\n return fileCount;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return null;\n }\n var file = files[index];\n if (!file) {\n return null;\n }\n return this.filesData[index];\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n if (this.isServerBlazor) {\n this.interopAdaptor.invokeMethodAsync('GetFileDetails', files);\n }\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n var _loop_5 = function (i) {\n if (this_3.isServerBlazor && !this_3.checkChunkUpload()) {\n /* istanbul ignore next */\n if (selectedFiles[i] && selectedFiles[i].rawFile instanceof File) {\n this_3.getBase64(selectedFiles[i].rawFile).then(function (data) {\n _this.base64String.push(data);\n _this.uploadFilesRequest(selectedFiles, i, custom);\n });\n }\n }\n else {\n this_3.uploadFilesRequest(selectedFiles, i, custom);\n }\n };\n var this_3 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_5(i);\n }\n };\n Uploader.prototype.uploadFilesRequest = function (selectedFiles, i, custom) {\n var _this = this;\n var cloneFiles = [];\n var chunkEnabled = this.checkChunkUpload();\n var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var getFileData;\n /* istanbul ignore next */\n if (this.isServerBlazor) {\n getFileData = selectedFiles.slice(0);\n cloneFiles.push(getFileData[i].rawFile);\n }\n var eventArgs = {\n fileData: (this.isServerBlazor) ? getFileData[i] : selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n /* istanbul ignore next */\n if (isBlazor()) {\n eventArgs.fileData.rawFile = !chunkEnabled ? _this.base64String[i] : eventArgs.fileData.rawFile;\n if (_this.currentRequestHeader) {\n _this.updateCustomheader(ajax.httpRequest, _this.currentRequestHeader);\n }\n if (_this.customFormDatas) {\n _this.updateFormData(formData, _this.customFormDatas);\n }\n }\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n /* istanbul ignore next */\n if (_this.isServerBlazor && !chunkEnabled) {\n selectedFiles[i].rawFile = eventArgs.fileData.rawFile = cloneFiles[i];\n }\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n });\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_5 = this.element.getAttribute('name');\n formData.append(name_5, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this.asyncSettings.chunkSize) {\n this.chunkUpload(selectedFiles[i], custom, i);\n }\n else {\n ajax.onLoad = function (e) {\n if (eventArgs.cancel && _this.isServerBlazor) {\n return {};\n }\n else {\n _this.uploadComplete(e, selectedFiles[i], custom);\n return {};\n }\n };\n ajax.onUploadProgress = function (e) {\n if (eventArgs.cancel && _this.isServerBlazor) {\n return {};\n }\n else {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.uploadFailed(e, selectedFiles[i]);\n return {};\n };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.spliceFiles = function (liIndex) {\n var liElement = this.fileList[liIndex];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < liIndex; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n var endIndex = (startIndex + nameElements) - 1;\n for (var j = endIndex; j >= startIndex; j--) {\n allFiles.splice(j, 1);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @param { boolean } postRawFile - Set false, to post file name only to the remove action.\n * @returns {void}\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n var _this = this;\n if (isNullOrUndefined(postRawFile)) {\n postRawFile = true;\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: postRawFile,\n currentRequest: null\n };\n var beforeEventArgs = {\n cancel: false,\n customFormData: [],\n currentRequest: null\n };\n this.trigger('beforeRemove', beforeEventArgs, function (beforeEventArgs) {\n if (!beforeEventArgs.cancel) {\n if (isBlazor()) {\n _this.currentRequestHeader = beforeEventArgs.currentRequest;\n _this.customFormDatas = beforeEventArgs.customFormData;\n }\n if (_this.isFormUpload() && !_this.isBlazorSaveUrl) {\n eventArgs.filesData = fileData;\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n var removingFiles = _this.getFilesInArray(fileData);\n var isLiRemoved = false;\n var liIndex = void 0;\n for (var _i = 0, removingFiles_1 = removingFiles; _i < removingFiles_1.length; _i++) {\n var data = removingFiles_1[_i];\n if (!isLiRemoved) {\n liIndex = _this.fileList.indexOf(data.list);\n }\n if (liIndex > -1) {\n var inputElement = !isNullOrUndefined(data.input) ? data.input : null;\n if (inputElement) {\n detach(inputElement);\n }\n _this.spliceFiles(liIndex);\n detach(_this.fileList[liIndex]);\n _this.fileList.splice(liIndex, 1);\n isLiRemoved = true;\n liIndex = -1;\n }\n }\n }\n });\n }\n else if (_this.isForm && (isNullOrUndefined(_this.asyncSettings.removeUrl) || _this.asyncSettings.removeUrl === '')\n && !_this.isBlazorSaveUrl) {\n eventArgs.filesData = _this.getFilesData();\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearAll();\n }\n });\n }\n else {\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : _this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = _this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n var _loop_6 = function (files) {\n var fileUploadedIndex = _this.uploadedFilesData.indexOf(files);\n if ((files.statusCode === '2' || files.statusCode === '4' || (files.statusCode === '0' &&\n fileUploadedIndex !== -1)) && validUrl) {\n _this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.removeFilesData(files, customTemplate);\n }\n });\n }\n else {\n _this.removeFilesData(files, customTemplate);\n }\n }\n if (args && !args.target.classList.contains(REMOVE_ICON)) {\n _this.checkActionComplete(false);\n }\n };\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n _loop_6(files);\n }\n }\n }\n });\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n *\n * @returns {void}\n */\n Uploader.prototype.clearAll = function () {\n var _this = this;\n if (isNullOrUndefined(this.listParent) && !(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n if (this.browserName !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearData();\n _this.actionCompleteCount = 0;\n _this.count = -1;\n }\n });\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get the data of files which are shown in file list.\n *\n * @param { number } index - specifies the file list item(li) index.\n * @returns {FileInfo[]}\n */\n Uploader.prototype.getFilesData = function (index) {\n if (!this.isServerBlazor) {\n if (isNullOrUndefined(index)) {\n return this.filesData;\n }\n else {\n return this.getSelectedFiles(index);\n }\n }\n else {\n for (var i = 0; i < this.filesData.length; i++) {\n this.filesData[i].rawFile = this.base64String[i];\n }\n return this.filesData;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Pauses the in-progress chunked upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.pause = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.resume = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @param {boolean} custom -Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n if (this.sequentialUpload && this.isFirstFileOnSelection) {\n this.isFirstFileOnSelection = false;\n }\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns {void}\n */\n Uploader.prototype.cancel = function (fileData) {\n fileData = fileData ? fileData : this.filesData;\n var cancelingFiles = this.getFilesInArray(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property({})\n ], Uploader.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property('Default')\n ], Uploader.prototype, \"dropEffect\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"rendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"fileListRendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeRemove\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkUploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n/* eslint-enable @typescript-eslint/no-explicit-any */\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};\n/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * <input type=\"color\" id=\"color-picker\">\n * ```\n * ```typescript\n * <script>\n * let colorPickerObj: ColorPicker = new ColorPicker(null , \"#color-picker\");\n * </script>\n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n open: this.onOpen.bind(this),\n click: function () {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'presentation' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n this.setProperties({ 'value': cValue }, true);\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n });\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"onModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\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, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isBlazor } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * <input name='images' id='textbox'/>\n * ```\n * ```typescript\n * <script>\n * var textboxObj = new TextBox();\n * textboxObj.appendTo('#textbox');\n * </script>\n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n /**\n *\n * @param {TextBoxModel} options - Specifies the TextBox model.\n * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n * @private\n */\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isAngular = false;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.isVue = false;\n _this.textboxOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n this.bindClearEvent();\n break;\n case 'width':\n Input.setWidth(newProp.width, this.textboxWrapper.container);\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!this.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkAttributes(true);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.respectiveElement);\n break;\n case 'type':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n this.respectiveElement.setAttribute('type', this.type);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n this.raiseChangeEvent();\n }\n break;\n case 'showClearButton':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n case 'autocomplete':\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else {\n this.removeAttributes(['autocomplete']);\n }\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n TextBox.prototype.preRender = function () {\n if (!(isBlazor() && this.isServerRendered)) {\n this.cloneElement = this.element.cloneNode(true);\n this.formElement = closest(this.element, 'form');\n if (!isNullOrUndefined(this.formElement)) {\n this.isForm = true;\n }\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.multiline ?\n this.createElement('textarea') :\n this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id') {\n inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n if (attributeName === 'name') {\n this.element.removeAttribute('name');\n }\n }\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n this.element.setAttribute('role', 'textbox');\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n this.isHiddenInput = true;\n this.textarea = this.createElement('textarea');\n this.element.parentNode.insertBefore(this.textarea, this.element);\n this.element.setAttribute('type', 'hidden');\n this.textarea.setAttribute('name', this.element.getAttribute('name'));\n this.element.removeAttribute('name');\n this.textarea.setAttribute('role', this.element.getAttribute('role'));\n this.element.removeAttribute('role');\n this.textarea.setAttribute('id', getUniqueID('textarea'));\n var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var index = 0; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (this.element.hasAttribute(attributeName) && containerAttr.indexOf(attributeName) < 0 &&\n !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n // e-mappinguid attribute is handled for Grid component.\n this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n if (apiAttributes.indexOf(attributeName) < 0) {\n this.element.removeAttribute(attributeName);\n index--;\n }\n }\n }\n }\n }\n };\n TextBox.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'autocomplete':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'type':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n this.setProperties({ type: this.element.type }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextBox.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getInputValidClassList(this.cssClass);\n }\n if (!(isBlazor() && this.isServerRendered)) {\n this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;\n this.textboxWrapper = Input.createInput({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValue,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.updateHTMLAttrToWrapper();\n if (this.isHiddenInput) {\n this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);\n }\n }\n else {\n this.respectiveElement = this.element;\n this.textboxWrapper = { container: this.element.parentElement };\n if (this.showClearButton && !this.multiline) {\n this.textboxWrapper.clearButton = this.textboxWrapper.container.querySelector('.e-clear-icon');\n Input.wireClearBtnEvents(this.respectiveElement, this.textboxWrapper.clearButton, this.textboxWrapper.container);\n }\n if (this.floatLabelType === 'Auto') {\n Input.wireFloatingEvents(this.respectiveElement);\n }\n // eslint-disable-next-line max-len, @typescript-eslint/no-explicit-any\n Input.bindInitialEvent({ element: this.respectiveElement, buttons: null, customTag: null, floatLabelType: this.floatLabelType, properties: this.properties });\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n }\n if (!isNullOrUndefined(this.value)) {\n this.initialValue = this.value;\n this.setInitialValue();\n }\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n this.removeAttributes(['autocomplete']);\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.respectiveElement.defaultValue = this.respectiveElement.value;\n Input.setWidth(this.width, this.textboxWrapper.container);\n this.renderComplete();\n };\n TextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[key]);\n if (updatedClassValues !== '') {\n addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.textboxWrapper.container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.textboxWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n TextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n };\n TextBox.prototype.getInputValidClassList = function (inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n TextBox.prototype.setInitialValue = function () {\n if (!this.isAngular) {\n this.respectiveElement.setAttribute('value', this.initialValue);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-autofill') &&\n this.textboxWrapper.container.classList.contains('e-outline')) {\n EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n }\n };\n TextBox.prototype.animationHandler = function () {\n this.textboxWrapper.container.classList.add('e-valid-input');\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n label.classList.add('e-label-top');\n if (label.classList.contains('e-label-bottom')) {\n label.classList.remove('e-label-bottom');\n }\n }\n };\n TextBox.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n this.isProtectedOnChange = prevOnChange;\n };\n TextBox.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textboxWrapper)) {\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n (this.previousValue !== this.respectiveElement.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.inputHandler = function (args) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var textboxObj = this;\n var eventArgs = {\n event: args,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textboxObj.localChange({ value: this.respectiveElement.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n this.raiseChangeEvent(args, true);\n args.stopPropagation();\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.respectiveElement.tagName !== 'TEXTAREA') {\n if (this.enabled) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR))) {\n Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.setProperties({ value: this.respectiveElement.value }, true);\n var eventArgs = {\n event: event,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.respectiveElement.value;\n this.raiseChangeEvent(event, true);\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-outline') &&\n this.textboxWrapper.container.classList.contains('e-autofill')) {\n EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (!(isBlazor() && this.isServerRendered)) {\n if (this.element.tagName === 'INPUT' && this.multiline) {\n detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);\n this.respectiveElement = this.element;\n this.element.removeAttribute('type');\n }\n this.respectiveElement.value = this.respectiveElement.defaultValue;\n this.respectiveElement.classList.remove('e-input');\n this.removeAttributes(['aria-placeholder', 'aria-disabled', 'aria-readonly', 'aria-labelledby']);\n if (!isNullOrUndefined(this.textboxWrapper)) {\n this.textboxWrapper.container.insertAdjacentElement('afterend', this.respectiveElement);\n detach(this.textboxWrapper.container);\n }\n this.textboxWrapper = null;\n _super.prototype.destroy.call(this);\n }\n else {\n this.textboxWrapper = null;\n }\n };\n /**\n * Adding the icons to the TextBox component.\n *\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for TextBox.\n * @returns {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n * @returns {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'class') {\n this.respectiveElement.classList.add(attributes[key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[key] }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n else {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @returns {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else {\n this.respectiveElement.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.respectiveElement && this.enabled) {\n this.respectiveElement.focus();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextBox.prototype.focusOut = function () {\n if (document.activeElement === this.respectiveElement && this.enabled) {\n this.respectiveElement.blur();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('on')\n ], TextBox.prototype, \"autocomplete\", void 0);\n __decorate([\n Property({})\n ], TextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"multiline\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n"],"names":["createMask","attributes","this","element","role","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","split","i","length","splitInnerMask","j","pushIntoRegExpCollec","call","chkSpace","customRegExpCollec","push","hiddenMask","promptChar","escapeMaskValue","promptMask","replace","isNullOrUndefined","customCharacters","RegExp","escapeNumber","match","substring","aria-invalid","applyMask","setElementValue","setMaskValue","value","wireEvents","EventHandler","add","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","maskInputMouseDownHandler","maskInputMouseUpHandler","enabled","bindClearEvent","formElement","resetFormHandler","unwireEvents","remove","showClearButton","inputObj","clearButton","resetHandler","e","preventDefault","classList","contains","clear","event","redoCollec","unshift","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","tagName","initInputValue","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","_callPasteHandler","regExpCollec","undefined","isClicked","_this","inputElement","modelValue","toAllowForward","toAllowBackward","eventArgs","maskedValue","container","triggerFocus","floatLabelType","placeholder","setTimeout","backSelectionStart","trigger","blurEventArgs","isFocus","labelElement","parentNode","querySelector","TOPLABEL","removeClass","readonly","sIndex_1","eIndex_1","oldValue_1","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","Browser","isIE","ctrlKey","keyCode","extend","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","type","isDeleted","initStartIndex","initEndIndex","curMask","deleteEndIndex","multipleDel","preValue","index","oldValue","prompt_1","elementValue","code","key","String","fromCharCode","isIosInvalid","prevOnChange","isProtectedOnChange","changeEventArgs","isInitial","isInteraction","isInteracted","merge","isAngular","preventChange","removeMaskError","val_1","startIndex_1","oldVal","trim","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileSwipeCheck","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","applySupportedValues","addMaskErrorClass","changeToLowerUpperCase","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","curVal","caseCount","indexOf","toUpperCase","toLowerCase","newVal","BOTTOMLABEL","Input","setValue","maskInput","args","inputEle","getMaskInput","UTILMASK","regularExpressions","getVal","getUtilMaskEle","getMaskedVal","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","createInput","internalCreateElement","makeElement","createElement","inputObject","buttons","floatType","isBindClearAction","bindClearAction","createInputContainer","insertBefore","appendChild","createFloatingInput","bindInitialEvent","properties","setClearButton","setAttribute","appendSpan","validateInputType","setPropertyValue","checkInputValue","addEventListener","parent","getParentNode","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","unwireFloatingEvents","removeEventListener","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","inputWrap","updateLabelState","getAttribute","checkFloatLabelType","_i","_a","Object","keys","setCssClass","cssClass","setEnabled","setEnableRtl","enableRtl","setPlaceholder","setReadonly","updateIconState","button","createClearButton","initial","insertAdjacentElement","wireClearBtnEvents","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","elements","oldClass","setWidth","width","style","formatUnit","textContent","aria-placeholder","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","isClear","attrs","removeFloating","input","detach","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","isRipple","_internalRipple","argsButton","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","ele","parentEle","createIconEle","iconClass","addIcon","position","icons","internalCreate","result_1","icon","result_2","prependSpan","innerWrapper","containerElement","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","SPINUP","INTREGEXP","wrapperAttributes","NumericTextBox","_super","options","isVue","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","nodeName","nodeValue","hasAttribute","isBlazor","isServerRendered","tabindex","localeText","incrementTitle","decrementTitle","l10n","L10n","locale","getConstant","setProperties","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","checkAttributes","inputEleValue","validateMinMax","validateStep","updatePlaceholder","render","inputWrapper","hiddenInput","showSpinButton","spinDown","spinUp","wireSpinBtnEvents","createWrapper","spinBtnCreation","setElementWidth","changeValue","isNaN","strictMode","trimValue","decimals","roundNumber","elementPrevValue","renderComplete","isDynamic","attributes_1","htmlAttributes","prop","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","Internationalization","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","ROOT","updateHTMLAttrToWrapper","aria-readonly","validateHidden","class","name","childNodes","updateDataAttribute","attr","a","pro","updateCssClass","newClass","numericClassName","updatedClassValue","numericStyle","title","aria-label","min","Number","max","MAX_VALUE","formattedValue","aria-valuemin","toString","aria-valuemax","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusHandler","focusOutHandler","keyDownHandler","keyUpHandler","inputHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","test","preventHandler","iOS","navigator","platform","currentPos","prevPos","valArray","numericObject","getNumericObject","ignoreKeyCode","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","isDevice","parseValue","numerictextboxObj","userAgent","parsedValue","localChange","current","previous","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","serverDecimalSeparator","EXPREGEXP","valueString","toFixed","parseInt","decimalPart","result1","result2","cancelEvent","info","version","which","metaKey","currentChar","text","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","delay","isIos","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","destroy","attrArray","getText","focusIn","focusOut","blur","getPersistData","keyEntity","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","wrapperAttr","MaskedTextBox","maskOptions","checkHtmlAttributes","checkBlazor","resetMaskedTextBox","setMaskPlaceholder","getValidClassList","maskClassName","updatedClassValues","maskStyle","setVal","dynamicPlaceholder","elementWidth","isEnabled","updatedCssClassValues","strippedValue_1","strippedVal","getMaskedValue","TicksData","apply","ChildProperty","ColorRangeData","LimitData","TooltipData","classNames","root","rtl","sliderHiddenInput","controlWrapper","sliderHandle","rangeBar","sliderButton","firstButton","secondButton","scale","tick","large","tickValue","sliderTooltip","sliderHover","sliderFirstHandle","sliderSecondHandle","sliderDisabled","sliderContainer","horizontalTooltipBefore","horizontalTooltipAfter","verticalTooltipBefore","verticalTooltipAfter","materialTooltip","materialTooltipOpen","materialTooltipActive","materialSlider","sliderTrack","sliderHorizantalColor","sliderVerticalColor","sliderHandleFocused","verticalSlider","horizontalSlider","sliderHandleStart","sliderTooltipStart","sliderTabHandle","sliderButtonIcon","sliderSmallSize","sliderTickPosition","sliderFirstTick","sliderLastTick","sliderButtonClass","sliderTooltipWrapper","sliderTabTrack","sliderTabRange","sliderActiveHandle","sliderMaterialHandle","sliderMaterialRange","sliderMaterialDefault","materialTooltipShow","materialTooltipHide","limits","limitBarDefault","limitBarFirst","limitBarSecond","dragHorizontal","dragVertical","Slider","horDir","verDir","transition","handle","transitionOnMaterialTooltip","scaleTransform","customAriaText","drag","isDragComplete","initialTooltip","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","formChecker","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","initialize","initRender","setZindex","setCSSClass","oldCSSClass","isVisible","tooltipElement","showOn","getTheme","window","getComputedStyle","getPropertyValue","tabIndex","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isMaterialTooltip","orientation","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","filter","css","firstElementChild","setTooltipTransform","tooltipCollision","tooltipOffsetValue","offsetY","offsetX","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","translate","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","Tooltip","showTipPointer","height","animation","open","effect","close","duration","opensOn","beforeOpen","bind","beforeCollision","beforeClose","tooltipBeforeClose","enableHtmlSanitizer","appendTo","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","start","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","firstChild","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","SanitizeHtmlHelper","sanitize","spanElement","tickText","tickElement","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","ariaValueText","isTickFormatted","valuenow","aria-valuetext","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","bottom","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","limitBar","preHandlePos1","values","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","getZindexPartial","pos","updateRangeValue","eventName","map","preHandlePos2","values_1","tempStartEnd","end","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","x","num","offsetWidth","top_1","offsetHeight","stepValueCalculation","percentStep","remain","addition","positionToValue","diff","evt","changedTouches","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","refresh","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","relatedTarget","removeChild","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","trackPosition","trackClassName","child","colorRange","startingPosition","endPosition","trackContainer","backgroundColor","color","border","Collection","Complex","regex","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","ErrorOption","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","url","date","dateIso","creditcard","number","digits","maxLength","minLength","rangeLength","tel","pattern","equalTo","rules","localeFunc","onIntlChange","on","afterLocalization","select","inputElements","selectAll","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","validateRules","data","rules_1","name_1","reset","clearForm","getInputElement","elements_1","errorClass","validClass","off","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","JSON","parse","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","clickHandler","submitHandler","clearEvents","excludeKeys","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","status","optionalValidationStatus","refer","params","param","currentRule","checkValidator","ruleValue","formats","for","errorOption","Message","errorContainer","outerHTML","containerId","customPlacement","nextSibling","display","checkRequired","inputType","option","Date","getTime","stringify","uNum","compareTo","Label","Base","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","PROGRESS_WRAPPER","PROGRESSBAR","UPLOAD_SUCCESS","UPLOAD_FAILED","PAUSE_UPLOAD","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","accept","multiple","uploadedFilesData","base64String","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","flag","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","dragCounter","fileList","filesData","uploaderOptions","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","isServerBlazor","setLocalizedTexts","preLocaleObj","template","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","abort","cancel","delete","pauseUpload","pause","resume","retry","fileUploadCancel","invalidFileSelection","totalFiles","size","isBlazorTemplate","isBlazorSaveUrl","asyncSettings","saveUrl","sequentialUpload","formRendered","isPureReactComponent","props","keyConfigs","enter","browserName","documentElement","directoryUpload","dropAreaWrapper","setDropArea","renderBrowseButton","initializeUpload","isPreloadFiles","wireActionButtonEvents","serverActionButtonsEventBind","unwireActionButtonEvents","serverUlElement","serverRemoveIconBindEvent","checkAutoUpload","uploadButtonClick","clearButtonClick","uploadText","clearText","files","enablePersistence","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","allowUpload","showFileList","length_1","dropTextArea","dropArea","dropZoneElement","enableDropText","createDropTextHint","bindDropEvents","fileDropArea","uploadStyle","newAttr","createAttribute","setAttributeNode","sequenceUpload","isFileListCreated","updatedOldCssClass","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","resetForm","unWireEvents","targetElement","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","click","dropElement","dragHover","onDragLeave","onPasteFile","onDragEnter","dropEffect","dataTransfer","item","clipboardData","items","pasteFile","kind","renderSelectedFiles","getAsFile","getSelectedFiles","liElement","allFiles","getFilesData","nameElements","selectedElement","formUpload","isFormUpload","getFilesInArray","spinnerTarget","createSpinner","showSpinner","uploadSequential","checkActionComplete","removeFilesData","customTemplate","getLiElement","interopAdaptor","invokeMethodAsync","removeUploadedFile","removeDirectly","custom","ajax","Ajax","removeUrl","emitError","formData","FormData","beforeSend","currentRequest","httpRequest","currentRequestHeader","updateCustomheader","customFormDatas","updateFormData","removingEventCallback","append","onLoad","removeCompleted","onError","removeFailed","send","postRawFile","customFormData","customData","request","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","this_1","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","this_2","targetFiles","sortFilesList","sortFileList","getBase64","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","error","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","updateInitialFileDetails","checkExtension","_internalRenderSelect","fileDetails","getUniqueID","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","singleUpload","removedList","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","str","dropFiles","extensions_1","extension","toLocaleLowerCase","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","isPreLoadFile","isPreload","createCustomfileList","resetBlazorTemplate","fileData_1","listItem","listElement","data-file-name","uploadTemplateFn","templateComplier","liTempCompiler","isStringTemplate","fromElements","eventsArgs","renderReactTemplates","updateBlazorTemplate","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","fileType","rtlContainer","truncateName","formValidateFileInfo","setListToFileInfo","infoEle","bytesToSize","getFileSize","createFormInput","iconElement","mergeFileInfo","addInvalidClass","typeValidationMessage","fileData_3","fileData_4","list","fileNames","fileData_5","join","statusForFormUpload","fileData_6","formCustomFileList","isSelectedFile","fileListData","fileData_7","data-files-count","textContainer","textElement","fileExtension","preventActionComplete","getSlicedName","nameElement","dataset","tail","fileData_8","scrollWidth","setInitialAttributes","filterfileList","filterFiles","updateLiStatus","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","cancelUploadingFile","updateProgressBarClasses","name_2","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","removeIconEle","spinnerEle","getSelectedFileStatus","matchFiles","matchFilesIndex","selectFileIndex","selectedFileData","fileDataIndex","callType","progressAnimation","Animation","animate","animateProgressBar","extensions","uploadTemplate","compile","exception","isMutiple","isDisabled","fileIndex","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","ceil","async","contentType","chunkUploadComplete","onUploadProgress","chunkUploadInProgress","currentChunkIndex","uploadingEventCallback","chunkUploadFailed","eventCancelByArgs","removeIcon","checkChunkUpload","requestResponse","updateMetaData","eventArgs_1","sendNextRequest","name_3","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","cancelButton","retryRequest","retryAfterDelay","file_1","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","progressVal","totalChunks","abortIcon","bytes","sortedFilesData","sortedFileNames_1","sort","name_4","clearTemplate","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","totalCount","reader","contents","uploadFileCount","getFileRead","fileCount","getFileInfo","this_3","File","then","uploadFilesRequest","cloneFiles","chunkEnabled","getFileData","name_5","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","removeFiles_1","fileUploadedIndex","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","CTRLSWITCH","HIDEHEX","HIDERGBA","HIDEVALUE","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PREVIEW","SHOWVALUE","SELECT","TILE","presets","default","ColorPicker","Apply","Cancel","ModeSwitcher","initWrapper","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","noColor","mode","slicedValue","initialInputValue","tileRipple","rippleEffect","selector","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","SplitButton","iconCss","onOpen","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","relateTo","body","X","Y","targetType","collision","bindCallBackEvent","getInstance","Popup","callBackPromise","Deferred","observeOpenArgs","pageYOffset","pageXOffset","modal","beforeCloseArgs","observedCloseArgs","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","len","modeSwitcher","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","colors","refEle","palette","row","tile","roundedColor","columns","aria-selected","presetName","addTileSelection","noColorEle","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","h","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","change","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","direction","opacityEle","background","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","dataBind","previewContainer","colorValue","isPicker","createNumericInput","numericInput","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","targetEle","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","tooltipEle","getTooltipInst","setTooltipOffset","enable","convertToHsvString","updateHsv","isKey","updateInput","substr","removeTileSelection","convertRgbToNumberArray","n","toggle","closePopup","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","childElementCount","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","tempValue","len_1","charAt","opacity","bigInt","g","v","s","floor","f","q","t","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","otherCompModel","getModel","count_1","reduce","cls","containerAttr","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","globalize","multiline","attributeName","textarea","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","defaultValue","setStyle","inputClassName","animationHandler","resetValue","textboxObj","interaction","resetInputHandler"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-inputs.min.js","sources":["../../src/maskedtextbox/base/mask-base.js","../../src/input/input.js","../../src/numerictextbox/numerictextbox.js","../../src/maskedtextbox/maskedtextbox/maskedtextbox.js","../../src/slider/slider.js","../../src/form-validator/form-validator.js","../../src/uploader/uploader.js","../../src/color-picker/color-picker.js","../../src/textbox/textbox.js"],"sourcesContent":["/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]'\n};\n/**\n * Generate required masking elements to the MaskedTextBox from user mask input.\n *\n * @hidden\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 1) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * Apply mask ability with masking elements to the MaskedTextBox.\n *\n * @hidden\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * To wire required events to the MaskedTextBox.\n *\n * @hidden\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n EventHandler.add(this.element, 'mousedown', maskInputMouseDownHandler, this);\n EventHandler.add(this.element, 'mouseup', maskInputMouseUpHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', resetFormHandler, this);\n }\n }\n}\n/**\n * To unwire events attached to the MaskedTextBox.\n *\n * @hidden\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n EventHandler.remove(this.element, 'mousedown', maskInputMouseDownHandler);\n EventHandler.remove(this.element, 'mouseup', maskInputMouseUpHandler);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', resetFormHandler);\n }\n}\n/**\n * To bind required events to the MaskedTextBox clearButton.\n *\n * @hidden\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide')) {\n clear.call(this, e);\n this.value = '';\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\nfunction resetFormHandler() {\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n this.value = this.initInputValue;\n }\n}\n/**\n * To get masked value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * To extract raw value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((this._callPasteHandler || !isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputMouseDownHandler() {\n this.isClicked = true;\n}\nexport function maskInputMouseUpHandler() {\n this.isClicked = false;\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n var inputElement = this.element;\n var startIndex = 0;\n var modelValue = strippedValue.call(this, inputElement);\n var toAllowForward = false;\n var toAllowBackward = false;\n var eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n if (!this.isClicked) {\n triggerFocus.call(this, eventArgs, inputElement);\n }\n if (this.mask) {\n if (!(!(modelValue === null || modelValue === '') || this.floatLabelType === 'Always' ||\n this.placeholder === null || this.placeholder === '')) {\n inputElement.value = this.promptMask;\n }\n setTimeout(function () {\n if (inputElement.selectionStart === _this.promptMask.length ||\n inputElement.value[inputElement.selectionStart] === _this.promptChar) {\n toAllowForward = true;\n }\n else {\n for (var i = inputElement.selectionStart; i < _this.promptMask.length; i++) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowForward = false;\n break;\n }\n }\n else {\n toAllowForward = true;\n break;\n }\n }\n }\n });\n setTimeout(function () {\n var backSelectionStart = inputElement.selectionStart - 1;\n if (backSelectionStart === _this.promptMask.length - 1 ||\n inputElement.value[backSelectionStart] === _this.promptChar) {\n toAllowBackward = true;\n }\n else {\n for (var i = backSelectionStart; i >= 0; i--) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowBackward = false;\n break;\n }\n }\n else {\n toAllowBackward = true;\n break;\n }\n }\n }\n });\n if ((this.isClicked || (this.floatLabelType !== 'Always' &&\n ((modelValue === null || modelValue === '') &&\n (this.placeholder !== null && this.placeholder !== ''))))) {\n for (startIndex = 0; startIndex < this.promptMask.length; startIndex++) {\n if (inputElement.value[startIndex] === this.promptChar) {\n setTimeout(function () {\n if (toAllowForward || toAllowBackward) {\n inputElement.selectionEnd = startIndex;\n inputElement.selectionStart = startIndex;\n }\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: _this.value,\n maskedValue: inputElement.value,\n container: _this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n });\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(this.promptChar))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(this, eventArgs, inputElement);\n }\n this.isClicked = false;\n }\n }\n}\nexport function triggerFocus(eventArgs, inputElement) {\n this.trigger('focus', eventArgs, function (eventArgs) {\n inputElement.selectionStart = eventArgs.selectionStart;\n inputElement.selectionEnd = eventArgs.selectionEnd;\n });\n}\nexport function maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: this.inputObj.container\n };\n this.trigger('blur', this.blurEventArgs);\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n if (Browser.isIE === true && this.element.value === '' && this.floatLabelType === 'Never') {\n return;\n }\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask && !this.readonly) {\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var deleteEndIndex = this.element.selectionEnd;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n sIndex++;\n }\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (event.keyCode === 46 && multipleDel && isDeleted) {\n this.element.selectionStart = this.element.selectionEnd = deleteEndIndex;\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask && !this.readonly) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n if (event.keyCode === 32 && key === ' ' && this.promptChar === ' ') {\n this.element.selectionStart = this.element.selectionEnd = this.element.selectionStart - key.length;\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction triggerMaskChangeEvent(event, oldValue) {\n var prevOnChange = this.isProtectedOnChange;\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false, isInteracted: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteracted = true;\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n this.isProtectedOnChange = true;\n this.value = this.changeEventArgs.value;\n this.isProtectedOnChange = prevOnChange;\n merge(eventArgs, this.changeEventArgs);\n /* istanbul ignore next */\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask && !this.readonly) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n if (!isNullOrUndefined(parentElement)) {\n removeClass([parentElement], ERROR);\n }\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * Validates user input using masking elements '<' , '>' and '|'.\n *\n * @hidden\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * To set updated values in the MaskedTextBox.\n *\n * @hidden\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '' && !(val === null && this.floatLabelType === 'Never' && this.placeholder)) {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * To set updated values in the input element.\n *\n * @hidden\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * Provide mask support to input textbox through utility method.\n *\n * @hidden\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * Gets raw value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * Gets masked value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * Arguments to perform undo and redo functionalities.\n *\n * @hidden\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar maskUndo = new MaskUndo();\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction == undefined || isBindClearAction) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '<input placeholder=\"' + placeholder + '\"/>';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n innerWrapper.appendChild(result[i]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\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, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * <input type='text' id=\"numeric\"/>\n * ```\n * ```typescript\n * <script>\n * var numericObj = new NumericTextBox({ value: 10 });\n * numericObj.appendTo(\"#numeric\");\n * </script>\n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isVue = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === \"touchmove\") {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete', 'tabindex', 'aria-valuemin',\n 'aria-valuemax', 'aria-live', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach } from '@syncfusion/ej2-base';\nimport { removeClass, Browser, closest } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nvar ROOT = 'e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\nvar MASKINPUT_FOCUS = 'e-input-focus';\nvar wrapperAttr = ['title', 'style', 'class'];\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * <input id=\"mask\" type=\"text\" />\n * ```\n * ```typescript\n * <script>\n * var maskObj = new MaskedTextBox({ mask: \"(999) 9999-999\" });\n * maskObj.appendTo('#mask');\n * </script>\n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n /**\n *\n * @param {MaskedTextBoxModel} options - Specifies the MaskedTextBox model.\n * @param {string | HTMLElement | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function MaskedTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initInputValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isClicked = false;\n _this.maskOptions = options;\n return _this;\n }\n /**\n * Gets the component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.blurEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkHtmlAttributes(false);\n if (this.formElement) {\n this.initInputValue = this.value;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Initializes the component rendering.\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n this.updateHTMLAttrToWrapper();\n if (this.element.name === '') {\n this.element.setAttribute('name', this.element.id);\n }\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n this.preEleVal = this.element.value;\n if (!Browser.isDevice && (Browser.info.version === '11.0' || Browser.info.name === 'edge')) {\n this.element.blur();\n }\n if (Browser.isDevice && Browser.isIos) {\n this.element.blur();\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n }\n this.renderComplete();\n }\n };\n MaskedTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n MaskedTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getValidClassList(newClass), [this.inputObj.container], this.getValidClassList(oldClass));\n };\n MaskedTextBox.prototype.getValidClassList = function (maskClassName) {\n var result = maskClassName;\n if (!isNullOrUndefined(maskClassName) && maskClassName !== '') {\n result = (maskClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n MaskedTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputObj.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var maskStyle = this.inputObj.container.getAttribute(key);\n maskStyle = !isNullOrUndefined(maskStyle) ? (maskStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.inputObj.container.setAttribute(key, maskStyle);\n }\n else {\n this.inputObj.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if ((this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') ||\n this.element.value === this.promptMask && this.floatLabelType === 'Never') {\n setElementValue.call(this, '');\n }\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputObj.container.style.width = formatUnit(width);\n this.element.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n var elementWidth = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n this.inputObj.container.style.width = elementWidth;\n this.element.style.width = elementWidth;\n }\n }\n };\n MaskedTextBox.prototype.checkHtmlAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes)\n : ['placeholder', 'disabled', 'value', 'readonly'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'placeholder':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['enabled'] === undefined)) || isDynamic) {\n var isEnabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: isEnabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['readonly'] === undefined)) || isDynamic) {\n var isReadonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: isReadonly }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = this.getValidClassList(this.cssClass);\n }\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {MaskedTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {MaskedTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element, this.floatLabelType, this.inputObj.container);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'mask':\n {\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n }\n break;\n case 'promptChar': {\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete',\n 'aria-live', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property({})\n ], MaskedTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"blur\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n * var sliderObj = new Slider({ value: 10 });\n * sliderObj.appendTo('#slider');\n * </script>\n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n // eslint-disable-next-line\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n if (this.element.tagName === 'EJS-SLIDER') {\n if (this.getTheme(this.sliderContainer) == \"none\") {\n setTimeout(function () {\n _this.refresh();\n }, 0);\n }\n }\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isBootstrap5 = this.getTheme(this.sliderContainer) === 'bootstrap5';\n this.isMaterialTooltip = this.isMaterial && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = this.tooltipObj.content;\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n _this.tooltipObj.content = observedArgs.text;\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || (this.isMaterial && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isBootstrap4 || this.isTailwind || this.isBootstrap5,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = this.isMaterialTooltip ? 'Always' : (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span, tickWidth);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.tooltipObj.content, isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n // eslint-disable-next-line\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n // eslint-disable-next-line\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n // eslint-disable-next-line\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n this.changeEvent('changed', evt);\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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 { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n * <form id='formId'>\n * <input type='text' name='Name' />\n * <input type='text' name='Age' />\n * </form>\n * <script>\n * let formObject = new FormValidator('#formId', {\n * rules: { Name: { required: true }, Age: { range: [18, 30] } };\n * });\n * formObject.validate();\n * </script>\n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[rule] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { select, selectAll } from '@syncfusion/ej2-base';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * <input type='file' name='images[]' id='upload'/>\n * ```\n * ```typescript\n * <script>\n * var uploadObj = new Uploader();\n * uploadObj.appendTo('#upload');\n * </script>\n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n *\n * @param {UploaderModel} options - Specifies the Uploader model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.uploadedFilesData = [];\n _this.base64String = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n _this.btnTabIndex = '0';\n _this.disableKeyboardNavigation = false;\n _this.count = -1;\n _this.actionCompleteCount = 0;\n _this.flag = true;\n _this.selectedFiles = [];\n _this.uploaderName = 'UploadFiles';\n _this.fileStreams = [];\n _this.newFileRef = 0;\n _this.isFirstFileOnSelection = false;\n _this.dragCounter = 0;\n /**\n * Get the file item(li) which are shown in file list.\n *\n * @private\n */\n _this.fileList = [];\n /**\n * Get the data of files which are shown in file list.\n *\n * @private\n */\n _this.filesData = [];\n _this.uploaderOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {UploaderModel} newProp - Returns the dynamic property value of the component.\n * @param {UploaderModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.updateDropArea();\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHTMLAttributes(true);\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'template':\n this.clearAll();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'sequentialUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n if (this.uploadWrapper && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + DROP_AREA))) {\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n /* istanbul ignore next */\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled', invalidFileSelection: 'Invalid files selected', totalFiles: 'Total files',\n size: 'Size'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.formRendered();\n this.updateHTMLAttrToElement();\n this.checkHTMLAttributes(false);\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n this.keyConfigs = {\n enter: 'enter'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n this.browserName = Browser.info.name;\n this.uploaderName = this.element.getAttribute('name');\n };\n Uploader.prototype.formRendered = function () {\n var parentEle = closest(this.element, 'form');\n if (!isNullOrUndefined(parentEle)) {\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist(['filesData']);\n };\n /**\n * Return the module name of the component.\n *\n * @returns {string} Returns the component name.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.updateHTMLAttrToWrapper();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n this.setCSSClass();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n if (!this.isPreloadFiles) {\n this.uploadButton.focus();\n }\n this.wireActionButtonEvents();\n };\n /* istanbul ignore next */\n Uploader.prototype.serverActionButtonsEventBind = function (element) {\n if (element && !this.isForm) {\n this.browseButton.blur();\n this.actionButtons = element;\n this.uploadButton = this.actionButtons.querySelector('.e-file-upload-btn');\n this.clearButton = this.actionButtons.querySelector('.e-file-clear-btn');\n this.uploadButton.focus();\n this.unwireActionButtonEvents();\n this.wireActionButtonEvents();\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.textContent);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.textContent);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (this.files.length) {\n if (this.enablePersistence && this.filesData.length) {\n this.createFileList(this.filesData);\n return;\n }\n if (isNullOrUndefined(this.files[0].size)) {\n return;\n }\n this.isPreloadFiles = true;\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n if (this.sequentialUpload) {\n this.count = this.filesData.length - 1;\n }\n this.isPreloadFiles = false;\n }\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n select(this.dropArea, document);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n if (!dropTextArea) {\n this.createDropTextHint();\n }\n else {\n dropTextArea.innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n }\n if (!enableDropText && dropTextArea) {\n remove(dropTextArea);\n }\n }\n else if (!isNullOrUndefined(this.uploaderOptions) && this.uploaderOptions.dropArea === undefined) {\n this.createDropTextHint();\n this.dropZoneElement = this.uploadWrapper;\n this.setProperties({ dropArea: this.uploadWrapper }, true);\n }\n this.bindDropEvents();\n };\n Uploader.prototype.updateDropArea = function () {\n if (this.dropArea) {\n this.setDropArea();\n }\n else {\n this.dropZoneElement = null;\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (dropTextArea) {\n remove(dropTextArea);\n }\n }\n };\n Uploader.prototype.createDropTextHint = function () {\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n };\n Uploader.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n Uploader.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValues = (this.htmlAttributes[pro].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.uploadWrapper], updatedClassValues.split(' '));\n }\n }\n else if (pro === 'style') {\n var uploadStyle = this.uploadWrapper.getAttribute(pro);\n uploadStyle = !isNullOrUndefined(uploadStyle) ? (uploadStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.uploadWrapper.setAttribute(pro, uploadStyle);\n }\n else {\n this.uploadWrapper.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n newAttr.value = 'multiple';\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.sequenceUpload(fileData);\n }\n else {\n this.upload(fileData);\n }\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.sequenceUpload = function (fileData) {\n if (this.filesData.length - fileData.length === 0 ||\n this.filesData[(this.filesData.length - fileData.length - 1)].statusCode !== '1') {\n ++this.count;\n var isFileListCreated = this.showFileList ? false : true;\n if (typeof this.filesData[this.count] === 'object') {\n this.isFirstFileOnSelection = false;\n this.upload(this.filesData[this.count], isFileListCreated);\n if (this.filesData[this.count].statusCode === '0') {\n this.sequenceUpload(fileData);\n }\n }\n else {\n --this.count;\n }\n }\n };\n Uploader.prototype.setCSSClass = function (oldCSSClass) {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(this.cssClass) && updatedCssClassValue !== '') {\n addClass([this.uploadWrapper], updatedCssClassValue.split(updatedCssClassValue.indexOf(',') > -1 ? ',' : ' '));\n }\n var updatedOldCssClass = oldCSSClass;\n if (!isNullOrUndefined(oldCSSClass)) {\n updatedOldCssClass = (oldCSSClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCSSClass) && updatedOldCssClass !== '') {\n removeClass([this.uploadWrapper], updatedOldCssClass.split(' '));\n }\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n if (!isNullOrUndefined(metaData)) {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n var target = e.target.parentElement;\n var fileData = this.filesData[this.fileList.indexOf(target)];\n this.retry(fileData);\n }\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = e.target.parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n if (this.sequentialUpload) {\n this.sequenceUpload(this.filesData);\n }\n else {\n this.upload(this.filesData);\n }\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n /* istanbul ignore next */\n if (this.sequentialUpload) {\n this.count = -1;\n }\n this.actionCompleteCount = 0;\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n EventHandler.add(this.dropZoneElement, 'dragenter', this.onDragEnter, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n EventHandler.remove(this.dropZoneElement, 'dragenter', this.onDragEnter);\n }\n };\n Uploader.prototype.onDragEnter = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n this.dragCounter = this.dragCounter + 1;\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.onDragLeave = function () {\n if (!this.enabled) {\n return;\n }\n this.dragCounter = this.dragCounter - 1;\n if (!this.dragCounter) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n }\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.dropEffect !== 'Default') {\n e.dataTransfer.dropEffect = this.dropEffect.toLowerCase();\n }\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.dropElement = function (e) {\n this.dragCounter = 0;\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.getSelectedFiles = function (index) {\n var data = [];\n var liElement = this.fileList[index];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < index; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n for (var j = startIndex; j < (startIndex + nameElements); j++) {\n data.push(allFiles[j]);\n }\n return data;\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var formUpload = this.isFormUpload();\n var fileData = formUpload ? this.getSelectedFiles(index) : this.getFilesInArray(this.filesData[index]);\n if (isNullOrUndefined(fileData)) {\n return;\n }\n if (args.target.classList.contains(ABORT_ICON) && !formUpload) {\n fileData[0].statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.uploadSequential();\n }\n if (!(liElement.classList.contains(RESTRICT_RETRY))) {\n this.checkActionComplete(true);\n }\n }\n else if (!closest(args.target, '.' + SPINNER_PANE)) {\n this.remove(fileData, false, false, true, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n if (index <= this.count) {\n --this.count;\n }\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n e.cancel = true;\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n });\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n };\n ajax.onLoad = function (e) {\n _this.removeCompleted(e, selectedFiles, custom);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.removeFailed(e, selectedFiles, custom);\n return {};\n };\n ajax.send(formData);\n };\n Uploader.prototype.removingEventCallback = function (eventArgs, formData, selectedFiles, file) {\n /* istanbul ignore next */\n var name = this.element.getAttribute('name');\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ?\n liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile, selectedFiles.name);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n this.updateFormData(formData, eventArgs.customFormData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateCustomheader = function (request, currentRequest) {\n if (currentRequest.length > 0 && currentRequest[0]) {\n var _loop_2 = function (i) {\n var data = currentRequest[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n request.setRequestHeader(Object.keys(data)[0], value);\n };\n for (var i = 0; i < currentRequest.length; i++) {\n _loop_2(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n }\n else {\n this.removeFailed(e, files, customTemplate);\n }\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n rootElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n var statusElement = rootElement.querySelector('.' + STATUS);\n if (statusElement) {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items = this.multiple ?\n event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_3 = function (i) {\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_3(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; items && i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\n if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n var directoryReader = item.createReader();\n this.readFileFromDirectory(directoryReader, event);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n var _this = this;\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i], event);\n }\n _this.pushFilesEntries(event);\n if (entries.length) {\n _this.readFileFromDirectory(directoryReader);\n }\n });\n };\n Uploader.prototype.pushFilesEntries = function (event) {\n var _this = this;\n var files = [];\n var _loop_4 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n if (_this.filesEntries.length) {\n var path = _this.filesEntries[i].fullPath;\n files.push({ 'path': path, 'file': fileObj });\n if (i === _this.filesEntries.length - 1) {\n _this.filesEntries = [];\n _this.renderSelectedFiles(event, files, true);\n }\n }\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_4(i);\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n /* istanbul ignore next */\n if (args.type === 'drop') {\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = this.sortFilesList = args.dataTransfer.files;\n if (this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n this.element.files = files;\n }\n if (files.length > 0) {\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getBase64 = function (file) {\n return new Promise(function (resolve, reject) {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function () { return resolve(fileReader.result); };\n fileReader.onerror = function (error) { return reject(error); };\n });\n };\n /* istanbul ignore next */\n /* tslint:ignore */\n Uploader.prototype.renderSelectedFiles = function (args, targetFiles, directory, paste) {\n var _this = this;\n this.base64String = [];\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false,\n currentRequest: null,\n customFormData: null\n };\n /* istanbul ignore next */\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n this.flag = true;\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n this.updateInitialFileDetails(args, targetFiles, file, i, fileData, directory, paste);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs, function (eventArgs) {\n _this._internalRenderSelect(eventArgs, fileData);\n });\n };\n Uploader.prototype.updateInitialFileDetails = function (args, \n // eslint-disable-next-line @typescript-eslint/indent\n targetFiles, file, i, fileData, directory, paste) {\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1',\n id: getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name)\n };\n /* istanbul ignore next */\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n };\n Uploader.prototype._internalRenderSelect = function (eventArgs, fileData) {\n if (!eventArgs.cancel) {\n /* istanbul ignore next */\n this.selectedFiles = this.selectedFiles.concat(fileData);\n this.btnTabIndex = this.disableKeyboardNavigation ? '-1' : '0';\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n for (var j = 0; j < eventArgs.modifiedFilesData.length; j++) {\n for (var k = 0; k < fileData.length; k++) {\n if (eventArgs.modifiedFilesData[j].id === fileData[k].id) {\n eventArgs.modifiedFilesData[j].rawFile = fileData[k].rawFile;\n }\n }\n }\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData, true);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n this.raiseActionComplete();\n this.isFirstFileOnSelection = true;\n }\n };\n Uploader.prototype.allowUpload = function () {\n var allowFormUpload = false;\n if (this.isForm && (!isNullOrUndefined(this.asyncSettings.saveUrl) && this.asyncSettings.saveUrl !== '')) {\n allowFormUpload = true;\n }\n return allowFormUpload;\n };\n Uploader.prototype.isFormUpload = function () {\n var isFormUpload = false;\n if (this.isForm && ((isNullOrUndefined(this.asyncSettings.saveUrl) || this.asyncSettings.saveUrl === '')\n && (isNullOrUndefined(this.asyncSettings.removeUrl) || this.asyncSettings.removeUrl === ''))) {\n isFormUpload = true;\n }\n return isFormUpload;\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (this.browserName !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.isPreLoadFile = function (fileData) {\n var isPreload = false;\n for (var i = 0; i < this.files.length; i++) {\n if (this.files[i].name === fileData.name.slice(0, fileData.name.lastIndexOf('.')) && this.files[i].type === fileData.type) {\n isPreload = true;\n }\n }\n return isPreload;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var listElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, listElement);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, listElement);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(listElement);\n this.fileList.push(listElement);\n }\n this.renderReactTemplates();\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formFileList = function (fileData, files) {\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n var fileContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var statusMessage;\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var fileNameEle = this.createElement('span', { className: FILE_NAME });\n fileNameEle.innerHTML = this.getFileNameOnly(listItem.name);\n var fileTypeEle = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileTypeEle.innerHTML = '.' + fileType;\n if (!fileType) {\n fileTypeEle.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n fileContainer.appendChild(fileNameEle);\n fileContainer.appendChild(fileTypeEle);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileTypeEle);\n rtlContainer.appendChild(fileNameEle);\n fileContainer.appendChild(rtlContainer);\n }\n this.truncateName(fileNameEle);\n statusMessage = this.formValidateFileInfo(listItem, fileList);\n }\n fileList.appendChild(fileContainer);\n this.setListToFileInfo(fileData, fileList);\n var index = this.listParent.querySelectorAll('li').length;\n var infoEle = this.createElement('span');\n if (fileList.classList.contains(INVALID_FILE)) {\n infoEle.classList.add(STATUS);\n infoEle.classList.add(INVALID_FILE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n infoEle.classList.add(fileData.length > 1 ? INFORMATION : FILE_SIZE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData)) : this.bytesToSize(fileData[0].size);\n this.createFormInput(fileData);\n }\n fileContainer.appendChild(infoEle);\n if (isNullOrUndefined(fileList.querySelector('.e-icons'))) {\n var iconElement = this.createElement('span', { className: 'e-icons', attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n fileList.appendChild(fileContainer);\n fileList.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n iconElement.classList.add(REMOVE_ICON);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n };\n Uploader.prototype.formValidateFileInfo = function (listItem, fileList) {\n var statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n this.addInvalidClass(fileList);\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n this.addInvalidClass(fileList);\n statusMessage = typeValidationMessage;\n }\n return statusMessage;\n };\n Uploader.prototype.addInvalidClass = function (fileList) {\n fileList.classList.add(INVALID_FILE);\n };\n Uploader.prototype.createFormInput = function (fileData) {\n var inputElement = this.element.cloneNode(true);\n inputElement.classList.add(HIDDEN_INPUT);\n for (var _i = 0, fileData_3 = fileData; _i < fileData_3.length; _i++) {\n var listItem = fileData_3[_i];\n listItem.input = inputElement;\n }\n inputElement.setAttribute('name', this.uploaderName);\n this.uploadWrapper.querySelector('.' + INPUT_WRAPPER).appendChild(inputElement);\n if (this.browserName !== 'msie' && this.browserName !== 'edge') {\n this.element.value = '';\n }\n };\n Uploader.prototype.getFileSize = function (fileData) {\n var fileSize = 0;\n for (var _i = 0, fileData_4 = fileData; _i < fileData_4.length; _i++) {\n var file = fileData_4[_i];\n fileSize += file.size;\n }\n return fileSize;\n };\n Uploader.prototype.mergeFileInfo = function (fileData, fileList) {\n var result = {\n name: '',\n rawFile: '',\n size: 0,\n status: '',\n type: '',\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '1',\n list: fileList\n };\n var fileNames = [];\n var type = '';\n for (var _i = 0, fileData_5 = fileData; _i < fileData_5.length; _i++) {\n var listItem = fileData_5[_i];\n fileNames.push(listItem.name);\n type = listItem.type;\n }\n result.name = fileNames.join(', ');\n result.size = this.getFileSize(fileData);\n result.type = type;\n result.status = this.statusForFormUpload(fileData, fileList);\n return result;\n };\n Uploader.prototype.statusForFormUpload = function (fileData, fileList) {\n var isValid = true;\n var statusMessage;\n for (var _i = 0, fileData_6 = fileData; _i < fileData_6.length; _i++) {\n var listItem = fileData_6[_i];\n statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n isValid = false;\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n isValid = false;\n statusMessage = typeValidationMessage;\n }\n }\n if (!isValid) {\n fileList.classList.add(INVALID_FILE);\n statusMessage = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n statusMessage = this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData));\n }\n return statusMessage;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formCustomFileList = function (fileData, files) {\n this.createParentUL();\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n this.setListToFileInfo(fileData, fileList);\n var result = this.mergeFileInfo(fileData, fileList);\n fileList.setAttribute('data-file-name', result.name);\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(result, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, fileList);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, fileList);\n }\n var index = this.listParent.querySelectorAll('li').length;\n if (!fileList.classList.contains(INVALID_FILE)) {\n this.createFormInput(fileData);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n this.renderReactTemplates();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Create the file list for specified files data.\n *\n * @param { FileInfo[] } fileData - Specifies the files data for file list creation.\n * @returns {void}\n */\n Uploader.prototype.createFileList = function (fileData, isSelectedFile) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formCustomFileList(fileData, this.element.files);\n }\n else {\n this.createCustomfileList(fileData);\n }\n }\n else if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formFileList(fileData, this.element.files);\n }\n else {\n for (var _i = 0, fileData_7 = fileData; _i < fileData_7.length; _i++) {\n var listItem = fileData_7[_i];\n var liElement = this.createElement('li', {\n className: FILE,\n attrs: { 'data-file-name': listItem.name, 'data-files-count': '1' }\n });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileExtension.innerHTML = '.' + fileType;\n if (!fileType) {\n fileExtension.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons',\n attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n var preventActionComplete = this.flag;\n if (this.isPreLoadFile(listItem)) {\n this.flag = false;\n this.checkActionComplete(true);\n this.flag = preventActionComplete;\n }\n }\n }\n };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n };\n Uploader.prototype.setListToFileInfo = function (fileData, fileList) {\n for (var _i = 0, fileData_8 = fileData; _i < fileData_8.length; _i++) {\n var listItem = fileData_8[_i];\n listItem.list = fileList;\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n if (this.browserName !== 'edge' && nameElement.offsetWidth < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n /* istanbul ignore next */\n }\n else if (nameElement.offsetWidth + 1 < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode, updateLiStatus) {\n if (updateLiStatus === void 0) { updateLiStatus = true; }\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n if (updateLiStatus) {\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if (!isNullOrUndefined(files) && ((!isNullOrUndefined(this.filesData[i].id) &&\n !isNullOrUndefined(files.id)) ? (this.filesData[i].name === files.name &&\n this.filesData[i].id === files.id) : this.filesData[i].name === files.name)) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false,\n customFormData: []\n };\n this.trigger('canceling', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n }\n else {\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = _this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n if (!isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n deleteIcon.parentElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement, false);\n }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n /* istanbul ignore next */\n liElement.classList.add(RESTRICT_RETRY);\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var _this = this;\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadSuccessMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '2', false), statusText: statusMessage\n };\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement)) {\n var spinnerEle = liElement.querySelector('.' + SPINNER_PANE);\n if (!isNullOrUndefined(spinnerEle)) {\n hideSpinner(liElement);\n detach(spinnerEle);\n }\n }\n this.trigger('success', args, function (args) {\n _this.updateStatus(file, args.statusText, '2');\n _this.uploadedFilesData.push(file);\n _this.trigger('change', { file: _this.uploadedFilesData });\n _this.checkActionButtonStatus();\n if (_this.fileList.length > 0) {\n if ((!(_this.getLiElement(file)).classList.contains(RESTRICT_RETRY))) {\n _this.uploadSequential();\n _this.checkActionComplete(true);\n }\n else {\n /* istanbul ignore next */\n (_this.getLiElement(file)).classList.remove(RESTRICT_RETRY);\n }\n }\n });\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var _this = this;\n var li = this.getLiElement(file);\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '0', false), statusText: statusMessage\n };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args, function (args) {\n _this.updateStatus(file, args.statusText, '0');\n _this.checkActionButtonStatus();\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.checkActionComplete = function (increment) {\n if (increment) {\n ++this.actionCompleteCount;\n }\n else {\n --this.actionCompleteCount;\n }\n this.raiseActionComplete();\n };\n Uploader.prototype.raiseActionComplete = function () {\n if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n this.flag = false;\n var eventArgs = {\n fileData: []\n };\n eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n this.trigger('actionComplete', eventArgs);\n }\n };\n Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n var matchFiles = [];\n var matchFilesIndex = 0;\n for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n var selectedFileData = selectedFiles[selectFileIndex];\n for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n if (this.filesData[fileDataIndex].name === selectedFileData.name) {\n matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n ++matchFilesIndex;\n }\n }\n }\n return matchFiles;\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () {\n _this.animateProgressBar(li, callType);\n }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n if (extensions !== '' && !isNullOrUndefined(extensions)) {\n this.element.setAttribute('accept', extensions);\n }\n else {\n this.element.removeAttribute('accept');\n }\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n try {\n if (selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n if (this.enableRtl) {\n addClass([this.uploadWrapper], RTL);\n }\n else {\n removeClass([this.uploadWrapper], RTL);\n }\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['accept', 'multiple', 'disabled'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'accept':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['allowedExtensions'] === undefined))\n || isDynamic) {\n this.setProperties({ allowedExtensions: this.element.getAttribute('accept') }, !isDynamic);\n this.initialAttr.accept = this.allowedExtensions;\n }\n break;\n case 'multiple':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['multiple'] === undefined)) || isDynamic) {\n var isMutiple = this.element.getAttribute(prop) === 'multiple' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ multiple: isMutiple }, !isDynamic);\n this.initialAttr.multiple = true;\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['enabled'] === undefined)) || isDynamic) {\n var isDisabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: isDisabled }, !isDynamic);\n this.initialAttr.disabled = true;\n }\n }\n }\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom, fileIndex) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom, fileIndex);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append(this.uploaderName, blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.chunkUploadComplete(e, metaData, custom);\n return {};\n };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n if (eventArgs.currentChunkIndex === 0) {\n // This event is currently not required but to avoid breaking changes for previous customer, we have included.\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n else {\n _this.trigger('chunkUploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.chunkUploadFailed(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.uploadingEventCallback = function (formData, eventArgs, e, file) {\n if (eventArgs.cancel) {\n this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n var liElement = this.getLiElement(eventArgs.fileData);\n if (liElement) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n var removeIcon = liElement.querySelector('.' + REMOVE_ICON);\n if (removeIcon) {\n removeIcon.parentElement.insertBefore(this.pauseButton, removeIcon);\n }\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement);\n }, false);\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize,\n response: requestResponse\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false, customFormData: [] };\n this.trigger('canceling', eventArgs_1, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n _this.sendNextRequest(metaData);\n }\n else {\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = _this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n formData.append('cancelUploading', metaData.file.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removeChunkFile(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n }\n });\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement && !isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n if (metaData.file.statusCode !== '4') {\n this.sendNextRequest(metaData);\n }\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon && deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon && deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon && pauseIcon.classList.add(RETRY_ICON);\n pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)\n && !isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n if (metaData.file.statusCode !== '4') {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n }\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs, function (eventArgs) {\n // To prevent triggering of failure event\n if (!eventArgs.cancel) {\n if (metaData.retryCount < _this.asyncSettings.retryCount) {\n setTimeout(function () {\n _this.retryRequest(liElement, metaData, custom);\n }, _this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n _this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n _this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON) ?\n liElement.querySelector('.' + ABORT_ICON) : liElement.querySelector('.' + REMOVE_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file_1 = metaData.file;\n var failureMessage = _this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: _this.updateStatus(file_1, failureMessage, '0', false),\n statusText: failureMessage\n };\n _this.trigger('failure', args, function (args) {\n _this.updateStatus(file_1, args.statusText, '0');\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n }\n }\n });\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n /* istanbul ignore next */\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n /* istanbul ignore next */\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var progressVal = void 0;\n var totalChunks = Math.ceil(metaData.file.size / this.asyncSettings.chunkSize) - 1;\n if (this.asyncSettings.chunkSize && totalChunks) {\n progressVal = Math.round(metaData.chunkIndex / totalChunks * 100);\n this.changeProgressValue(liElement, progressVal.toString() + '%');\n }\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)\n && isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n if (this.browserName === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n var abortIcon = liElement.querySelector('.' + ABORT_ICON);\n abortIcon.parentElement.insertBefore(this.pauseButton, abortIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) {\n _this.checkPausePlayAction(e);\n }, false);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n *\n * @param { number } bytes - Specifies the file size in bytes.\n * @returns {string}\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n *\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns {File[]}\n */\n /* istanbul ignore next */\n Uploader.prototype.sortFileList = function (filesData) {\n filesData = filesData ? filesData : this.sortFilesList;\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearTemplate();\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n var attributes = ['aria-label', 'directory', 'webkitdirectory', 'tabindex'];\n for (var _i = 0, attributes_2 = attributes; _i < attributes_2.length; _i++) {\n var key = attributes_2[_i];\n this.element.removeAttribute(key);\n }\n if (!isNullOrUndefined(this.uploadWrapper)) {\n this.uploadWrapper.parentElement.appendChild(this.element);\n detach(this.uploadWrapper);\n }\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n *\n * @param { FileInfo | FileInfo[] } files - Specifies the files data for upload.\n * @param {boolean} custom - Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.upload = function (files, custom) {\n var _this = this;\n files = files ? files : this.filesData;\n if (this.sequentialUpload && (this.isFirstFileOnSelection || custom)) {\n this.sequenceUpload(files);\n }\n else {\n var uploadFiles_1 = this.getFilesInArray(files);\n var eventArgs = {\n customFormData: [],\n currentRequest: null,\n cancel: false\n };\n this.trigger('beforeUpload', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.uploadFiles(uploadFiles_1, custom);\n }\n });\n }\n };\n Uploader.prototype.getFilesInArray = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n /* istanbul ignore next */\n Uploader.prototype.serverReadFileBase64 = function (fileIndex, position, totalCount) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var file = _this.fileStreams[fileIndex].rawFile;\n try {\n var reader = new FileReader();\n reader.onload = (function (args) {\n return function () {\n try {\n var contents = args.result;\n var data = contents ? contents.split(';base64,')[1] : null;\n resolve(data);\n }\n catch (e) {\n reject(e);\n }\n };\n })(reader);\n reader.readAsDataURL(file.slice(position, position + totalCount));\n }\n catch (e) {\n reject(e);\n }\n });\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.uploadFileCount = function (ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var result = files.length;\n return result;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileRead = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var file = files[index];\n var fileCount = this.newFileRef++;\n this.fileStreams[fileCount] = file;\n return fileCount;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return null;\n }\n var file = files[index];\n if (!file) {\n return null;\n }\n return this.filesData[index];\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n for (var i = 0; i < selectedFiles.length; i++) {\n this.uploadFilesRequest(selectedFiles, i, custom);\n }\n };\n Uploader.prototype.uploadFilesRequest = function (selectedFiles, i, custom) {\n var _this = this;\n var cloneFiles = [];\n var chunkEnabled = this.checkChunkUpload();\n var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var getFileData;\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n });\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this.asyncSettings.chunkSize) {\n this.chunkUpload(selectedFiles[i], custom, i);\n }\n else {\n ajax.onLoad = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadComplete(e, selectedFiles[i], custom);\n return {};\n }\n };\n ajax.onUploadProgress = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.uploadFailed(e, selectedFiles[i]);\n return {};\n };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.spliceFiles = function (liIndex) {\n var liElement = this.fileList[liIndex];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < liIndex; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n var endIndex = (startIndex + nameElements) - 1;\n for (var j = endIndex; j >= startIndex; j--) {\n allFiles.splice(j, 1);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @param { boolean } postRawFile - Set false, to post file name only to the remove action.\n * @returns {void}\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n var _this = this;\n if (isNullOrUndefined(postRawFile)) {\n postRawFile = true;\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: postRawFile,\n currentRequest: null\n };\n var beforeEventArgs = {\n cancel: false,\n customFormData: [],\n currentRequest: null\n };\n this.trigger('beforeRemove', beforeEventArgs, function (beforeEventArgs) {\n if (!beforeEventArgs.cancel) {\n if (_this.isFormUpload()) {\n eventArgs.filesData = fileData;\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n var removingFiles = _this.getFilesInArray(fileData);\n var isLiRemoved = false;\n var liIndex = void 0;\n for (var _i = 0, removingFiles_1 = removingFiles; _i < removingFiles_1.length; _i++) {\n var data = removingFiles_1[_i];\n if (!isLiRemoved) {\n liIndex = _this.fileList.indexOf(data.list);\n }\n if (liIndex > -1) {\n var inputElement = !isNullOrUndefined(data.input) ? data.input : null;\n if (inputElement) {\n detach(inputElement);\n }\n _this.spliceFiles(liIndex);\n detach(_this.fileList[liIndex]);\n _this.fileList.splice(liIndex, 1);\n isLiRemoved = true;\n liIndex = -1;\n }\n }\n }\n });\n }\n else if (_this.isForm && (isNullOrUndefined(_this.asyncSettings.removeUrl) || _this.asyncSettings.removeUrl === '')) {\n eventArgs.filesData = _this.getFilesData();\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearAll();\n }\n });\n }\n else {\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : _this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = _this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n var _loop_5 = function (files) {\n var fileUploadedIndex = _this.uploadedFilesData.indexOf(files);\n if ((files.statusCode === '2' || files.statusCode === '4' || (files.statusCode === '0' &&\n fileUploadedIndex !== -1)) && validUrl) {\n _this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.removeFilesData(files, customTemplate);\n }\n });\n }\n else {\n _this.removeFilesData(files, customTemplate);\n }\n }\n if (args && !args.target.classList.contains(REMOVE_ICON)) {\n _this.checkActionComplete(false);\n }\n };\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n _loop_5(files);\n }\n }\n }\n });\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n *\n * @returns {void}\n */\n Uploader.prototype.clearAll = function () {\n var _this = this;\n if (isNullOrUndefined(this.listParent)) {\n if (this.browserName !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearData();\n _this.actionCompleteCount = 0;\n _this.count = -1;\n }\n });\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get the data of files which are shown in file list.\n *\n * @param { number } index - specifies the file list item(li) index.\n * @returns {FileInfo[]}\n */\n Uploader.prototype.getFilesData = function (index) {\n if (isNullOrUndefined(index)) {\n return this.filesData;\n }\n else {\n return this.getSelectedFiles(index);\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Pauses the in-progress chunked upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.pause = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.resume = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @param {boolean} custom -Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n if (this.sequentialUpload && this.isFirstFileOnSelection) {\n this.isFirstFileOnSelection = false;\n }\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns {void}\n */\n Uploader.prototype.cancel = function (fileData) {\n fileData = fileData ? fileData : this.filesData;\n var cancelingFiles = this.getFilesInArray(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property({})\n ], Uploader.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property('Default')\n ], Uploader.prototype, \"dropEffect\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"rendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"fileListRendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeRemove\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkUploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n/* eslint-enable @typescript-eslint/no-explicit-any */\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};\n/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * <input type=\"color\" id=\"color-picker\">\n * ```\n * ```typescript\n * <script>\n * let colorPickerObj: ColorPicker = new ColorPicker(null , \"#color-picker\");\n * </script>\n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n open: this.onOpen.bind(this),\n click: function () {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'presentation' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n this.setProperties({ 'value': cValue }, true);\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n });\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"onModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\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, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * <input name='images' id='textbox'/>\n * ```\n * ```typescript\n * <script>\n * var textboxObj = new TextBox();\n * textboxObj.appendTo('#textbox');\n * </script>\n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n /**\n *\n * @param {TextBoxModel} options - Specifies the TextBox model.\n * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n * @private\n */\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isAngular = false;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.isVue = false;\n _this.textboxOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n this.bindClearEvent();\n break;\n case 'width':\n Input.setWidth(newProp.width, this.textboxWrapper.container);\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!this.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkAttributes(true);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.respectiveElement);\n break;\n case 'type':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n this.respectiveElement.setAttribute('type', this.type);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n this.raiseChangeEvent();\n }\n break;\n case 'showClearButton':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n case 'autocomplete':\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else {\n this.removeAttributes(['autocomplete']);\n }\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n TextBox.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.formElement = closest(this.element, 'form');\n if (!isNullOrUndefined(this.formElement)) {\n this.isForm = true;\n }\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.multiline ?\n this.createElement('textarea') :\n this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id') {\n inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n if (attributeName === 'name') {\n this.element.removeAttribute('name');\n }\n }\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n this.element.setAttribute('role', 'textbox');\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n this.isHiddenInput = true;\n this.textarea = this.createElement('textarea');\n this.element.parentNode.insertBefore(this.textarea, this.element);\n this.element.setAttribute('type', 'hidden');\n this.textarea.setAttribute('name', this.element.getAttribute('name'));\n this.element.removeAttribute('name');\n this.textarea.setAttribute('role', this.element.getAttribute('role'));\n this.element.removeAttribute('role');\n this.textarea.setAttribute('id', getUniqueID('textarea'));\n var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var index = 0; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (this.element.hasAttribute(attributeName) && containerAttr.indexOf(attributeName) < 0 &&\n !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n // e-mappinguid attribute is handled for Grid component.\n this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n if (apiAttributes.indexOf(attributeName) < 0) {\n this.element.removeAttribute(attributeName);\n index--;\n }\n }\n }\n }\n };\n TextBox.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'autocomplete':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'type':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n this.setProperties({ type: this.element.type }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextBox.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getInputValidClassList(this.cssClass);\n }\n this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;\n this.textboxWrapper = Input.createInput({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValue,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.updateHTMLAttrToWrapper();\n if (this.isHiddenInput) {\n this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n }\n if (!isNullOrUndefined(this.value)) {\n this.initialValue = this.value;\n this.setInitialValue();\n }\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n this.removeAttributes(['autocomplete']);\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.respectiveElement.defaultValue = this.respectiveElement.value;\n Input.setWidth(this.width, this.textboxWrapper.container);\n this.renderComplete();\n };\n TextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[key]);\n if (updatedClassValues !== '') {\n addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.textboxWrapper.container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.textboxWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n TextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n };\n TextBox.prototype.getInputValidClassList = function (inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n TextBox.prototype.setInitialValue = function () {\n if (!this.isAngular) {\n this.respectiveElement.setAttribute('value', this.initialValue);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-autofill') &&\n this.textboxWrapper.container.classList.contains('e-outline')) {\n EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n }\n };\n TextBox.prototype.animationHandler = function () {\n this.textboxWrapper.container.classList.add('e-valid-input');\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n label.classList.add('e-label-top');\n if (label.classList.contains('e-label-bottom')) {\n label.classList.remove('e-label-bottom');\n }\n }\n };\n TextBox.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n this.isProtectedOnChange = prevOnChange;\n };\n TextBox.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textboxWrapper)) {\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n (this.previousValue !== this.respectiveElement.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.inputHandler = function (args) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var textboxObj = this;\n var eventArgs = {\n event: args,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textboxObj.localChange({ value: this.respectiveElement.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n this.raiseChangeEvent(args, true);\n args.stopPropagation();\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.respectiveElement.tagName !== 'TEXTAREA') {\n if (this.enabled) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR))) {\n Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.setProperties({ value: this.respectiveElement.value }, true);\n var eventArgs = {\n event: event,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.respectiveElement.value;\n this.raiseChangeEvent(event, true);\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-outline') &&\n this.textboxWrapper.container.classList.contains('e-autofill')) {\n EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (this.element.tagName === 'INPUT' && this.multiline) {\n detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);\n this.respectiveElement = this.element;\n this.element.removeAttribute('type');\n }\n this.respectiveElement.value = this.respectiveElement.defaultValue;\n this.respectiveElement.classList.remove('e-input');\n this.removeAttributes(['aria-placeholder', 'aria-disabled', 'aria-readonly', 'aria-labelledby']);\n if (!isNullOrUndefined(this.textboxWrapper)) {\n this.textboxWrapper.container.insertAdjacentElement('afterend', this.respectiveElement);\n detach(this.textboxWrapper.container);\n }\n this.textboxWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Adding the icons to the TextBox component.\n *\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for TextBox.\n * @returns {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n * @returns {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'class') {\n this.respectiveElement.classList.add(attributes[key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[key] }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n else {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @returns {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else {\n this.respectiveElement.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.respectiveElement && this.enabled) {\n this.respectiveElement.focus();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextBox.prototype.focusOut = function () {\n if (document.activeElement === this.respectiveElement && this.enabled) {\n this.respectiveElement.blur();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('on')\n ], TextBox.prototype, \"autocomplete\", void 0);\n __decorate([\n Property({})\n ], TextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"multiline\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n"],"names":["createMask","attributes","this","element","role","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","split","i","length","splitInnerMask","j","pushIntoRegExpCollec","call","chkSpace","customRegExpCollec","push","hiddenMask","promptChar","escapeMaskValue","promptMask","replace","isNullOrUndefined","customCharacters","RegExp","escapeNumber","match","substring","aria-invalid","applyMask","setElementValue","setMaskValue","value","wireEvents","EventHandler","add","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","maskInputMouseDownHandler","maskInputMouseUpHandler","enabled","bindClearEvent","formElement","resetFormHandler","unwireEvents","remove","showClearButton","inputObj","clearButton","resetHandler","e","preventDefault","classList","contains","clear","event","redoCollec","unshift","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","tagName","initInputValue","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","_callPasteHandler","regExpCollec","undefined","isClicked","_this","inputElement","modelValue","toAllowForward","toAllowBackward","eventArgs","maskedValue","container","triggerFocus","floatLabelType","placeholder","setTimeout","backSelectionStart","trigger","blurEventArgs","isFocus","labelElement","parentNode","querySelector","TOPLABEL","removeClass","readonly","sIndex_1","eIndex_1","oldValue_1","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","Browser","isIE","ctrlKey","keyCode","extend","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","type","isDeleted","initStartIndex","initEndIndex","curMask","deleteEndIndex","multipleDel","preValue","index","oldValue","prompt_1","elementValue","code","key","String","fromCharCode","isIosInvalid","prevOnChange","isProtectedOnChange","changeEventArgs","isInitial","isInteraction","isInteracted","merge","isAngular","preventChange","removeMaskError","val_1","startIndex_1","oldVal","trim","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileSwipeCheck","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","applySupportedValues","addMaskErrorClass","changeToLowerUpperCase","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","curVal","caseCount","indexOf","toUpperCase","toLowerCase","newVal","BOTTOMLABEL","Input","setValue","maskInput","args","inputEle","getMaskInput","UTILMASK","regularExpressions","getVal","getUtilMaskEle","getMaskedVal","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","createInput","internalCreateElement","makeElement","createElement","inputObject","buttons","floatType","isBindClearAction","bindClearAction","createInputContainer","insertBefore","appendChild","createFloatingInput","bindInitialEvent","properties","setClearButton","setAttribute","appendSpan","validateInputType","setPropertyValue","checkInputValue","addEventListener","parent","getParentNode","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","unwireFloatingEvents","removeEventListener","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","inputWrap","updateLabelState","getAttribute","checkFloatLabelType","_i","_a","Object","keys","setCssClass","cssClass","setEnabled","setEnableRtl","enableRtl","setPlaceholder","setReadonly","updateIconState","button","createClearButton","initial","insertAdjacentElement","wireClearBtnEvents","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","elements","oldClass","setWidth","width","style","formatUnit","textContent","aria-placeholder","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","isClear","attrs","removeFloating","input","detach","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","isRipple","_internalRipple","argsButton","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","ele","parentEle","createIconEle","iconClass","addIcon","position","icons","internalCreate","result_1","icon","result_2","prependSpan","innerWrapper","containerElement","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","INTREGEXP","wrapperAttributes","NumericTextBox","_super","options","isVue","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","nodeName","nodeValue","hasAttribute","tabindex","localeText","incrementTitle","decrementTitle","l10n","L10n","locale","getConstant","setProperties","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","checkAttributes","inputEleValue","validateMinMax","validateStep","updatePlaceholder","render","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","isNaN","strictMode","trimValue","decimals","roundNumber","hiddenInput","elementPrevValue","renderComplete","isDynamic","attributes_1","htmlAttributes","prop","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","Internationalization","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","inputWrapper","ROOT","updateHTMLAttrToWrapper","aria-readonly","validateHidden","class","name","childNodes","updateDataAttribute","attr","a","pro","updateCssClass","newClass","numericClassName","updatedClassValue","numericStyle","spinDown","title","aria-label","spinUp","wireSpinBtnEvents","min","Number","max","MAX_VALUE","formattedValue","aria-valuemin","toString","aria-valuemax","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusHandler","focusOutHandler","keyDownHandler","keyUpHandler","inputHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","test","preventHandler","iOS","navigator","platform","currentPos","prevPos","valArray","numericObject","getNumericObject","ignoreKeyCode","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","isDevice","parseValue","numerictextboxObj","userAgent","parsedValue","localChange","current","previous","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","serverDecimalSeparator","EXPREGEXP","valueString","toFixed","parseInt","decimalPart","result1","result2","cancelEvent","info","version","which","metaKey","currentChar","text","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","delay","isIos","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","destroy","attrArray","getText","focusIn","focusOut","blur","getPersistData","keyEntity","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","wrapperAttr","MaskedTextBox","maskOptions","checkHtmlAttributes","resetMaskedTextBox","setMaskPlaceholder","getValidClassList","maskClassName","updatedClassValues","maskStyle","setVal","dynamicPlaceholder","elementWidth","isEnabled","updatedCssClassValues","strippedValue_1","strippedVal","getMaskedValue","TicksData","apply","ChildProperty","ColorRangeData","LimitData","TooltipData","classNames","root","rtl","sliderHiddenInput","controlWrapper","sliderHandle","rangeBar","sliderButton","firstButton","secondButton","scale","tick","large","tickValue","sliderTooltip","sliderHover","sliderFirstHandle","sliderSecondHandle","sliderDisabled","sliderContainer","horizontalTooltipBefore","horizontalTooltipAfter","verticalTooltipBefore","verticalTooltipAfter","materialTooltip","materialTooltipOpen","materialTooltipActive","materialSlider","sliderTrack","sliderHorizantalColor","sliderVerticalColor","sliderHandleFocused","verticalSlider","horizontalSlider","sliderHandleStart","sliderTooltipStart","sliderTabHandle","sliderButtonIcon","sliderSmallSize","sliderTickPosition","sliderFirstTick","sliderLastTick","sliderButtonClass","sliderTooltipWrapper","sliderTabTrack","sliderTabRange","sliderActiveHandle","sliderMaterialHandle","sliderMaterialRange","sliderMaterialDefault","materialTooltipShow","materialTooltipHide","limits","limitBarDefault","limitBarFirst","limitBarSecond","dragHorizontal","dragVertical","Slider","horDir","verDir","transition","handle","transitionOnMaterialTooltip","scaleTransform","customAriaText","drag","isDragComplete","initialTooltip","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","formChecker","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","initialize","initRender","setZindex","getTheme","refresh","setCSSClass","oldCSSClass","isVisible","tooltipElement","showOn","window","getComputedStyle","getPropertyValue","tabIndex","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isMaterialTooltip","orientation","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","filter","css","firstElementChild","setTooltipTransform","tooltipCollision","tooltipOffsetValue","offsetY","offsetX","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","translate","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","Tooltip","showTipPointer","height","animation","open","effect","close","duration","opensOn","beforeOpen","bind","beforeCollision","beforeClose","tooltipBeforeClose","enableHtmlSanitizer","appendTo","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","start","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","firstChild","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","SanitizeHtmlHelper","sanitize","spanElement","tickText","tickElement","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","ariaValueText","isTickFormatted","valuenow","aria-valuetext","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","bottom","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","limitBar","preHandlePos1","values","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","getZindexPartial","pos","updateRangeValue","eventName","map","preHandlePos2","values_1","tempStartEnd","end","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","x","num","offsetWidth","top_1","offsetHeight","stepValueCalculation","percentStep","remain","addition","positionToValue","diff","evt","changedTouches","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","relatedTarget","removeChild","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","trackPosition","trackClassName","child","colorRange","startingPosition","endPosition","trackContainer","backgroundColor","color","border","Collection","Complex","regex","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","ErrorOption","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","url","date","dateIso","creditcard","number","digits","maxLength","minLength","rangeLength","tel","pattern","equalTo","rules","localeFunc","onIntlChange","on","afterLocalization","select","inputElements","selectAll","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","validateRules","data","rules_1","name_1","reset","clearForm","getInputElement","elements_1","errorClass","validClass","off","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","JSON","parse","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","clickHandler","submitHandler","clearEvents","excludeKeys","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","status","optionalValidationStatus","refer","params","param","currentRule","checkValidator","ruleValue","formats","for","errorOption","Message","errorContainer","outerHTML","containerId","customPlacement","nextSibling","display","checkRequired","inputType","option","Date","getTime","stringify","uNum","compareTo","Label","Base","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","PROGRESS_WRAPPER","PROGRESSBAR","UPLOAD_SUCCESS","UPLOAD_FAILED","PAUSE_UPLOAD","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","accept","multiple","uploadedFilesData","base64String","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","flag","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","dragCounter","fileList","filesData","uploaderOptions","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","setLocalizedTexts","preLocaleObj","template","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","abort","cancel","delete","pauseUpload","pause","resume","retry","fileUploadCancel","invalidFileSelection","totalFiles","size","formRendered","isPureReactComponent","props","keyConfigs","enter","browserName","documentElement","directoryUpload","renderBrowseButton","initializeUpload","isPreloadFiles","wireActionButtonEvents","serverActionButtonsEventBind","unwireActionButtonEvents","uploadButtonClick","clearButtonClick","uploadText","clearText","dropAreaWrapper","setDropArea","files","enablePersistence","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","allowUpload","showFileList","sequentialUpload","length_1","dropTextArea","dropArea","dropZoneElement","enableDropText","createDropTextHint","bindDropEvents","fileDropArea","uploadStyle","newAttr","createAttribute","setAttributeNode","checkAutoUpload","sequenceUpload","isFileListCreated","updatedOldCssClass","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","resetForm","unWireEvents","targetElement","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","click","dropElement","dragHover","onDragLeave","onPasteFile","onDragEnter","dropEffect","dataTransfer","item","clipboardData","items","pasteFile","kind","renderSelectedFiles","getAsFile","getSelectedFiles","liElement","allFiles","getFilesData","nameElements","selectedElement","formUpload","isFormUpload","getFilesInArray","spinnerTarget","createSpinner","showSpinner","uploadSequential","checkActionComplete","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","custom","ajax","Ajax","asyncSettings","removeUrl","emitError","formData","FormData","beforeSend","currentRequest","httpRequest","removingEventCallback","onLoad","removeCompleted","onError","removeFailed","send","postRawFile","append","updateFormData","customFormData","customData","updateCustomheader","request","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","this_1","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","this_2","targetFiles","sortFilesList","sortFileList","getBase64","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","error","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","updateInitialFileDetails","checkExtension","_internalRenderSelect","fileDetails","getUniqueID","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","saveUrl","singleUpload","removedList","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","str","dropFiles","extensions_1","extension","toLocaleLowerCase","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","isPreLoadFile","isPreload","createCustomfileList","fileData_1","listItem","listElement","data-file-name","uploadTemplateFn","templateComplier","liTempCompiler","isStringTemplate","fromElements","eventsArgs","renderReactTemplates","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","fileType","rtlContainer","truncateName","formValidateFileInfo","setListToFileInfo","infoEle","bytesToSize","getFileSize","createFormInput","iconElement","mergeFileInfo","addInvalidClass","typeValidationMessage","fileData_3","fileData_4","list","fileNames","fileData_5","join","statusForFormUpload","fileData_6","formCustomFileList","isSelectedFile","fileData_7","data-files-count","textContainer","textElement","fileExtension","preventActionComplete","getSlicedName","nameElement","dataset","tail","fileData_8","scrollWidth","setInitialAttributes","filterfileList","filterFiles","updateLiStatus","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","cancelUploadingFile","updateProgressBarClasses","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","spinnerEle","getSelectedFileStatus","matchFiles","matchFilesIndex","selectFileIndex","selectedFileData","fileDataIndex","callType","progressAnimation","Animation","animate","animateProgressBar","extensions","uploadTemplate","compile","exception","isMutiple","isDisabled","fileIndex","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","ceil","async","contentType","chunkUploadComplete","onUploadProgress","chunkUploadInProgress","currentChunkIndex","uploadingEventCallback","chunkUploadFailed","eventCancelByArgs","removeIcon","checkChunkUpload","requestResponse","updateMetaData","eventArgs_1","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","cancelButton","retryRequest","retryAfterDelay","file_1","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","progressVal","totalChunks","abortIcon","bytes","sortedFilesData","sortedFileNames_1","sort","name_3","clearTemplate","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","totalCount","reader","contents","uploadFileCount","getFileRead","fileCount","getFileInfo","uploadFilesRequest","chunkEnabled","name_4","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","removeFiles_1","fileUploadedIndex","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","CTRLSWITCH","HIDEHEX","HIDERGBA","HIDEVALUE","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PREVIEW","SHOWVALUE","SELECT","TILE","presets","default","ColorPicker","Apply","Cancel","ModeSwitcher","initWrapper","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","noColor","mode","slicedValue","initialInputValue","tileRipple","rippleEffect","selector","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","SplitButton","iconCss","onOpen","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","relateTo","body","X","Y","targetType","collision","bindCallBackEvent","getInstance","Popup","callBackPromise","Deferred","observeOpenArgs","pageYOffset","pageXOffset","modal","beforeCloseArgs","observedCloseArgs","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","len","modeSwitcher","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","colors","refEle","palette","row","tile","roundedColor","columns","aria-selected","presetName","addTileSelection","noColorEle","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","h","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","change","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","direction","opacityEle","background","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","dataBind","previewContainer","colorValue","isPicker","createNumericInput","numericInput","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","targetEle","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","tooltipEle","getTooltipInst","setTooltipOffset","enable","convertToHsvString","updateHsv","isKey","updateInput","substr","removeTileSelection","convertRgbToNumberArray","n","toggle","closePopup","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","childElementCount","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","tempValue","len_1","charAt","opacity","bigInt","g","v","s","floor","f","q","t","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","otherCompModel","getModel","count_1","reduce","cls","containerAttr","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","globalize","multiline","attributeName","textarea","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","defaultValue","setStyle","inputClassName","animationHandler","resetValue","textboxObj","interaction","resetInputHandler"],"mappings":"iEAgCA,SAAgBA,KAKZ,GAJAC,aAAWC,KAAKC,SACZC,KAAQ,UAAWC,aAAgB,MAAOC,YAAe,MAAOC,eAAkB,MAClFC,WAAc,QAASC,YAAa,YAAaC,gBAAiB,KAElER,KAAKS,KAAM,CAEX,IAAK,GADDC,GAAYV,KAAKS,KAAKE,MAAM,KACvBC,EAAI,EAAGA,EAAIF,EAAUG,OAAQD,IAClC,GAA8C,OAA1CF,EAAUE,GAAGF,EAAUE,GAAGC,OAAS,GAAa,CAChDH,EAAUE,GAAKF,EAAUE,GAAK,GAE9B,KAAK,GADDE,GAAiBJ,EAAUE,GAAGD,MAAM,KAC/BI,EAAI,EAAGA,EAAID,EAAeD,OAAQE,IACiB,OAApDD,EAAeC,GAAGD,EAAeC,GAAGF,OAAS,KAC7CC,EAAeC,GAAKD,EAAeC,GAAK,KAE5CC,EAAqBC,KAAKjB,KAAMc,EAAeC,QAKnD,KADID,EAAiBJ,EAAUE,GAAGD,MAAM,MACrBE,OAAS,EAExB,IAAK,GADDK,IAAW,EACNH,EAAI,EAAGA,EAAID,EAAeD,OAAQE,IACb,OAAtBD,EAAeC,IACff,KAAKmB,mBAAmBC,KAAK,KAC7BpB,KAAKqB,YAAcP,EAAeC,GAAK,KAEZ,KAAtBD,EAAeC,GACpBG,GAAW,EAEiB,KAAtBJ,EAAeC,IAAaG,GAAaH,IAAMD,EAAeD,OAAS,GAC7Eb,KAAKmB,mBAAmBC,KAAK,IAAMN,EAAeC,GAAK,KACvDf,KAAKqB,YAAcrB,KAAKsB,WACxBJ,GAAW,GAGXF,EAAqBC,KAAKjB,KAAMc,EAAeC,QAKvDC,GAAqBC,KAAKjB,KAAMc,EAAe,GAM3D,IAFAd,KAAKuB,gBAAkBvB,KAAKqB,WAC5BrB,KAAKwB,WAAaxB,KAAKqB,WAAWI,QAAQ,eAAgBzB,KAAKsB,aAC1DI,oBAAkB1B,KAAK2B,kBACxB,IAASf,EAAI,EAAGA,EAAIZ,KAAKwB,WAAWX,OAAQD,IACnCc,oBAAkB1B,KAAK2B,iBAAiB3B,KAAKwB,WAAWZ,OACzDZ,KAAKwB,WAAaxB,KAAKwB,WAAWC,QAAQ,GAAIG,QAAO5B,KAAKwB,WAAWZ,GAAI,KAAMZ,KAAKsB,YAIhG,IAAIO,GAAe,CACnB,IAAI7B,KAAKqB,WAAWS,MAAM,GAAIF,QAAO,OACjC,IAAShB,EAAI,EAAGA,EAAIZ,KAAKqB,WAAWR,OAAQD,IAAK,CACzCG,EAAI,CACJH,IAAK,IACLG,EAAIH,GAGRG,GADAc,EAAe7B,KAAKqB,WAAWR,OAASb,KAAKwB,WAAWX,OAEnDD,EAAI,GAAgC,OAA3BZ,KAAKqB,WAAWT,EAAI,KAAwC,MAAvBZ,KAAKqB,WAAWT,IACxC,MAAvBZ,KAAKqB,WAAWT,IAAqC,MAAvBZ,KAAKqB,WAAWT,MAC9CZ,KAAKwB,WAAaxB,KAAKwB,WAAWO,UAAU,EAAGhB,GAC3Cf,KAAKwB,WAAWO,UAAWnB,EAAI,EAAKiB,EAAc7B,KAAKwB,WAAWX,QACtEb,KAAKuB,gBAAkBvB,KAAKuB,gBAAgBQ,UAAU,EAAGhB,GACrDf,KAAKuB,gBAAgBQ,UAAWnB,EAAI,EAAKiB,EAAc7B,KAAKuB,gBAAgBV,SAEzD,OAAvBb,KAAKqB,WAAWT,KAChBZ,KAAKwB,WAAaxB,KAAKwB,WAAWO,UAAU,EAAGhB,GAAKf,KAAKqB,WAAWT,EAAI,GACpEZ,KAAKwB,WAAWO,UAAWnB,EAAI,EAAKiB,EAAc7B,KAAKwB,WAAWX,QACtEb,KAAKuB,gBAAkBvB,KAAKuB,gBAAgBQ,UAAU,EAAGhB,GAAKf,KAAKuB,gBAAgBX,EAAI,GACnFZ,KAAKuB,gBAAgBQ,UAAWnB,EAAI,EAAKiB,EAAc7B,KAAKuB,gBAAgBV,aAKxFb,MAAKwB,WAAaxB,KAAKwB,WAAWC,QAAQ,SAAU,IACpDzB,KAAKuB,gBAAkBvB,KAAKqB,WAAWI,QAAQ,SAAU,GAE7D1B,cAAWC,KAAKC,SAAW+B,eAAgB,WAQnD,QAAgBC,KACZC,EAAgBjB,KAAKjB,KAAMA,KAAKwB,YAChCW,EAAalB,KAAKjB,KAAMA,KAAKoC,OAOjC,QAAgBC,KACZC,eAAaC,IAAIvC,KAAKC,QAAS,UAAWuC,EAAyBxC,MACnEsC,eAAaC,IAAIvC,KAAKC,QAAS,WAAYwC,EAA0BzC,MACrEsC,eAAaC,IAAIvC,KAAKC,QAAS,QAASyC,EAAuB1C,MAC/DsC,eAAaC,IAAIvC,KAAKC,QAAS,QAAS0C,EAAkB3C,MAC1DsC,eAAaC,IAAIvC,KAAKC,QAAS,QAAS2C,EAAuB5C,MAC/DsC,eAAaC,IAAIvC,KAAKC,QAAS,OAAQ4C,EAAsB7C,MAC7DsC,eAAaC,IAAIvC,KAAKC,QAAS,QAAS6C,EAAuB9C,MAC/DsC,eAAaC,IAAIvC,KAAKC,QAAS,MAAO8C,EAAqB/C,MAC3DsC,eAAaC,IAAIvC,KAAKC,QAAS,OAAQ+C,EAAsBhD,MAC7DsC,eAAaC,IAAIvC,KAAKC,QAAS,YAAagD,EAA2BjD,MACvEsC,eAAaC,IAAIvC,KAAKC,QAAS,UAAWiD,EAAyBlD,MAC/DA,KAAKmD,UACLC,EAAenC,KAAKjB,MAChBA,KAAKqD,aACLf,eAAaC,IAAIvC,KAAKqD,YAAa,QAASC,EAAkBtD,OAS1E,QAAgBuD,KACZjB,eAAakB,OAAOxD,KAAKC,QAAS,UAAWuC,GAC7CF,eAAakB,OAAOxD,KAAKC,QAAS,WAAYwC,GAC9CH,eAAakB,OAAOxD,KAAKC,QAAS,QAASyC,GAC3CJ,eAAakB,OAAOxD,KAAKC,QAAS,QAAS0C,GAC3CL,eAAakB,OAAOxD,KAAKC,QAAS,QAAS2C,GAC3CN,eAAakB,OAAOxD,KAAKC,QAAS,OAAQ4C,GAC1CP,eAAakB,OAAOxD,KAAKC,QAAS,QAAS6C,GAC3CR,eAAakB,OAAOxD,KAAKC,QAAS,MAAO8C,GACzCT,eAAakB,OAAOxD,KAAKC,QAAS,YAAagD,GAC/CX,eAAakB,OAAOxD,KAAKC,QAAS,UAAWiD,GACzClD,KAAKqD,aACLf,eAAakB,OAAOxD,KAAKqD,YAAa,QAASC,GAQvD,QAAgBF,KACRpD,KAAKyD,iBACLnB,eAAaC,IAAIvC,KAAK0D,SAASC,YAAa,uBAAwBC,EAAc5D,MAG1F,QAAS4D,GAAaC,GAClBA,EAAEC,iBACG9D,KAAK0D,SAASC,YAAYI,UAAUC,SAAS,uBAC9CC,EAAMhD,KAAKjB,KAAM6D,GACjB7D,KAAKoC,MAAQ,IAGrB,QAAS6B,GAAMC,GACX,GAAI9B,GAAQpC,KAAKC,QAAQmC,KACzBF,GAAgBjB,KAAKjB,KAAMA,KAAKwB,YAChCxB,KAAKmE,WAAWC,SACZhC,MAAOpC,KAAKwB,WAAY6C,WAAYrE,KAAKC,QAAQqE,eAAgBC,SAAUvE,KAAKC,QAAQuE,eAE5FC,EAAuBxD,KAAKjB,KAAMkE,EAAO9B,GACzCpC,KAAKC,QAAQyE,kBAAkB,EAAG,GAEtC,QAASpB,KACwB,sBAAzBtD,KAAKC,QAAQ0E,QACbzC,EAAgBjB,KAAKjB,KAAMA,KAAKwB,YAGhCxB,KAAKoC,MAAQpC,KAAK4E,eAQ1B,QAAgBC,GAAgB5E,GAC5B,MAAOA,GAAQmC,MAOnB,QAAgB0C,GAAc7E,EAAS8E,GACnC,GAAI3C,GAAQ,GACR4C,EAAI,EACJC,GAAY,EACZC,EAAcxD,oBAAkBqD,GAA8BrD,oBAAkBzB,IAC/EyB,oBAAkB1B,MAAyB+E,EAAhB9E,EAAQmC,MADW2C,CAEnD,IAAIG,IAAclF,KAAKwB,WACnB,IAAK,GAAIZ,GAAI,EAAGA,EAAIZ,KAAKmB,mBAAmBN,OAAQD,IAC5CqE,IACAA,GAAY,GAEmB,MAA/BjF,KAAKmB,mBAAmB6D,IAA6C,MAA/BhF,KAAKmB,mBAAmB6D,IAC/B,MAA/BhF,KAAKmB,mBAAmB6D,IAA6C,OAA/BhF,KAAKmB,mBAAmB6D,OAC5DpE,EACFqE,GAAY,GAEXA,GACIC,EAAUtE,KAAOZ,KAAKsB,aAAiBI,oBAAkB1B,KAAKmB,mBAAmB6D,MAChFhF,KAAKmF,oBAAsBzD,oBAAkB1B,KAAKoF,aAAapF,KAAKmB,mBAAmB6D,MACpFhF,KAAKmB,mBAAmB6D,GAAGnE,OAAS,GAAuC,MAAlCb,KAAKmB,mBAAmB6D,GAAG,IACK,MAAtEhF,KAAKmB,mBAAmB6D,GAAGhF,KAAKmB,mBAAmB6D,GAAGnE,OAAS,KACjEa,oBAAkB1B,KAAK2B,oBACnBD,oBAAkB1B,KAAK2B,iBAAiB3B,KAAKmB,mBAAmB6D,OAA2B,KAAdE,IACvF9C,GAAS8C,EAAUtE,MAGzBoE,CAMV,QAHkB,OAAdhF,KAAKS,MAA+B,KAAdT,KAAKS,UAA8B4E,KAAfrF,KAAKoC,SAC/CA,EAAQ8C,GAEL9C,EAEX,QAASpB,GAAqBoB,GAC1B,IAAK,GAAI4C,GAAI,EAAGA,EAAI5C,EAAMvB,OAAQmE,IAC9BhF,KAAKqB,YAAce,EAAM4C,GACR,OAAb5C,EAAM4C,IACNhF,KAAKmB,mBAAmBC,KAAKgB,EAAM4C,IAI/C,QAAgB/B,KACZjD,KAAKsF,WAAY,EAErB,QAAgBpC,KACZlD,KAAKsF,WAAY,EAErB,QAAgB1C,GAAsBsB,GAClC,GAAIqB,GAAQvF,KACRwF,EAAexF,KAAKC,QACpBoE,EAAa,EACboB,EAAaX,EAAc7D,KAAKjB,KAAMwF,GACtCE,GAAiB,EACjBC,GAAkB,EAClBC,GACAtB,eAAgBkB,EAAalB,eAC7BJ,MAAOA,EACP9B,MAAOpC,KAAKoC,MACZyD,YAAaL,EAAapD,MAC1B0D,UAAW9F,KAAK0D,SAASoC,UACzBtB,aAAcgB,EAAahB,aAK/B,IAHKxE,KAAKsF,WACNS,EAAa9E,KAAKjB,KAAM4F,EAAWJ,GAEnCxF,KAAKS,OACkB,OAAfgF,GAAsC,KAAfA,GAA8C,WAAxBzF,KAAKgG,gBACjC,OAArBhG,KAAKiG,aAA6C,KAArBjG,KAAKiG,cAClCT,EAAapD,MAAQpC,KAAKwB,YAE9B0E,WAAW,WACP,GAAIV,EAAalB,iBAAmBiB,EAAM/D,WAAWX,QACjD2E,EAAapD,MAAMoD,EAAalB,kBAAoBiB,EAAMjE,WAC1DoE,GAAiB,MAGjB,KAAK,GAAI9E,GAAI4E,EAAalB,eAAgB1D,EAAI2E,EAAM/D,WAAWX,OAAQD,IAAK,CACxE,GAAI4E,EAAapD,MAAMxB,KAAO2E,EAAMjE,WAM/B,CACDoE,GAAiB,CACjB,OAPA,GAAKF,EAAapD,MAAMxB,KAAO2E,EAAM/D,WAAWZ,GAAK,CACjD8E,GAAiB,CACjB,WAUpBQ,WAAW,WACP,GAAIC,GAAqBX,EAAalB,eAAiB,CACvD,IAAI6B,IAAuBZ,EAAM/D,WAAWX,OAAS,GACjD2E,EAAapD,MAAM+D,KAAwBZ,EAAMjE,WACjDqE,GAAkB,MAGlB,KAAK,GAAI/E,GAAIuF,EAAoBvF,GAAK,EAAGA,IAAK,CAC1C,GAAI4E,EAAapD,MAAMxB,KAAO2E,EAAMjE,WAM/B,CACDqE,GAAkB,CAClB,OAPA,GAAKH,EAAapD,MAAMxB,KAAO2E,EAAM/D,WAAWZ,GAAK,CACjD+E,GAAkB,CAClB,WAUf3F,KAAKsF,WAAsC,WAAxBtF,KAAKgG,iBACR,OAAfP,GAAsC,KAAfA,IACC,OAArBzF,KAAKiG,aAA6C,KAArBjG,KAAKiG,aAAwB,CAC/D,IAAK5B,EAAa,EAAGA,EAAarE,KAAKwB,WAAWX,OAAQwD,IACtD,GAAImB,EAAapD,MAAMiC,KAAgBrE,KAAKsB,WAAY,CACpD4E,WAAW,YACHR,GAAkBC,KAClBH,EAAahB,aAAeH,EAC5BmB,EAAalB,eAAiBD,GAElCuB,GACItB,eAAgBkB,EAAalB,eAC7BJ,MAAOA,EACP9B,MAAOmD,EAAMnD,MACbyD,YAAaL,EAAapD,MAC1B0D,UAAWP,EAAM7B,SAASoC,UAC1BtB,aAAcgB,EAAahB,cAE/BuB,EAAa9E,KAAKsE,EAAOK,EAAWJ,IAExC,OAGJ9D,oBAAkB8D,EAAapD,MAAMN,MAAM9B,KAAKsB,eAChDsE,GACItB,eAAgBkB,EAAalB,eAC7BJ,MAAOA,EACP9B,MAAOpC,KAAKoC,MACZyD,YAAaL,EAAapD,MAC1B0D,UAAW9F,KAAK0D,SAASoC,UACzBtB,aAAcgB,EAAahB,cAE/BuB,EAAa9E,KAAKjB,KAAM4F,EAAWJ,IAEvCxF,KAAKsF,WAAY,GAI7B,QAAgBS,GAAaH,EAAWJ,GACpCxF,KAAKoG,QAAQ,QAASR,EAAW,SAAUA,GACvCJ,EAAalB,eAAiBsB,EAAUtB,eACxCkB,EAAahB,aAAeoB,EAAUpB,eAG9C,QAAgB3B,GAAqBqB,GAQjC,GAPAlE,KAAKqG,eACDnC,MAAOA,EACP9B,MAAOpC,KAAKoC,MACZyD,YAAa7F,KAAKC,QAAQmC,MAC1B0D,UAAW9F,KAAK0D,SAASoC,WAE7B9F,KAAKoG,QAAQ,OAAQpG,KAAKqG,eACtBrG,KAAKS,OACLT,KAAKsG,SAAU,EACXtG,KAAKiG,aAAejG,KAAKC,QAAQmC,QAAUpC,KAAKwB,YAAsC,WAAxBxB,KAAKgG,gBAA6B,CAChG9D,EAAgBjB,KAAKjB,KAAM,GAC3B,IAAIuG,GAAevG,KAAKC,QAAQuG,WAAWC,cAAc,gBAC7B,UAAxBzG,KAAKgG,iBAA8BtE,oBAAkB6E,IAAiBA,EAAaxC,UAAUC,SAAS0C,KACtGC,eAAaJ,GAAeG,KAK5C,QAAS5D,GAAsBoB,GAC3B,GAAIqB,GAAQvF,IACZ,IAAIA,KAAKS,OAAST,KAAK4G,SAAU,CAC7B,GAAIC,GAAW7G,KAAKC,QAAQqE,eACxBwC,EAAW9G,KAAKC,QAAQuE,aACxBuC,EAAa/G,KAAKC,QAAQmC,KAC9BF,GAAgBjB,KAAKjB,KAAM,IAC3BA,KAAKmF,mBAAoB,EACzBe,WAAW,WACP,GAAI9D,GAAQmD,EAAMtF,QAAQmC,MAAMX,QAAQ,KAAM,GAC1C8D,GAAMpB,WAAWtD,OAAS,GAAK0E,EAAMpB,WAAW,GAAG/B,QAAUmD,EAAMtF,QAAQmC,QAC3EA,EAAQ0C,EAAc7D,KAAKsE,EAAOA,EAAMtF,UAE5CiC,EAAgBjB,KAAKsE,EAAOwB,GAC5BxB,EAAMtF,QAAQqE,eAAiBuC,EAC/BtB,EAAMtF,QAAQuE,aAAesC,CAC7B,IAAIlG,GAAI,CACR2E,GAAMyB,cAAe,CACrB,IACIC,EAAchG,KAAKsE,EAAOnD,EAAMxB,IAAI,EAAO,QACzCA,QACGA,EAAIwB,EAAMvB,OAGnB,IAFA0E,EAAMyB,cAAe,EACrBzB,EAAMJ,mBAAoB,EACtBI,EAAMtF,QAAQmC,QAAU2E,EAAY,CACpC,GAAIG,GAAM,CACV3B,GAAMyB,cAAe,CACrB,IACIC,EAAchG,KAAKsE,EAAOnD,EAAM8E,IAAM,EAAO,QAC3CA,QACGA,EAAM9E,EAAMvB,OACrB0E,GAAMyB,cAAe,MAGrBvC,GAAuBxD,KAAKsE,EAAOrB,EAAO6C,IAE/C,IAGX,QAAShE,GAAoBmB,GACzB,GAAIqB,GAAQvF,IACZ,IAAIA,KAAKS,OAAST,KAAK4G,SAAU,CAC7B,GAAIO,GAAanH,KAAKC,QAAQmC,MAC1BgF,EAAWpH,KAAKC,QAAQqE,eACxB+C,EAASrH,KAAKC,QAAQuE,YAC1BxE,MAAKsH,WAAWlG,MAAOgB,MAAOpC,KAAKC,QAAQmC,MAAOiC,WAAYrE,KAAKC,QAAQqE,eAAgBC,SAAUvE,KAAKC,QAAQuE,cAClH,IAAI+C,GAAUvH,KAAKC,QAAQmC,MAAML,UAAU,EAAGqF,GAAYpH,KAAKwB,WAAWO,UAAUqF,EAAUC,GAC1FrH,KAAKC,QAAQmC,MAAML,UAAUsF,EACjCnB,YAAW,WACPhE,EAAgBjB,KAAKsE,EAAOgC,GAC5BhC,EAAMtF,QAAQqE,eAAiBiB,EAAMtF,QAAQuE,aAAe4C,EACxD7B,EAAMtF,QAAQmC,QAAU+E,GACxB1C,EAAuBxD,KAAKsE,EAAOrB,EAAO,OAE/C,IAGX,QAAgBlB,GAAqBkB,GACjCA,EAAMJ,iBAEV,QAASnB,GAAiBuB,GACtB,IAAqB,IAAjBsD,UAAQC,MAAwC,KAAvBzH,KAAKC,QAAQmC,OAAwC,UAAxBpC,KAAKgG,eAA/D,CAGA,GAAIJ,IAAc8B,SAAS,EAAOC,QAAS,IAE3C,IADAC,SAAO1D,EAAO0B,GACV5F,KAAKS,KAAM,CAaX,GAZ2B,KAAvBT,KAAKC,QAAQmC,OACbpC,KAAKmE,WAAWC,SACZhC,MAAOpC,KAAKwB,WAAY6C,WAAYrE,KAAKC,QAAQqE,eAAgBC,SAAUvE,KAAKC,QAAQuE,eAG9D,IAA9BxE,KAAKC,QAAQmC,MAAMvB,SACnBb,KAAKC,QAAQmC,MAAQpC,KAAKC,QAAQmC,MAAQpC,KAAKwB,WAC/CxB,KAAKC,QAAQyE,kBAAkB,EAAG,IAEjC1E,KAAKmF,mBACN0C,EAAsB5G,KAAKjB,KAAMkE,GAEjClE,KAAKC,QAAQmC,MAAMvB,OAASb,KAAKwB,WAAWX,OAAQ,CACpD,GAAIwD,GAAarE,KAAKC,QAAQqE,eAC1BwD,EAAc9H,KAAKC,QAAQmC,MAAMvB,OAASb,KAAKwB,WAAWX,OAC1DuB,EAAQpC,KAAKC,QAAQmC,MAAML,UAAUsC,EAAayD,EAAazD,EACnErE,MAAKgH,cAAe,CACpB,IAAIpG,GAAI,CACR,IACIqG,EAAchG,KAAKjB,KAAMoC,EAAMxB,GAAIsD,EAAMwD,QAASxD,KAChDtD,QACGA,EAAIwB,EAAMvB,OACfb,MAAKC,QAAQmC,QAAUpC,KAAK+H,WAC5BtD,EAAuBxD,KAAKjB,KAAMkE,EAAO,MAGjD,GAAI8D,GAAMlD,EAAc7D,KAAKjB,KAAMA,KAAKC,QACxCD,MAAKiI,UAAYD,EACjBhI,KAAKoC,MAAQ4F,EACD,KAARA,IACA9F,EAAgBjB,KAAKjB,KAAMA,KAAKwB,YAChCxB,KAAKC,QAAQyE,kBAAkB,EAAG,MAI9C,QAASlC,GAAwB0B,GAC7B,GAAIlE,KAAKS,OAAST,KAAK4G,SAAU,CACP,MAAlB1C,EAAMyD,WACFzD,EAAMwD,SAA8B,KAAlBxD,EAAMyD,SAAoC,KAAlBzD,EAAMyD,SAChDzD,EAAMJ,iBAEV+D,EAAsB5G,KAAKjB,KAAMkE,GAErC,IAAIgE,GAAalI,KAAKC,QAAQmC,KAC9B,IAAI8B,EAAMwD,UAA8B,KAAlBxD,EAAMyD,SAAoC,KAAlBzD,EAAMyD,SAAiB,CACjE,GAAIQ,OAAS,EACS,MAAlBjE,EAAMyD,SAAkB3H,KAAKsH,WAAWzG,OAAS,GAAKqH,IAAelI,KAAKsH,WAAWtH,KAAKsH,WAAWzG,OAAS,GAAGuB,OACjH+F,EAASnI,KAAKsH,WAAWtH,KAAKsH,WAAWzG,OAAS,GAClDb,KAAKmE,WAAWC,SACZhC,MAAOpC,KAAKC,QAAQmC,MAAOiC,WAAYrE,KAAKC,QAAQqE,eACpDC,SAAUvE,KAAKC,QAAQuE,eAE3BtC,EAAgBjB,KAAKjB,KAAMmI,EAAO/F,OAClCpC,KAAKC,QAAQqE,eAAiB6D,EAAO9D,WACrCrE,KAAKC,QAAQuE,aAAe2D,EAAO5D,SACnCvE,KAAKsH,WAAWc,OAAOpI,KAAKsH,WAAWzG,OAAS,EAAG,IAE5B,KAAlBqD,EAAMyD,SAAkB3H,KAAKmE,WAAWtD,OAAS,GAAKqH,IAAelI,KAAKmE,WAAW,GAAG/B,QAC7F+F,EAASnI,KAAKmE,WAAW,GACzBnE,KAAKsH,WAAWlG,MACZgB,MAAOpC,KAAKC,QAAQmC,MAAOiC,WAAYrE,KAAKC,QAAQqE,eACpDC,SAAUvE,KAAKC,QAAQuE,eAE3BtC,EAAgBjB,KAAKjB,KAAMmI,EAAO/F,OAClCpC,KAAKC,QAAQqE,eAAiB6D,EAAO9D,WACrCrE,KAAKC,QAAQuE,aAAe2D,EAAO5D,SACnCvE,KAAKmE,WAAWiE,OAAO,EAAG,MAK1C,QAAgBC,KACZ,GAAIF,GACAG,EAAStI,KAAKC,QAAQqE,eACtB+C,EAASrH,KAAKC,QAAQuE,YACtBxE,MAAKmE,WAAWtD,OAAS,GACzBsH,EAASnI,KAAKmE,WAAW,GACzBjC,EAAgBjB,KAAKjB,KAAMmI,EAAO/F,OAC7B+F,EAAO9D,WAAaiE,GAAY,GACjCtI,KAAKC,QAAQqE,eAAiB6D,EAAO9D,WACrCrE,KAAKC,QAAQuE,aAAe2D,EAAO5D,WAGnCvE,KAAKC,QAAQqE,eAAiBgE,EAAS,EACvCtI,KAAKC,QAAQuE,aAAe6C,EAAS,KAIzCnF,EAAgBjB,KAAKjB,KAAMA,KAAKwB,YAChCxB,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAe8D,GAGlE,QAASC,GAAwBC,EAAUC,EAAavE,GAOpD,MANmB,UAAfA,EAAMwE,OACNF,GAAW,EACXC,EAAczI,KAAKC,QAAQmC,MAC3BF,EAAgBjB,KAAKjB,KAAMA,KAAKwB,YAChCW,EAAalB,KAAKjB,KAAMyI,IAErBD,EAEX,QAASX,GAAsB3D,GAC3B,GACIuE,GADAD,GAAW,EAEXG,GAAY,CACZ3I,MAAKC,QAAQmC,MAAMvB,OAASb,KAAKwB,WAAWX,SAC5C2H,GAAW,EACXC,EAAczI,KAAKC,QAAQmC,MAC3BoG,EAAWD,EAAwBtH,KAAKjB,KAAMwI,EAAUC,EAAavE,GACrEmE,EAAqBpH,KAAKjB,OAE1BA,KAAKC,QAAQmC,MAAMvB,QAAUb,KAAKwB,WAAWX,QAAyB,UAAfqD,EAAMwE,OAC7DF,EAAWD,EAAwBtH,KAAKjB,KAAMwI,EAAUC,EAAavE,GAEzE,IAAI0E,GAAiB5I,KAAKC,QAAQqE,eAC9BuE,EAAe7I,KAAKC,QAAQuE,aAC5BH,EAAarE,KAAKC,QAAQqE,eAC1BC,EAAWvE,KAAKC,QAAQuE,aACxBU,EAAYlF,KAAKqB,WAAWI,QAAQ,WAAY,IAChDqH,EAAU5D,EAAUb,EAAa,GACjC0E,EAAiB/I,KAAKC,QAAQuE,YAClC,IAAIgE,GAA8B,IAAlBtE,EAAMyD,SAAmC,KAAlBzD,EAAMyD,QAAgB,CACzD3H,KAAKsH,WAAWlG,MAAOgB,MAAOpC,KAAKC,QAAQmC,MAAOiC,WAAYrE,KAAKC,QAAQqE,eAAgBC,SAAUA,GACrG,IAAIyE,IAAc,EACdC,EAAWjJ,KAAKC,QAAQmC,KAC5B,IAAIiC,EAAa,IAAyB,IAAlBH,EAAMyD,SAAmC,KAAlBzD,EAAMyD,UAAmBtD,EAAarE,KAAKC,QAAQmC,MAAMvB,QAC/Fb,KAAKC,QAAQuE,aAAeH,IAAgBrE,KAAKC,QAAQmC,MAAMvB,OAAU,CAC9E,GAAIqI,GAAQ7E,CACRA,KAAeE,GACfF,EAAaE,EACS,KAAlBL,EAAMyD,UACNqB,GAAc,IAGK,KAAlB9E,EAAMyD,UACTuB,IAGAA,CAEN,KAAK,GAAIlE,GAAIX,EAA+B,IAAlBH,EAAMyD,SAAiBa,GAAYQ,EAAehE,EAAIkE,EAAQlE,EAAIkE,EAA0B,IAAlBhF,EAAMyD,SAAiBa,GAAYQ,EAAehE,IAAMA,IACxJ,IAAK,GAAIpE,GAAIyD,EAA+B,IAAlBH,EAAMyD,SAAiBa,GAAYQ,EAAepI,EAAI,EAAIA,EAAIZ,KAAKC,QAAQmC,MAAMvB,OAA2B,IAAlBqD,EAAMyD,SAAiBa,GAAYQ,EAAepI,IAAMA,IAAK,CAC7K,GAAI0H,OAAS,IACW,IAAlBpE,EAAMyD,SAAiBqB,KAAkBJ,IAAmBC,GAAgBD,IAAmBvE,GAChGuE,IAAmBC,IAAmBL,GACvCM,EAAU5D,EAAUtE,EAAI,GACxB0H,EAASjE,EAAa,IAGtByE,EAAU5D,EAAUtE,GACpB0H,EAASjE,IACPA,EAEN,IAAI8E,GAAWnJ,KAAKC,QAAQmC,MAAMkG,EAClC,IAAK5G,oBAAkB1B,KAAKoF,aAAa0D,MAAepH,oBAAkB1B,KAAK2B,mBACxED,oBAAkB1B,KAAK2B,iBAAiBmH,KACtC9I,KAAKqB,WAAWiH,KAAYtI,KAAKsB,YAAqD,MAAvCtB,KAAKmB,mBAAmBmH,GAAQ,IACG,MAAhFtI,KAAKmB,mBAAmBmH,GAAQtI,KAAKmB,mBAAmBmH,GAAQzH,OAAS,IAC5Eb,KAAKwB,WAAW8G,KAAYtI,KAAKsB,YAAcI,oBAAkB1B,KAAK2B,kBAC1E3B,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAe8D,EAC1DpE,EAAMJ,iBACgB,KAAlBI,EAAMyD,SAAmBqB,KACvBhJ,KAAKC,QAAQqE,mBAGlB,CACD,GAAIlC,GAAQpC,KAAKC,QAAQmC,MACrBgH,EAAWpJ,KAAKsB,WAChB+H,EAAejH,EAAML,UAAU,EAAGuG,GAAUc,EAAWhH,EAAML,UAAUsC,EAAYjC,EAAMvB,OAC7FqB,GAAgBjB,KAAKjB,KAAMqJ,GAC3BnF,EAAMJ,iBACgB,KAAlBI,EAAMyD,SAAmBqB,GACzBV,IAEJtI,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAe8D,EAC1DK,GAAY,EAWhB,GATAtE,EAAarE,KAAKC,QAAQqE,gBACpBqE,GAA+B,IAAlBzE,EAAMyD,SAAkBqB,IAAiBL,GAAiC,KAAlBzE,EAAMyD,QAC7EW,EAASjE,EAAa,GAGtBiE,EAASjE,EACTsE,GAAY,GAEhBQ,EAAWnJ,KAAKC,QAAQmC,MAAMkG,GACxBM,IAAmBC,GAAkB7I,KAAKC,QAAQqE,iBAAmBsE,GACnE5I,KAAKwB,WAAW8G,KAAYtI,KAAKsB,YAAiB6H,IAAanJ,KAAKwB,WAAW8G,IAClFtI,KAAKwB,WAAW8G,KAAYtI,KAAKsB,aAAgBI,oBAAkB1B,KAAK2B,kBACzE,OAKM,KAAlBuC,EAAMyD,SAAkBqB,GAAeL,IACvC3I,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAeuE,GAE1B,IAAhC/I,KAAKC,QAAQqE,gBAAyBtE,KAAKC,QAAQuE,eAAiBxE,KAAKC,QAAQmC,MAAMvB,SACvFqB,EAAgBjB,KAAKjB,KAAMA,KAAKwB,YAChC0C,EAAMJ,iBACN9D,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAeH,GAE9DrE,KAAKmE,WAAWC,SACZhC,MAAOpC,KAAKC,QAAQmC,MAAOiC,WAAYrE,KAAKC,QAAQqE,eACpDC,SAAUvE,KAAKC,QAAQuE,eAEvBxE,KAAKC,QAAQmC,QAAU6G,GACvBxE,EAAuBxD,KAAKjB,KAAMkE,EAAOuE,IAIrD,QAAShG,GAAyByB,GAC9B,GAAIlE,KAAKS,OAAST,KAAK4G,SAAU,CAC7B,GAAIuC,GAAWnJ,KAAKC,QAAQmC,KAC5B,KAAM8B,EAAMwD,SAAaxD,EAAMwD,SAA0B,SAAfxD,EAAMoF,MAAkC,SAAfpF,EAAMoF,MACnD,SAAfpF,EAAMoF,MAAkC,SAAfpF,EAAMoF,MAAkC,SAAfpF,EAAMoF,MAAkC,SAAfpF,EAAMoF,KAAkB,CACtGtJ,KAAKgH,cAAe,CACpB,IAAIuC,GAAMrF,EAAMqF,GACJ,cAARA,IACAA,EAAMC,OAAOC,aAAavF,EAAMyD,UAE/B4B,EAMIA,GAAsB,IAAfA,EAAI1I,SAChBoG,EAAchG,KAAKjB,KAAMuJ,EAAKrF,EAAMwD,QAASxD,GAC7CA,EAAMJ,mBAPN9D,KAAK0J,cAAe,EACpBzC,EAAchG,KAAKjB,KAAMwJ,OAAOC,aAAavF,EAAMyD,SAAUzD,EAAMwD,QAASxD,GAC5EA,EAAMJ,iBACN9D,KAAK0J,cAAe,GAMF,KAAlBxF,EAAMyD,SAA0B,MAAR4B,GAAmC,MAApBvJ,KAAKsB,aAC5CtB,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAexE,KAAKC,QAAQqE,eAAiBiF,EAAI1I,QAGhGb,KAAKC,QAAQmC,QAAU+G,GACvB1E,EAAuBxD,KAAKjB,KAAMkE,EAAOiF,IAKrD,QAAS1E,GAAuBP,EAAOiF,GACnC,GAAIQ,GAAe3J,KAAK4J,mBACxB,KAAKlI,oBAAkB1B,KAAK6J,mBAAqB7J,KAAK8J,UAAW,CAC7D,GAAIlE,KACJ5F,MAAK6J,iBAAoBzH,MAAOpC,KAAKC,QAAQmC,MAAOyD,YAAa7F,KAAKC,QAAQmC,MAAO2H,eAAe,EAAOC,cAAc,GACrHhK,KAAKS,OACLT,KAAK6J,gBAAgBzH,MAAQ0C,EAAc7D,KAAKjB,KAAMA,KAAKC,UAE1DyB,oBAAkBwC,KACnBlE,KAAK6J,gBAAgBG,cAAe,EACpChK,KAAK6J,gBAAgBE,eAAgB,EACrC/J,KAAK6J,gBAAgB3F,MAAQA,GAEjClE,KAAK4J,qBAAsB,EAC3B5J,KAAKoC,MAAQpC,KAAK6J,gBAAgBzH,MAClCpC,KAAK4J,oBAAsBD,EAC3BM,QAAMrE,EAAW5F,KAAK6J,iBAElB7J,KAAKkK,WAAalK,KAAKmK,cACvBnK,KAAKmK,eAAgB,EAGrBnK,KAAKoG,QAAQ,SAAUR,GAG/B5F,KAAK+H,UAAY/H,KAAKC,QAAQmC,MAC9BpC,KAAKiI,UAAYnD,EAAc7D,KAAKjB,KAAMA,KAAKC,SAC/CF,aAAWC,KAAKC,SAAWO,gBAAiBR,KAAKC,QAAQmC,QAE7D,QAASM,GAAsBwB,GAC3B,GAAIlE,KAAKS,OAAST,KAAK4G,SAAU,CAC7B,GAAIuB,OAAS,EACb,IAAKnI,KAAKgH,cAAkC,MAAlB9C,EAAMyD,QAkC5ByC,EAAgBnJ,KAAKjB,UAlCwB,CAC7C,GAAIyI,OAAc,EAKlB,IAJkC,IAA9BzI,KAAKC,QAAQmC,MAAMvB,SACnBb,KAAKC,QAAQmC,MAAQpC,KAAKC,QAAQmC,MAAQpC,KAAKwB,WAC/CxB,KAAKC,QAAQyE,kBAAkB,EAAG,IAElC1E,KAAKC,QAAQmC,MAAMvB,OAASb,KAAKwB,WAAWX,OAAQ,CACpD,GAAIwD,GAAarE,KAAKC,QAAQqE,eAC1BwD,EAAc9H,KAAKC,QAAQmC,MAAMvB,OAASb,KAAKwB,WAAWX,OAC1DwJ,EAAQrK,KAAKC,QAAQmC,MAAML,UAAUsC,EAAayD,EAAazD,EACnE,IAAIrE,KAAKsH,WAAWzG,OAAS,EAAG,CAC5BsH,EAASnI,KAAKsH,WAAWtH,KAAKsH,WAAWzG,OAAS,EAClD,IAAIyJ,GAAetK,KAAKC,QAAQqE,cAChCmE,GAAcN,EAAO/F,KACrB,IAAImI,GAASpC,EAAO/F,MAAML,UAAUuI,EAAexC,EAAawC,EAChEnC,GAASnI,KAAKmE,WAAW,GACzBkG,EAAQA,EAAMG,MACd,IAAIC,GAAUjD,UAAQkD,WAAuB,KAAVL,CAC9BI,IAAWF,IAAWF,GAASlC,EAAO/F,MAAML,UAAUuI,EAAexC,EAAawC,KAAkBD,EAGhGI,GACLE,EAAyB1J,KAAKjB,KAAMkE,EAAOoG,EAAe,EAAGtK,KAAKC,QAAQuE,aAAe,EAAG6F,EAAOnG,EAAMwD,SAAS,GAHlHT,EAAchG,KAAKjB,KAAMqK,EAAOnG,EAAMwD,QAASxD,OAOnDuE,GAAczI,KAAKwB,WACnByF,EAAchG,KAAKjB,KAAMqK,EAAOnG,EAAMwD,QAASxD,EAEnDlE,MAAKgH,cAAe,EACpBvC,EAAuBxD,KAAKjB,KAAMkE,EAAOuE,IAMjD,GAAIT,GAAMlD,EAAc7D,KAAKjB,KAAMA,KAAKC,UACD,IAAhCD,KAAKC,QAAQqE,gBAA0BtE,KAAKwB,aAAexB,KAAKC,QAAQmC,OAAkB,KAAR4F,GACzE,KAARA,GAAchI,KAAKoC,QAAU4F,KACjChI,KAAKiI,UAAYD,EACjBhI,KAAKoC,MAAQ4F,OAIjBvD,GAAuBxD,KAAKjB,KAAMkE,EAEtC,IAAoC,IAAhClE,KAAKC,QAAQqE,gBAAsD,IAA9BtE,KAAKC,QAAQuE,aAAoB,CAEtE,GAAIoG,GAAS5K,KAAKC,OAClBiG,YAAW,WACP0E,EAAOlG,kBAAkB,EAAG,IAC7B,IAGX,QAASmG,GAAiBtB,GACtB,GAAIA,EAAI1I,OAAS,GAAOb,KAAKwB,WAAWX,OAAS0I,EAAI1I,OAAUb,KAAKC,QAAQmC,MAAMvB,OAAS,CACvF,GAAIwI,GAAerJ,KAAKmE,WAAW,GAAG/B,MAAML,UAAU,EAAG/B,KAAKmE,WAAW,GAAGE,YAAckF,EACtFvJ,KAAKmE,WAAW,GAAG/B,MAAML,UAAU/B,KAAKmE,WAAW,GAAGE,WAAYrE,KAAKmE,WAAW,GAAG/B,MAAMvB,OAC/FqB,GAAgBjB,KAAKjB,KAAMqJ,GAC3BrJ,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAexE,KAAKmE,WAAW,GAAGE,WAAakF,EAAI1I,OAElGb,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQqE,eAAiBiF,EAAI1I,OAChEb,KAAKC,QAAQuE,aAAexE,KAAKC,QAAQuE,aAAe+E,EAAI1I,OAEhE,QAASiK,GAAiBvB,GACjBvJ,KAAKgH,cACN6D,EAAiB5J,KAAKjB,KAAMuJ,GAGpC,QAAStC,GAAcsC,EAAKwB,EAAW7G,GAEnC,GADA4G,EAAiB7J,KAAKjB,KAAMuJ,IACxB7H,oBAAkB1B,QAAS0B,oBAAkB6H,GAWjD,IAAK,GANDT,GAGAkC,EALA3G,EAAarE,KAAKC,QAAQqE,eAC1BsE,EAAiBvE,EAEjB4G,GAAY,EACZ7I,EAAQpC,KAAKC,QAAQmC,MAErB8I,GAAc,EACdC,GAAa,EACRnG,EAAI,EAAGA,EAAIuE,EAAI1I,OAAQmE,IAAK,CACjC,GAAIoG,GAAW7B,EAAIvE,EAKnB,IAJAX,EAAarE,KAAKC,QAAQqE,eACrBtE,KAAKgH,cAAgB4B,IAAmBvE,IACzCA,GAA0BW,IAExBhF,KAAKgH,cAAgB3C,EAAarE,KAAKwB,WAAWX,OAAS,CAC7D,IAASD,EAAIyD,EAAYzD,EAAIZ,KAAKwB,WAAWX,OAAQD,IAEjDkI,EADgB9I,KAAKuB,gBACD8C,GACgB,OAAhCrE,KAAKqB,WAAWgD,IAAwBrE,KAAKqB,WAAWgD,EAAa,KAAOkF,IAC5E4B,GAAa,IAEZzJ,oBAAkB1B,KAAKoF,aAAa0D,MAAcpH,oBAAkB1B,KAAK2B,oBACrED,oBAAkB1B,KAAK2B,mBAAqBD,oBAAkB1B,KAAK2B,iBAAiBmH,MACpF9I,KAAKqB,WAAWgD,KAAgBrE,KAAKsB,YAAyD,MAA3CtB,KAAKmB,mBAAmBkD,GAAY,IACG,MAAxFrE,KAAKmB,mBAAmBkD,GAAYrE,KAAKmB,mBAAmBkD,GAAYxD,OAAS,IACnFb,KAAKwB,WAAW6C,KAAgBrE,KAAKsB,YAAeI,oBAAkB1B,KAAK2B,mBAC5E3B,KAAKsB,aAAewH,GAAW9I,KAAKuB,kBAAoBvB,KAAKS,QACjET,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAeH,EAAa,EACvEA,EAAarE,KAAKC,QAAQqE,eAC1BwE,EAAU9I,KAAKqB,WAAWgD,GAGlC,IAAK3C,oBAAkB1B,KAAK2B,mBAAsBD,oBAAkB1B,KAAK2B,iBAAiBmH,KAUhFpH,oBAAkB1B,KAAKoF,aAAa0D,KAAasC,EAAStJ,MAAM,GAAIF,QAAO5B,KAAKoF,aAAa0D,MAChG9I,KAAKwB,WAAW6C,KAAgBrE,KAAKsB,WACxC2J,GAAY,EAEPjL,KAAKwB,WAAW6C,KAAgBrE,KAAKsB,YAAyD,MAA3CtB,KAAKmB,mBAAmBkD,GAAY,IACD,MAAxFrE,KAAKmB,mBAAmBkD,GAAYrE,KAAKmB,mBAAmBkD,GAAYxD,OAAS,IACjFuK,EAAStJ,MAAM,GAAIF,QAAO5B,KAAKmB,mBAAmBkD,OACrD4G,GAAY,OAdZ,KAAK,GADDI,GADerL,KAAK2B,iBAAiBmH,GACTnI,MAAM,KAC7BC,EAAI,EAAGA,EAAIyK,EAAaxK,OAAQD,IACrC,GAAIwK,EAAStJ,MAAM,GAAIF,QAAO,IAAMyJ,EAAazK,GAAK,MAAO,CACzDqK,GAAY,CACZ,OAaZ,KAAMjL,KAAKgH,cAAgB3C,EAAarE,KAAKqB,WAAWR,SAAWoK,EAAW,CAC1E,GAAU,IAANjG,EACA,GAAIhF,KAAKgH,aACLhH,KAAKsH,WAAWlG,MAAOgB,MAAOA,EAAOiC,WAAYA,EAAYE,SAAUF,QAEtE,CACD,GAAIiE,GAAStI,KAAKC,QAAQqE,eACtB+C,EAASrH,KAAKC,QAAQuE,YACtBxE,MAAKmE,WAAWtD,OAAS,GACzBmK,EAAchL,KAAKmE,WAAW,GAAG/B,MACjCF,EAAgBjB,KAAKjB,KAAMgL,GAC3BhL,KAAKsH,WAAWlG,KAAKpB,KAAKmE,WAAW,MAGrCnE,KAAKsH,WAAWlG,MAAOgB,MAAOpC,KAAKwB,WAAY6C,WAAYA,EAAYE,SAAUF,IACjF2G,EAAchL,KAAKwB,WACnBU,EAAgBjB,KAAKjB,KAAMgL,IAE/BhL,KAAKC,QAAQqE,eAAiBgE,EAC9BtI,KAAKC,QAAQuE,aAAe6C,EAGpChD,EAAarE,KAAKC,QAAQqE,eAC1BgH,EAAqBrK,KAAKjB,KAAMkE,EAAOG,EAAY+G,EAAUJ,EAAaG,GAC1ED,GAAc,EACVlG,IAAMuE,EAAI1I,OAAS,GACnBb,KAAKmE,WAAWC,SACZhC,MAAOpC,KAAKC,QAAQmC,MAAOiC,WAAYrE,KAAKC,QAAQqE,eAAgBC,SAAUvE,KAAKC,QAAQuE,eAGnGyG,GAAY,MAGZ5G,GAAarE,KAAKC,QAAQqE,eAC1BqG,EAAyB1J,KAAKjB,KAAMkE,EAAOG,EAAYuE,EAAgBW,EAAKwB,EAAWG,EAEvFlG,KAAMuE,EAAI1I,OAAS,GAAMoK,KACpBzD,UAAQkD,WAAclD,UAAQkD,WAAarG,EAAarE,KAAKwB,WAAWX,SACzEb,KAAKmE,WAAWC,SACZhC,MAAOpC,KAAKC,QAAQmC,MAAOiC,WAAYrE,KAAKC,QAAQqE,eAAgBC,SAAUvE,KAAKC,QAAQuE,mBAMpF,KAAf+E,EAAI1I,QAAiBkK,GAAcrJ,oBAAkBwC,IACrDqH,EAAkBtK,KAAKjB,OAKvC,QAASsL,GAAqBpH,EAAOG,EAAY+G,EAAUJ,EAAaG,GAIpE,GAHInL,KAAKqB,WAAWR,OAASb,KAAKwB,WAAWX,SACzCuK,EAAWI,EAAuBvK,KAAKjB,KAAMoL,EAAUpL,KAAKC,QAAQmC,SAEnE+I,EAAY,CACb,GAAI/I,GAAQpC,KAAKC,QAAQmC,MACrBiH,EAAejH,EAAML,UAAU,EAAGsC,GAAc+G,EAAWhJ,EAAML,UAAUsC,EAAa,EAAGjC,EAAMvB,OACrGqB,GAAgBjB,KAAKjB,KAAMqJ,GAC3BrJ,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAeH,EAAa,GAG/E,QAASsG,GAAyBzG,EAAOuH,EAAMC,EAAKnC,EAAKoC,EAAMC,GAC3D,IAAK5L,KAAKgH,aAAc,CACpB,GAAI5E,GAAQpC,KAAKC,QAAQmC,KACrBqJ,IAAQzL,KAAKwB,WAAWX,OACxBqB,EAAgBjB,KAAKjB,KAAMoC,EAAML,UAAU,EAAG0J,KAG1CC,IAAQD,EACRvJ,EAAgBjB,KAAKjB,KAAMoC,EAAML,UAAU,EAAG0J,GAAQrJ,EAAML,UAAU0J,EAAO,EAAGrJ,EAAMvB,SAGlFb,KAAKwB,WAAWX,SAAWb,KAAKC,QAAQmC,MAAMvB,OAC9CqB,EAAgBjB,KAAKjB,KAAMoC,EAAML,UAAU,EAAG0J,GAAQrJ,EAAML,UAAU0J,EAAMrJ,EAAMvB,SAGlFqB,EAAgBjB,KAAKjB,KAAMoC,EAAML,UAAU,EAAG2J,GAAOtJ,EAAML,UAAU2J,EAAM,EAAGtJ,EAAMvB,SAG5Fb,KAAKC,QAAQqE,eAAiBtE,KAAKC,QAAQuE,aAAgBoH,GACvD5L,KAAKC,QAAQmC,MAAMsJ,KAAS1L,KAAKsB,WAAcmK,EAAOC,GAE9DH,EAAkBtK,KAAKjB,MAER,IAAfuJ,EAAI1I,QAAiB8K,GAASjK,oBAAkBwC,IAChDqH,EAAkBtK,KAAKjB,MAG/B,QAASuL,KACL,GAAIhG,GAAQvF,KACR6L,EAAgB7L,KAAKC,QAAQuG,WAC7BsF,EAAQ,GACRD,GAAc9H,UAAUC,SAAS+H,KAAeF,EAAc9H,UAAUC,SAASgI,IACjFC,YAAUJ,GAAgBK,GAG1BD,YAAUjM,KAAKC,SAAUiM,IAEH,IAAtBlM,KAAK0J,eACLoC,EAAQ,KAEZ/L,aAAWC,KAAKC,SAAW+B,eAAgB,SAC3CkE,WAAW,WACFX,EAAMyB,cACPoD,EAAgBnJ,KAAKsE,IAE1BuG,GAEP,QAAS1B,KACL,GAAIyB,GAAgB7L,KAAKC,QAAQuG,UAC5B9E,qBAAkBmK,IACnBlF,eAAakF,GAAgBK,GAEjCvF,eAAa3G,KAAKC,SAAUiM,GAC5BnM,aAAWC,KAAKC,SAAW+B,eAAgB,UAO/C,QAASwJ,GAAuBjC,EAAKnH,GACjC,GAAIZ,GACAZ,EACAuL,EAAS/J,EACTgK,EAAY,CAChB,KAAKxL,EAAI,EAAGA,EAAIZ,KAAKqB,WAAWR,OAAQD,IAUpC,GAT2B,OAAvBZ,KAAKqB,WAAWT,KAChBY,EAAa2K,EAAOpK,UAAU,EAAGnB,GAAK,KAAOuL,EAAOpK,UAAUnB,EAAGuL,EAAOtL,SAEjD,MAAvBb,KAAKqB,WAAWT,IAAqC,MAAvBZ,KAAKqB,WAAWT,IAAqC,MAAvBZ,KAAKqB,WAAWT,KACxEZ,KAAKqB,WAAWT,KAAOuL,EAAOvL,KAC9BY,EAAa2K,EAAOpK,UAAU,EAAGnB,GAAKZ,KAAKqB,WAAWT,GAAKuL,EAAOpK,UAAUnB,EAAGuL,EAAOtL,WAExFuL,GAEF5K,EAAY,CACZ,GAAMA,EAAWZ,KAAOZ,KAAKsB,YAAgBV,EAAIZ,KAAKC,QAAQqE,gBACzDtE,KAAKC,QAAQmC,MAAMiK,QAAQrM,KAAKsB,YAAc,GAAMtB,KAAKC,QAAQqE,eAAiB8H,IAAexL,EAAI,CACtGwL,EAAY,CACZ,OAEJD,EAAS3K,EAGjB,KAAOZ,GAAK,GAAKY,GAAY,CACzB,GAAU,IAANZ,GAAiC,OAAtBY,EAAWZ,EAAI,GAAa,CACvC,GAAsB,MAAlBY,EAAWZ,GAAY,CACvB2I,EAAMA,EAAI+C,aACV,OAEC,GAAsB,MAAlB9K,EAAWZ,GAAY,CAC5B2I,EAAMA,EAAIgD,aACV,OAEC,GAAsB,MAAlB/K,EAAWZ,GAChB,QAGNA,EAEN,MAAO2I,GAOX,QAAgBpH,GAAa6F,GACzB,GAAIhI,KAAKS,UAAgB4E,KAAR2C,QAAyC3C,KAAnBrF,KAAKiI,WAA2BjI,KAAKiI,YAAcD,GAAM,CAO5F,GANAhI,KAAKgH,cAAe,EACpB9E,EAAgBjB,KAAKjB,KAAMA,KAAKwB,YACpB,KAARwG,GAAwB,OAARA,GAAwC,UAAxBhI,KAAKgG,gBAA8BhG,KAAKiG,cACxEjG,KAAKC,QAAQqE,eAAiB,EAC9BtE,KAAKC,QAAQuE,aAAe,GAEpB,OAARwD,EACA,IAAK,GAAIpH,GAAI,EAAGA,EAAIoH,EAAInH,OAAQD,IAC5BqG,EAAchG,KAAKjB,KAAMgI,EAAIpH,IAAI,EAAO,KAGhD,IAAI4L,GAAS1H,EAAc7D,KAAKjB,KAAMA,KAAKC,QAC3CD,MAAKiI,UAAYuE,EACjBxM,KAAKoC,MAAQoK,EACb/H,EAAuBxD,KAAKjB,KAAM,KAAM,MACxCA,KAAKgH,cAAe,CACpB,IAAIT,GAAevG,KAAKC,QAAQuG,WAAWC,cAAc,gBACrDzG,MAAKC,QAAQmC,QAAUpC,KAAKwB,YAAsC,SAAxBxB,KAAKgG,gBAA6BhG,KAAKiG,cAChFvE,oBAAkB6E,IAAiBA,EAAaxC,UAAUC,SAAS0C,MAAc1G,KAAKsG,UACvFK,eAAaJ,GAAeG,IAC5BuF,YAAU1F,GAAekG,IACzBvK,EAAgBjB,KAAKjB,KAAM,MAGjB,OAAdA,KAAKS,MAA+B,KAAdT,KAAKS,UAA8B4E,KAAfrF,KAAKoC,QAC/CF,EAAgBjB,KAAKjB,KAAMA,KAAKoC,OAQxC,QAAgBF,GAAgB8F,EAAK/H,IAC5BD,KAAKsG,SAAmC,SAAxBtG,KAAKgG,gBAA6BhG,KAAKiG,aAAevE,oBAAkB1B,KAAKoC,SAC9F4F,EAAM,GAEV,IAAI5F,GAAQ0C,EAAc7D,KAAKjB,KAAOC,GAAoBD,KAAKC,QAAU+H,EAC3D,QAAV5F,GAA4B,KAAVA,GAClBsK,QAAMC,SAAS3E,EAAM/H,GAAoBD,KAAKC,QAAUD,KAAKgG,gBAAgB,GACzEhG,KAAKyD,iBACLzD,KAAK0D,SAASC,YAAYI,UAAUxB,IAAI,sBAI5CmK,QAAMC,SAAS3E,EAAM/H,GAAoBD,KAAKC,QAAUD,KAAKgG,eAAgBhG,KAAKyD,iBAQ1F,QAAgBmJ,GAAUC,GACtB,GAAIC,GAAWC,EAAaF,EAC5B5K,GAAUhB,KAAK6L,EACf,IAAI9E,GAAMlD,EAAc7D,KAAKjB,KAAMA,KAAKC,QACxCD,MAAKiI,UAAYD,EACjBhI,KAAKoC,MAAQ4F,EACT6E,EAAKpM,OACL8C,EAAatC,KAAK6L,GAClBzK,EAAWpB,KAAK6L,IAGxB,QAASC,GAAaF,GAClBZ,YAAUY,EAAK5M,SAAU+M,GACzB,IAAIF,IACA7M,QAAS4M,EAAK5M,QACdQ,KAAMoM,EAAKpM,KACXe,WAAY,GACZH,WAAY,GACZE,gBAAiB,GACjBD,WAAYuL,EAAKvL,WAAcuL,EAAKvL,WAAWT,OAAS,EAAKgM,EAAKvL,WAAauL,EAAKvL,WAAW,GACzFuL,EAAKvL,WAAa,IACxBc,MAAOyK,EAAKzK,MAAQyK,EAAKzK,MAAQ,KACjCgD,aAAc6H,GACd9L,sBACAQ,iBAAkBkL,EAAKlL,iBACvB2F,cACAnD,cACA6C,cAAc,EACdiB,UAAW,GAGf,OADAnI,GAAWmB,KAAK6L,GACTA,EAOX,QAAgBI,GAAOL,GACnB,MAAO/H,GAAc7D,KAAKkM,EAAeN,GAAOA,EAAK5M,SAOzD,QAAgBmN,GAAaP,GACzB,MAAOhI,GAAgB5D,KAAKkM,EAAeN,GAAOA,EAAK5M,SAE3D,QAASkN,GAAeN,GACpB,GAAIC,EAIJ,QAHKpL,oBAAkBmL,IAASA,EAAK5M,QAAQ8D,UAAUC,SAASgJ,MAC5DF,EAAWC,EAAaF,IAErBC,EC9mCX,GAEIO,IACAC,IAAK,QACLC,QAAS,aACTC,MAAO,UACPC,SAAU,qBACV1B,WAAY,gBACZC,WAAY,gBACZ0B,UAAW,eACXC,UAAW,eACXC,UAAW,eACXC,cAAe,oBACfC,SAAU,cACVC,YAAa,iBACbC,aAAc,mBACdC,eAAgB,qBAChBC,eAAgB,uBAOpB,SAAWxB,GAeP,QAASyB,GAAYtB,EAAMuB,GACvB,GAAIC,GAAe3M,oBAAkB0M,GAAiDE,gBAAxBF,EAC1DG,GAAgBzI,UAAW,KAAM0I,WAAa7K,YAAa,KAqB/D,IApBA8K,EAAY5B,EAAK7G,eACjB0I,EAAoB7B,EAAK8B,gBACrBjN,oBAAkBmL,EAAK7G,iBAA2C,UAAxB6G,EAAK7G,gBAC/CuI,EAAYzI,UAAY8I,EAAqB/B,EAAMQ,EAAWtB,WAAYsB,EAAWY,eAAgB,OAAQI,GAC7GxB,EAAK5M,QAAQuG,WAAWqI,aAAaN,EAAYzI,UAAW+G,EAAK5M,SACjEgM,YAAUY,EAAK5M,SAAUoN,EAAWG,OACpCe,EAAYzI,UAAUgJ,YAAYjC,EAAK5M,UAGvC8O,EAAoBlC,EAAM0B,EAAaF,GAE3CW,EAAiBnC,GACZnL,oBAAkBmL,EAAKoC,aAAgBvN,oBAAkBmL,EAAKoC,WAAWxL,mBAC1EoJ,EAAKoC,WAAWxL,iBAA4C,aAAzBoJ,EAAK5M,QAAQ0E,UAChDuK,EAAerC,EAAKoC,WAAWxL,gBAAiBoJ,EAAK5M,QAASsO,GAAa,EAAMF,GACjFE,EAAY5K,YAAYwL,aAAa,OAAQ,UACzCZ,EAAYzI,UAAU/B,UAAUC,SAASqJ,EAAWrB,aACpDC,YAAUsC,EAAYzI,WAAYuH,EAAWtB,cAGhDrK,oBAAkBmL,EAAK2B,UAAqC,aAAzB3B,EAAK5M,QAAQ0E,QACjD,IAAK,GAAI/D,GAAI,EAAGA,EAAIiM,EAAK2B,QAAQ3N,OAAQD,IACrC2N,EAAYC,QAAQpN,KAAKgO,EAAWvC,EAAK2B,QAAQ5N,GAAI2N,EAAYzI,UAAWuI,GASpF,OANK3M,qBAAkBmL,EAAK5M,UAAqC,aAAzB4M,EAAK5M,QAAQ0E,SACjDsH,YAAUsC,EAAYzI,WAAYuH,EAAWI,UAEjD4B,EAAkBd,EAAYzI,UAAW+G,EAAK5M,SAC9CsO,EAAce,EAAiBzC,EAAM0B,GAMzC,QAASS,GAAiBnC,GACtB0C,EAAgB1C,EAAK7G,eAAgB6G,EAAK5M,SAC1C4M,EAAK5M,QAAQuP,iBAAiB,QAAS,WACnC,GAAIC,GAASC,EAAc1P,OACvByP,EAAO1L,UAAUC,SAAS,kBAAoByL,EAAO1L,UAAUC,SAAS,cACrEyL,EAAO1L,UAAUC,SAAS,cAC7ByL,EAAO1L,UAAUxB,IAAI,mBAG7BsK,EAAK5M,QAAQuP,iBAAiB,OAAQ,WAClC,GAAIC,GAASC,EAAc1P,OACvByP,EAAO1L,UAAUC,SAAS,kBAAoByL,EAAO1L,UAAUC,SAAS,cACrEyL,EAAO1L,UAAUC,SAAS,cAC7ByL,EAAO1L,UAAUP,OAAO,mBAGhCqJ,EAAK5M,QAAQuP,iBAAiB,QAAS,WACnCD,EAAgBd,EAAW5B,EAAK5M,WAIxC,QAASsP,GAAgBvJ,EAAgBR,GACrC,GAAImK,GAAanK,EAAapD,KACX,MAAfuN,IAAsBjO,oBAAkBiO,IAAenK,EAAaqG,cACpErG,EAAaqG,cAAc9H,UAAUxB,IAAI,iBAEjB,WAAnByD,GAA+BR,EAAaqG,eACjDrG,EAAaqG,cAAc9H,UAAUP,OAAO,iBAGpD,QAASoM,KACL,GAAIC,GAAQH,EAAc1P,MAAM8P,uBAAuB,gBAAgB,EAClEpO,qBAAkBmO,KACnB5D,YAAU4D,GAAQxC,EAAWS,UACzB+B,EAAM9L,UAAUC,SAASqJ,EAAWU,cACpCpH,eAAakJ,GAAQxC,EAAWU,cAI5C,QAASgC,KACL,GAAIN,GAASC,EAAc1P,KAC3B,IAAKyP,EAAOO,qBAAqB,YAAY,GAA2D,KAArDP,EAAOO,qBAAqB,YAAY,GAAG5N,MACxC,KAAlDqN,EAAOO,qBAAqB,SAAS,GAAG5N,MAAc,CACtD,GAAIyN,GAAQJ,EAAOK,uBAAuB,gBAAgB,EACrDpO,qBAAkBmO,KACfA,EAAM9L,UAAUC,SAASqJ,EAAWS,WACpCnH,eAAakJ,GAAQxC,EAAWS,UAEpC7B,YAAU4D,GAAQxC,EAAWU,eAIzC,QAASkC,GAAmBhQ,GACxBA,EAAQuP,iBAAiB,QAASI,GAClC3P,EAAQuP,iBAAiB,OAAQO,GAGrC,QAASG,GAAqBjQ,GAC1BA,EAAQkQ,oBAAoB,QAASP,GACrC3P,EAAQkQ,oBAAoB,OAAQJ,GAExC,QAAShB,GAAoBlC,EAAM0B,EAAaH,GAC5C,GAAIC,GAAe3M,oBAAkB0M,GAAiDE,gBAAxBF,CAClC,UAAxBvB,EAAK7G,gBACLiK,EAAmBpD,EAAK5M,SAExByB,oBAAkB6M,EAAYzI,YAC9ByI,EAAYzI,UAAY8I,EAAqB/B,EAAMQ,EAAWrB,WAAYqB,EAAWa,eAAgB,MAAOG,GACxGxB,EAAK5M,QAAQuG,YACbqG,EAAK5M,QAAQuG,WAAWqI,aAAaN,EAAYzI,UAAW+G,EAAK5M,WAIhEyB,oBAAkBmL,EAAKuD,YACxB7B,EAAYzI,UAAU/B,UAAUxB,IAAI8K,EAAWa,gBAEnDK,EAAYzI,UAAU/B,UAAUxB,IAAI8K,EAAWrB,YAEnD,IAAIqE,GAAkBhC,EAAY,QAAUiC,UAAWjD,EAAWK,YAC9D6C,EAAoBlC,EAAY,SAAWiC,UAAWjD,EAAWM,WAgBrE,IAfKjM,oBAAkBmL,EAAK5M,QAAQuQ,KAA2B,KAApB3D,EAAK5M,QAAQuQ,KACpDD,EAAkBC,GAAK,SAAW3D,EAAK5M,QAAQuQ,GAAG/O,QAAQ,KAAM,KAChE1B,aAAW8M,EAAK5M,SAAWwQ,kBAAmBF,EAAkBC,MAE/D9O,oBAAkBmL,EAAK5M,QAAQgG,cAA6C,KAA7B4G,EAAK5M,QAAQgG,cAC7DsK,EAAkBG,UAAYC,EAAkB9D,EAAK5M,QAAQgG,aAC7D4G,EAAK5M,QAAQ2Q,gBAAgB,gBAE5BlP,oBAAkBmL,EAAKoC,aAAgBvN,oBAAkBmL,EAAKoC,WAAWhJ,cAC1C,KAAhC4G,EAAKoC,WAAWhJ,cAChBsK,EAAkBG,UAAYC,EAAkB9D,EAAKoC,WAAWhJ,cAE/DsK,EAAkBG,WACnBnC,EAAYzI,UAAU/B,UAAUxB,IAAI8K,EAAWW,cAE/CO,EAAYzI,UAAU/B,UAAUC,SAAS,qBAAsB,CAC/D,GAAI6M,GAAYtC,EAAYzI,UAAUW,cAAc,mBACpDoK,GAAU/B,YAAYjC,EAAK5M,SAC3B4Q,EAAU/B,YAAYuB,GACtBQ,EAAU/B,YAAYyB,OAGtBhC,GAAYzI,UAAUgJ,YAAYjC,EAAK5M,SACvCsO,EAAYzI,UAAUgJ,YAAYuB,GAClC9B,EAAYzI,UAAUgJ,YAAYyB,EAEtCO,GAAiBjE,EAAK5M,QAAQmC,MAAOmO,GACT,WAAxB1D,EAAK7G,iBACDuK,EAAkBxM,UAAUC,SAASqJ,EAAWU,cAChDpH,eAAa4J,GAAoBlD,EAAWU,aAEhD9B,YAAUsE,GAAoBlD,EAAWS,WAEjB,SAAxBjB,EAAK7G,iBAEL6G,EAAK5M,QAAQuP,iBAAiB,QAAS,SAAUtL,GAC7C4M,EAAiBjE,EAAK5M,QAAQmC,MAAOmO,KAGzC1D,EAAK5M,QAAQuP,iBAAiB,OAAQ,SAAUtL,GAC5C4M,EAAiBjE,EAAK5M,QAAQmC,MAAOmO,MAGxC7O,oBAAkBmL,EAAK5M,QAAQ8Q,aAAa,QAC7CR,EAAkBpB,aAAa,MAAOtC,EAAK5M,QAAQ8Q,aAAa,OAGxE,QAASC,GAAoBtI,EAAM5C,GAClB,WAAT4C,GAAqB5C,EAAU/B,UAAUC,SAAS,cAClD8B,EAAU/B,UAAUxB,IAAI,iBAGhC,QAAS+M,GAAiBzC,EAAM0B,GAC5B,IAAK7M,oBAAkBmL,EAAKoC,YACxB,IAAK,GAAIgC,GAAK,EAAGC,EAAKC,OAAOC,KAAKvE,EAAKoC,YAAagC,EAAKC,EAAGrQ,OAAQoQ,IAEhE,OADWC,EAAGD,IAEV,IAAK,WACDI,EAAYxE,EAAKoC,WAAWqC,UAAW/C,EAAYzI,YACnDkL,EAAoBnE,EAAK7G,eAAgBuI,EAAYzI,UACrD,MACJ,KAAK,UACDyL,EAAW1E,EAAKoC,WAAW9L,QAAS0J,EAAK5M,QAAS4M,EAAK7G,eAAgBuI,EAAYzI,UACnF,MACJ,KAAK,YACD0L,EAAa3E,EAAKoC,WAAWwC,WAAYlD,EAAYzI,WACrD,MACJ,KAAK,cACD4L,EAAe7E,EAAKoC,WAAWhJ,YAAa4G,EAAK5M,QACjD,MACJ,KAAK,WACD0R,EAAY9E,EAAKoC,WAAWrI,SAAUiG,EAAK5M,SAK3D,MAAOsO,GAEX,QAASqD,GAAgBxP,EAAOyP,GACxBzP,EACAuE,eAAakL,GAASxE,EAAWQ,eAGjC5B,YAAU4F,GAASxE,EAAWQ,eAGtC,QAASiD,GAAiB1O,EAAOyN,GACzBzN,GACA6J,YAAU4D,GAAQxC,EAAWS,UACzB+B,EAAM9L,UAAUC,SAASqJ,EAAWU,cACpCpH,eAAakJ,GAAQxC,EAAWU,eAIhC8B,EAAM9L,UAAUC,SAASqJ,EAAWS,WACpCnH,eAAakJ,GAAQxC,EAAWS,UAEpC7B,YAAU4D,GAAQxC,EAAWU,cAGrC,QAAS2B,GAAczP,GACnB,GAAIuG,GAAa9E,oBAAkBzB,EAAQuG,YAAcvG,EACnDA,EAAQuG,UAId,OAHIA,IAAcA,EAAWzC,UAAUC,SAAS,qBAC5CwC,EAAaA,EAAWA,YAErBA,EAKX,QAASsL,GAAkB7R,EAASsO,EAAawD,EAAS3D,GACtD,GACIyD,IADenQ,oBAAkB0M,GAAiDE,gBAAxBF,GACrC,QAAUkC,UAAWjD,EAAWO,YACrD9H,EAAYyI,EAAYzI,SAgB5B,OAfKpE,qBAAkBqQ,IAIDxD,EAAYzI,UAAU/B,UAAUC,SAASqJ,EAAWrB,YAClEuC,EAAYzI,UAAUW,cAAc,IAAM4G,EAAWM,WAAa1N,GAC1D+R,sBAAsB,WAAYH,GAL9C/L,EAAUgJ,YAAY+C,IAOrBnQ,oBAAkBoE,IACnBA,EAAU/B,UAAUC,SAASqJ,EAAWrB,aACxCC,YAAUnG,GAAYuH,EAAWtB,YAErCE,YAAU4F,GAASxE,EAAWQ,eAC9BoE,EAAmBhS,EAAS4R,EAAQ/L,GACpC+L,EAAO1C,aAAa,aAAc,SAC3B0C,EAGX,QAASI,GAAmBhS,EAAS4R,EAAQ/L,QAChBT,IAArBqJ,GAAkCA,IAClCmD,EAAOrC,iBAAiB,QAAS,SAAUtL,GACjCjE,EAAQ8D,UAAUC,SAASqJ,EAAWE,UAAYtN,EAAQiS,WAC5DhO,EAAMJ,iBACF7D,IAAYkS,SAASC,eACrBnS,EAAQoS,QAEZpS,EAAQmC,MAAQ,GAChB6J,YAAU4F,GAASxE,EAAWQ,kBAK1C5N,EAAQuP,iBAAiB,QAAS,SAAUtL,GACxC0N,EAAgB3R,EAAQmC,MAAOyP,KAGnC5R,EAAQuP,iBAAiB,QAAS,SAAUtL,GACxC0N,EAAgB3R,EAAQmC,MAAOyP,KAGnC5R,EAAQuP,iBAAiB,OAAQ,SAAUtL,GACvCgC,WAAW,WACP+F,YAAU4F,GAASxE,EAAWQ,gBAC/B,OAIX,QAASyE,GAAcrS,EAAS+F,GAE5B,GADa0J,EAAczP,GAChB8D,UAAUC,SAASqJ,EAAWrB,aAAkC,SAAnBhG,EAA2B,CAC/E,GAAI6J,GAAQH,EAAczP,GAAS6P,uBAAuB,gBAAgB,EAC1EgB,GAAiB7Q,EAAQmC,MAAOyN,IAMxC,QAASjB,GAAqB/B,EAAMyD,EAAWiC,EAAUC,EAAKpE,GAC1D,GACItI,GADAuI,EAAe3M,oBAAkB0M,GAAiDE,gBAAxBF,CAU9D,OARK1M,qBAAkBmL,EAAKuD,WAKxBtK,EAAYuI,EAAYmE,GAAOlC,UAAWA,KAJ1CxK,EAAYuI,EAAYxB,EAAKuD,WAAaE,UAAWA,KAC3CvM,UAAUxB,IAAIgQ,GAK5BzM,EAAU/B,UAAUxB,IAAI,qBACjBuD,EAEX,QAAS6K,GAAkB1K,GACvB,GAAIwM,GAAS,EACb,KAAK/Q,oBAAkBuE,IAAgC,KAAhBA,EAAoB,CACvD,GAAIyM,GAAUP,SAAS7D,cAAc,OACrCoE,GAAQC,UAAY,wBAA0B1M,EAAc,MAE5DwM,EADmBC,EAAQE,SAAS,GACf3M,YAEzB,MAAOwM,GAaX,QAAS9F,GAASvK,EAAOnC,EAAS+F,EAAgBrC,GAK9C,GAJA1D,EAAQmC,MAAQA,EACVV,oBAAkBsE,IAAuC,SAAnBA,GACxCsM,EAAcrS,EAAS+F,IAEtBtE,oBAAkBiC,IAAgBA,EAAa,CAChD,GAAIkI,GAAgB6D,EAAczP,EAClC,KAAKyB,oBAAkBmK,GAAgB,CACnC,GAAIgG,GAAShG,EAAciE,uBAAuBzC,EAAWO,WAAW,EACnElM,qBAAkBmQ,KACf5R,EAAQmC,OAASyJ,EAAc9H,UAAUC,SAAS,iBAClD2C,eAAakL,GAASxE,EAAWQ,eAGjC5B,YAAU4F,GAASxE,EAAWQ,iBAK9C0B,EAAgBvJ,EAAgB/F,GAcpC,QAASoR,GAAYC,EAAUuB,EAAUC,GAChCpR,oBAAkBoR,IAA0B,KAAbA,GAChCnM,cAAYkM,EAAUC,EAASnS,MAAM,MAEpCe,oBAAkB4P,IAA0B,KAAbA,GAChCrF,WAAS4G,EAAUvB,EAAS3Q,MAAM,MAa1C,QAASoS,GAASC,EAAOlN,GACA,gBAAVkN,GACPlN,EAAUmN,MAAMD,MAAQE,aAAWF,GAEb,gBAAVA,KACZlN,EAAUmN,MAAMD,MAASA,EAAMlR,MAAM,aAAyBoR,aAAWF,IAajF,QAAStB,GAAezL,EAAahG,GACjCgG,EAAc0K,EAAkB1K,EAChC,IAAI4F,GAAgB6D,EAAczP,EAC9B4L,GAAc9H,UAAUC,SAASqJ,EAAWrB,YACvCtK,oBAAkBuE,IAAgC,KAAhBA,GAMnC4F,EAAc9H,UAAUxB,IAAI8K,EAAWW,cACvCnC,EAAciE,uBAAuBzC,EAAWM,WAAW,GAAGwF,YAAc,KAN5EtH,EAAciE,uBAAuBzC,EAAWM,WAAW,GAAGwF,YAAclN,EAC5E4F,EAAc9H,UAAUP,OAAO6J,EAAWW,cAC1C/N,EAAQ2Q,gBAAgB,gBAQvBlP,oBAAkBuE,IAAgC,KAAhBA,GAInChG,EAAQ2Q,gBAAgB,eACxB3Q,EAAQ2Q,gBAAgB,qBAJxB7Q,aAAWE,GAAWgG,YAAeA,EAAamN,mBAAoBnN,IAoBlF,QAAS0L,GAAY0B,EAAYpT,EAAS+F,GAClCqN,EACAtT,aAAWE,GAAW2G,SAAU,KAGhC3G,EAAQ2Q,gBAAgB,YAEvBlP,oBAAkBsE,IACnBsM,EAAcrS,EAAS+F,GAe/B,QAASwL,GAAa8B,EAAOT,GACrBS,EACArH,WAAS4G,EAAUxF,EAAWC,KAG9B3G,cAAYkM,EAAUxF,EAAWC,KAezC,QAASiE,GAAWgC,EAAUtT,EAAS+F,EAAgBwN,GACnD,GAAIC,IAAkBC,SAAY,WAAYC,gBAAiB,QAC3DC,GAAkBlS,oBAAkB8R,EACpCD,IACAtT,EAAQ8D,UAAUP,OAAO6J,EAAWE,SACpCsG,EAAiBJ,EAAexT,GAC5B2T,GACAjN,eAAa6M,GAAiBnG,EAAWE,WAI7CtN,EAAQ8D,UAAUxB,IAAI8K,EAAWE,SACjCuG,EAAcL,EAAexT,GACzB2T,GACA3H,YAAUuH,GAAiBnG,EAAWE,UAGzC7L,oBAAkBsE,IACnBsM,EAAcrS,EAAS+F,GAI/B,QAASkJ,GAAe6E,EAAS9T,EAASsO,EAAawD,EAAS3D,GAC5D,GAAIC,GAAe3M,oBAAkB0M,GAAiDE,gBAAxBF,CAC1D2F,GACAxF,EAAY5K,YAAcmO,EAAkB7R,EAASsO,EAAawD,EAAS1D,IAG3E7K,SAAO+K,EAAY5K,aACnB4K,EAAY5K,YAAc,MAelC,QAASkQ,GAAiBG,EAAO/T,GAC7B,IAAK,GAAIgR,GAAK,EAAGC,EAAKC,OAAOC,KAAK4C,GAAQ/C,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC5D,GAAI1H,GAAM2H,EAAGD,GACTpF,EAAgB6D,EAAczP,EACtB,cAARsJ,GACAtJ,EAAQ8D,UAAUP,OAAO6J,EAAWE,SAE5B,aAARhE,GAAsBsC,EAAc9H,UAAUC,SAASqJ,EAAWtB,aAClEF,EAAc9H,UAAUP,OAAO6J,EAAWE,SAElC,gBAARhE,GAAyBsC,EAAc9H,UAAUC,SAASqJ,EAAWrB,YACrEH,EAAciE,uBAAuBzC,EAAWM,WAAW,GAAGwF,YAAc,GAG5ElT,EAAQ2Q,gBAAgBrH,IAgBpC,QAASuK,GAAcE,EAAO/T,GAC1B,IAAK,GAAIgR,GAAK,EAAGC,EAAKC,OAAOC,KAAK4C,GAAQ/C,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC5D,GAAI1H,GAAM2H,EAAGD,GACTpF,EAAgB6D,EAAczP,EACtB,cAARsJ,GACAtJ,EAAQ8D,UAAUxB,IAAI8K,EAAWE,SAEzB,aAARhE,GAAsBsC,EAAc9H,UAAUC,SAASqJ,EAAWtB,aAClEF,EAAc9H,UAAUxB,IAAI8K,EAAWE,SAE/B,gBAARhE,GAAyBsC,EAAc9H,UAAUC,SAASqJ,EAAWrB,YACrEH,EAAciE,uBAAuBzC,EAAWM,WAAW,GAAGwF,YAAca,EAAMzK,GAGlFtJ,EAAQkP,aAAa5F,EAAKyK,EAAMzK,KAK5C,QAAS0K,GAAeC,GACpB,GAAIpO,GAAYoO,EAAMpO,SACtB,KAAKpE,oBAAkBoE,IAAcA,EAAU/B,UAAUC,SAASqJ,EAAWrB,YAAa,CACtF,GAAIc,GAAWhH,EAAUW,cAAc,YAAcX,EAAUW,cAAc,YACzEX,EAAUW,cAAc,SACxBR,EAAcH,EAAUW,cAAc,IAAM4G,EAAWM,WAAWwF,YAClExP,EAA2D,OAA7CmC,EAAUW,cAAc,gBAC1C0N,UAAOrO,EAAUW,cAAc,IAAM4G,EAAWK,YAChDyG,SAAOrO,EAAUW,cAAc,IAAM4G,EAAWM,YAChD5J,YAAU+B,GAAYuH,EAAWtB,aAAcsB,EAAWrB,aAC1DkE,EAAqBpD,GACrB/M,aAAW+M,GAAY7G,YAAeA,IACtC6G,EAAS/I,UAAUxB,IAAI8K,EAAWG,OAC7B7J,GAAoC,UAArBmJ,EAASnI,SACzBmI,EAAS8D,gBAAgB,aAKrC,QAASwD,GAAYF,EAAOxL,EAAMzC,EAAamI,GAC3C,GAAIC,GAAe3M,oBAAkB0M,GAAiDE,gBAAxBF,EAC1DtI,EAAYuO,UAAQH,EAAO,IAAM7G,EAAWtB,WAEhD,IADA0C,EAAY/F,EACC,UAATA,EAAkB,CAClB,GAAI0H,GAAYtK,EAAUnB,QAEtBkI,GAAS5M,QAASiU,EAAOlO,eAAgB0C,EACzC0H,UAFJA,EAA0B,QAAdA,GAAqC,SAAdA,EAAuBA,EAAY,KAE5CnB,YAAchJ,YAAaA,IACjDqO,EAAUxO,EAAUW,cAAc,iBAClC/C,GAAaoC,UAAWA,EAC5BoO,GAAMnQ,UAAUP,OAAO6J,EAAWG,OAClCuB,EAAoBlC,EAAMnJ,EAAU2K,EACpC,IAAIkG,GAAgBzO,EAAU/B,UAAUC,SAAS,oBAUjD,IATItC,oBAAkB4S,KAGdA,EAFAC,EACgBzO,EAAUW,cAAc,oBACpBA,cAAc,uBAGxBX,EAAUW,cAAc,wBAGtC/E,oBAAkB4S,GACdC,IACAD,EAAUxO,EAAUW,cAAc,wBAElC/E,oBAAkB4S,IAClBxO,EAAU/B,UAAUP,OAAO6J,EAAWtB,gBAGzC,CACD,GAAIyI,GAAY1O,EAAUW,cAAc,IAAM4G,EAAWK,WACrD+G,EAAY3O,EAAUW,cAAc,IAAM4G,EAAWM,WACrD+G,EAAUH,EAAgBzO,EAAUW,cAAc,oBAAsBX,CAC5E4O,GAAQ7F,aAAaqF,EAAOI,GAC5BI,EAAQ7F,aAAa2F,EAAWF,GAChCI,EAAQ7F,aAAa4F,EAAWH,IAGxCtD,EAAoBtI,EAAMwL,EAAMrI,eAcpC,QAAS8I,GAAUC,EAAUlR,GACzB,IAAK,GAAI9C,GAAI,EAAGA,EAAI8C,EAAS7C,OAAQD,IACjCiU,EAAgBD,EAAUlR,EAAS9C,GAAGkF,WAI9C,QAAS+O,GAAgBD,EAAU9O,EAAW+L,GAC1C,GAAIiD,KACJA,GAAW1T,KAAKyQ,EAChB,IAAIrD,GAAU9M,oBAAkBmQ,GAC5B/L,EAAUiP,iBAAiB,uBAAyBD,CACxD,IAAIF,GAAYpG,EAAQ3N,OAAS,EAC7B,IAASqI,EAAQ,EAAGA,EAAQsF,EAAQ3N,OAAQqI,IACxCsF,EAAQtF,GAAOsG,iBAAiB,YAAawF,GAAoB,GACjExG,EAAQtF,GAAOsG,iBAAiB,UAAWyF,GAAkB,OAGhE,IAAIzG,EAAQ3N,OAAS,EACtB,IAAK,GAAIqI,GAAQ,EAAGA,EAAQsF,EAAQ3N,OAAQqI,IACxCsF,EAAQtF,GAAOiH,oBAAoB,YAAa6E,EAAoBhV,MACpEwO,EAAQtF,GAAOiH,oBAAoB,UAAW8E,EAAkBjV,MAI5E,QAASkV,GAAepP,EAAW+L,GAC1B/L,EAAU/B,UAAUC,SAAS,eAAkB8B,EAAUW,cAAc,SAASyL,UACjFL,EAAO9N,UAAUxB,IAAI,sBAG7B,QAASyS,KAIL,IAFA,GAAIG,GAAMnV,KACNoV,EAAYpV,KAAK6L,eACbuJ,EAAUrR,UAAUC,SAAS,kBACjCoR,EAAYA,EAAUvJ,aAE1BqJ,GAAeE,EAAWD,GAE9B,QAASF,KAEL,GAAIE,GAAMnV,IACVkG,YAAW,WACPiP,EAAIpR,UAAUP,OAAO,uBACtB,KAEP,QAAS6R,GAAcC,EAAWjH,GAC9B,GAAIwD,GAASxD,EAAY,QAAUiC,UAAWgF,GAE9C,OADAzD,GAAO9N,UAAUxB,IAAI,sBACdsP,EAeX,QAAS0D,GAAQC,EAAUC,EAAO3P,EAAWoO,EAAOwB,GAEhD,GAAIjD,GAA4B,mBAAWgD,EAAM9U,MAAM,KACjD8U,CACN,IAA+B,WAA3BD,EAASjJ,cACT,IAAK,GAAI0E,GAAK,EAAG0E,EAAWlD,EAAQxB,EAAK0E,EAAS9U,OAAQoQ,IAEtD7B,EADIwG,EAAOD,EAAS1E,GACHnL,EAAW4P,OAIhC,KAAK,GAAIxE,GAAK,EAAG2E,EAAWpD,EAAQvB,EAAK2E,EAAShV,OAAQqQ,IAAM,CAC5D,GAAI0E,GAAOC,EAAS3E,EACpB4E,GAAYF,EAAM9P,EAAWoO,EAAOwB,IAiBhD,QAASI,GAAYR,EAAWxP,EAAWN,EAAc4I,GAErD,GAAIC,GAAe3M,oBAAkB0M,GAAiDE,gBAAxBF,EAC1DyD,EAASwD,EAAcC,EAAWjH,EACtCvI,GAAU/B,UAAUxB,IAAI,oBACxB,IAAIwT,GAAejQ,EAAUW,cAAc,mBAC3C,IAAI/E,oBAAkBqU,GAAe,CACjCA,EAAe1H,EAAY,QAAUiC,UAAW,oBAChD9K,EAAagB,WAAWqI,aAAakH,EAAcvQ,EACnD,IAAIiN,GAAS3M,EAAUiP,iBAAiBvP,EAAab,QAAU,OAC/DoR,GAAajH,YAAYtJ,EACzB,KAAK,GAAI5E,GAAI,EAAGA,EAAI6R,EAAO5R,OAAQD,IAC/BmV,EAAajH,YAAY2D,EAAO7R,IAQxC,MALAmV,GAAavP,WAAWqI,aAAagD,EAAQkE,GACxCjQ,EAAU/B,UAAUC,SAASqJ,EAAWtB,aACzCjG,EAAU/B,UAAUxB,IAAI8K,EAAWtB,YAEvC8I,GAAgB,EAAM/O,EAAW+L,GAC1BA,EAaX,QAASzC,GAAWkG,EAAWxP,EAAWsI,GACtC,GACIyD,GAASwD,EAAcC,EADR5T,oBAAkB0M,GAAiDE,gBAAxBF,EAS9D,OAPKtI,GAAU/B,UAAUC,SAASqJ,EAAWtB,aACzCjG,EAAU/B,UAAUxB,IAAI8K,EAAWtB,aAE3BjG,EAAU/B,UAAUC,SAAS,qBAAwB8B,EAAUW,cAAc,oBACrFX,GACCgJ,YAAY+C,GACjBgD,GAAgB,EAAM/O,EAAW+L,GAC1BA,EAGX,QAASxC,GAAkB2G,EAAkB9B,GACtB,WAAfA,EAAMxL,KACNsN,EAAiBjS,UAAUxB,IAAI,YAE1ByT,EAAiBjS,UAAUC,SAAS,aACzCgS,EAAiBjS,UAAUP,OAAO,YA5xB1C,GAKIiL,GACAC,GAAoB,CA6CxBhC,GAAMyB,YAAcA,EAqBpBzB,EAAMsC,iBAAmBA,EAoCzBtC,EAAMuD,mBAAqBA,EAyL3BvD,EAAMuF,mBAAqBA,EAkE3BvF,EAAMC,SAAWA,EAoBjBD,EAAM2E,YAAcA,EAkBpB3E,EAAMqG,SAAWA,EAkCjBrG,EAAMgF,eAAiBA,EAuBvBhF,EAAMiF,YAAcA,EAoBpBjF,EAAM8E,aAAeA,EAiCrB9E,EAAM6E,WAAaA,EAWnB7E,EAAMwC,eAAiBA,EA8BvBxC,EAAMmH,iBAAmBA,EA8BzBnH,EAAMoH,cAAgBA,EAmBtBpH,EAAMuH,eAAiBA,EA2CvBvH,EAAM0H,YAAcA,EAiBpB1H,EAAMiI,UAAYA,EA2ElBjI,EAAM6I,QAAUA,EAmChB7I,EAAMoJ,YAAcA,EAuBpBpJ,EAAM0C,WAAaA,EASnB1C,EAAM2C,kBAAoBA,GAC3B3C,UAAUA,YC1zBb,IAAIuJ,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB/E,OAAOkF,iBAChBC,uBAA2BC,QAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,MACpDL,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASM,KAAO1W,KAAK2W,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAajF,OAAO0F,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,GAAIF,QAGnFI,EAA0C,SAAUC,EAAYC,EAAQzN,EAAK0N,GAC7E,GAA2Hd,GAAvHe,EAAIC,UAAUtW,OAAQuW,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAO9F,OAAOkG,yBAAyBL,EAAQzN,GAAO0N,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQzN,EAAK0N,OACpH,KAAK,GAAIrW,GAAImW,EAAWlW,OAAS,EAAGD,GAAK,EAAGA,KAASuV,EAAIY,EAAWnW,MAAIwW,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQzN,EAAK6N,GAAKjB,EAAEa,EAAQzN,KAAS6N,EAChJ,OAAOF,GAAI,GAAKE,GAAKjG,OAAOqG,eAAeR,EAAQzN,EAAK6N,GAAIA,GAS5DK,EAAW,qBAMXC,EAAY,GAAI9V,QAAO,gBAMvB+V,GAAqB,QAAS,QAAS,SAavCC,EAAgC,SAAUC,GAQ1C,QAASD,GAAeE,EAAS7X,GAC7B,GAAIsF,GAAQsS,EAAO5W,KAAKjB,KAAM8X,EAAS7X,IAAYD,IAMnD,OALAuF,GAAMwS,OAAQ,EACdxS,EAAM4E,eAAgB,EACtB5E,EAAM2E,WAAY,EAClB3E,EAAMyS,iBAAkB,EACxBzS,EAAM0S,eAAiBH,EAChBvS,EAqvCX,MAnwCA0Q,GAAU2B,EAAgBC,GAgB1BD,EAAehB,UAAUsB,UAAY,WACjClY,KAAKmY,eAAgB,EACrBnY,KAAKoY,iBAAmB,IAExBpY,KAAKqY,UAAY,GAAIzW,QAAO,gBAC5B5B,KAAKsY,UAAW,CAChB,IAAIC,GAAaC,WAAS,gBAAiBxY,KAAKC,QAKhD,IAJAD,KAAKyY,aAAezY,KAAKC,QAAQyY,WAAU,GAC3C/R,eAAa3G,KAAKyY,eAzCZ,YADE,mBA0C8C,UACtDzY,KAAK2Y,eAAiB,KACtB3Y,KAAK4Y,QAAUvE,UAAQrU,KAAKC,QAAS,QACR,uBAAzBD,KAAKC,QAAQ0E,QAAkC,CAC/C3E,KAAK2Y,eAAiB3Y,KAAKC,QAAQ0E,OACnC,IAAIuP,GAAQlU,KAAKsO,cAAc,SAC3BpF,EAAQ,CACZ,KAAKA,EAAOA,EAAQlJ,KAAKC,QAAQF,WAAWc,OAAQqI,IAE1B,OADFlJ,KAAKC,QAAQF,WAAWmJ,GAAO2P,WAE/C3E,EAAM/E,aAAanP,KAAKC,QAAQF,WAAWmJ,GAAO2P,SAAU7Y,KAAKC,QAAQF,WAAWmJ,GAAO4P,WAC3F5E,EAAMvB,UAAY3S,KAAKC,QAAQ0S,UAGnC3S,MAAKC,QAAQ8Y,aAAa,SAC1B/Y,KAAKC,QAAQ2Q,gBAAgB,QAEjC5Q,KAAKC,QAAQ8D,UAAUP,OAAO,YAAa,oBAC3CxD,KAAKC,QAAQ6O,YAAYoF,GACzBlU,KAAKC,QAAUiU,EACfvH,WAAS,gBAAiB4L,EAAYvY,KAAKC,SAE/CF,aAAWC,KAAKC,SAAWC,KAAQ,aAAc8Y,SAAY,IAAK7Y,aAAgB,MAAOI,YAAa,aACtG,IAAI0Y,IACAC,eAAgB,kBAAmBC,eAAgB,kBAAmBlT,YAAajG,KAAKiG,YAE5FjG,MAAKoZ,KAAO,GAAIC,QAAK,iBAAkBJ,EAAYjZ,KAAKsZ,QACX,KAAzCtZ,KAAKoZ,KAAKG,YAAY,gBACtBvZ,KAAKwZ,eAAgBvT,YAAajG,KAAKiG,aAAejG,KAAKoZ,KAAKG,YAAY,iBAAkB,GAElGvZ,KAAKyZ,cAAe,EACpBzZ,KAAK0Z,WAAa,KAClB1Z,KAAK2Z,UAAY,KACjB3Z,KAAK4Z,eACL5Z,KAAK6Z,kBACL7Z,KAAK8Z,kBACL9Z,KAAKiI,UAAYjI,KAAKoC,MACtBpC,KAAK+Z,0BACL/Z,KAAKga,iBAAgB,GACjBha,KAAK4Y,UACL5Y,KAAKia,cAAgBja,KAAKoC,OAE9BpC,KAAKka,iBACLla,KAAKma,eACoB,OAArBna,KAAKiG,aACLjG,KAAKoa,qBASbxC,EAAehB,UAAUyD,OAAS,WACa,UAAvCra,KAAKC,QAAQ0E,QAAQ4H,gBACrBvM,KAAKsa,gBACDta,KAAKua,gBACLva,KAAKwa,kBAETxa,KAAKya,gBAAgBza,KAAKgT,OACrBhT,KAAK8F,UAAU/B,UAAUC,SAAS,kBACnChE,KAAK8F,UAAU/B,UAAUxB,IAAI,iBAEjCvC,KAAK0a,YAA2B,OAAf1a,KAAKoC,OAAkBuY,MAAM3a,KAAKoC,OAC/C,KAAOpC,KAAK4a,WAAa5a,KAAK6a,UAAU7a,KAAKoC,OAASpC,KAAKoC,OAC/DpC,KAAKqC,aACc,OAAfrC,KAAKoC,OAAmBuY,MAAM3a,KAAKoC,QAC/BpC,KAAK8a,UACL9a,KAAKwZ,eAAgBpX,MAAOpC,KAAK+a,YAAY/a,KAAKoC,MAAOpC,KAAK8a,YAAa,IAG/E9a,KAAKC,QAAQ8Q,aAAa,UAAY/Q,KAAKoC,SAC3CpC,KAAKC,QAAQkP,aAAa,QAASnP,KAAKC,QAAQmC,OAChDpC,KAAKgb,YAAY7L,aAAa,QAASnP,KAAKgb,YAAY5Y,QAE5DpC,KAAKib,iBAAmBjb,KAAKC,QAAQmC,MACjCpC,KAAKC,QAAQ8Y,aAAa,aAC1B/Y,KAAKC,QAAQkP,aAAa,WAAY,SAE1CnP,KAAKkb,mBAGbtD,EAAehB,UAAUoD,gBAAkB,SAAUmB,GAGjD,IAAK,GAAIlK,GAAK,EAAGmK,EAFAD,EAAYzZ,oBAAkB1B,KAAKqb,mBAAuBlK,OAAOC,KAAKpR,KAAKqb,iBACvF,QAAS,MAAO,MAAO,OAAQ,WAAY,WAAY,QAAS,OAAQ,eACjCpK,EAAKmK,EAAava,OAAQoQ,IAAM,CACxE,GAAIqK,GAAOF,EAAanK,EACxB,KAAKvP,oBAAkB1B,KAAKC,QAAQ8Q,aAAauK,IAC7C,OAAQA,GACJ,IAAK,WACD,GAAK5Z,oBAAkB1B,KAAKiY,qBAAuD5S,KAAnCrF,KAAKiY,eAAwB,SAAqBkD,EAAW,CACzG,GAAIhY,GAA8C,aAApCnD,KAAKC,QAAQ8Q,aAAauK,IAA4D,KAApCtb,KAAKC,QAAQ8Q,aAAauK,IAC/C,SAApCtb,KAAKC,QAAQ8Q,aAAauK,EACjCtb,MAAKwZ,eAAgBrW,QAASA,IAAYgY,GAE9C,KACJ,KAAK,WACD,GAAKzZ,oBAAkB1B,KAAKiY,qBAAwD5S,KAApCrF,KAAKiY,eAAyB,UAAqBkD,EAAW,CAC1G,GAAIvU,GAA+C,aAApC5G,KAAKC,QAAQ8Q,aAAauK,IAA4D,KAApCtb,KAAKC,QAAQ8Q,aAAauK,IAChD,SAApCtb,KAAKC,QAAQ8Q,aAAauK,EACjCtb,MAAKwZ,eAAgB5S,SAAUA,IAAauU,GAEhD,KACJ,KAAK,eACIzZ,oBAAkB1B,KAAKiY,qBAA2D5S,KAAvCrF,KAAKiY,eAA4B,aAAqBkD,IAClGnb,KAAKwZ,eAAgBvT,YAAajG,KAAKC,QAAQgG,cAAgBkV,EAEnE,MACJ,KAAK,QACD,GAAKzZ,oBAAkB1B,KAAKiY,qBAAqD5S,KAAjCrF,KAAKiY,eAAsB,OAAqBkD,EAAW,CACvG,GAAII,GAAYvb,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQ8Q,aAAauK,GACzFtb,MAAKwZ,cAAc7M,WAAS2O,EAAMC,OAAiBJ,GAEvD,KACJ,KAAK,MACD,GAAKzZ,oBAAkB1B,KAAKiY,qBAAmD5S,KAA/BrF,KAAKiY,eAAoB,KAAqBkD,EAAW,CACrG,GAAIQ,GAAW3b,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQ8Q,aAAauK,GACvE,QAAbK,GAAsBhB,MAAMgB,IAC5B3b,KAAKwZ,cAAc7M,WAAS2O,EAAMK,OAAgBR,GAG1D,KACJ,KAAK,MACD,GAAKzZ,oBAAkB1B,KAAKiY,qBAAmD5S,KAA/BrF,KAAKiY,eAAoB,KAAqBkD,EAAW,CACrG,GAAIS,GAAW5b,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQ8Q,aAAauK,GACvE,QAAbM,GAAsBjB,MAAMiB,IAC5B5b,KAAKwZ,cAAc7M,WAAS2O,EAAMM,OAAgBT,GAG1D,KACJ,KAAK,OACD,GAAKzZ,oBAAkB1B,KAAKiY,qBAAoD5S,KAAhCrF,KAAKiY,eAAqB,MAAqBkD,EAAW,CACtG,GAAIU,GAAY7b,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQ8Q,aAAauK,GACvE,QAAdO,GAAuBlB,MAAMkB,IAC7B7b,KAAKwZ,cAAc7M,WAAS2O,EAAMO,OAAiBV,GAG3D,KACJ,KAAK,QACDnb,KAAK0Z,WAAa1Z,KAAKC,QAAQ8Q,aAAauK,EAC5C,MACJ,KAAK,OACDtb,KAAK2Z,UAAY3Z,KAAKC,QAAQ8Q,aAAauK,EAC3C,MACJ,SAEQ,GAAIlZ,GAAQpC,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQ8Q,aAAauK,KACtE,OAAVlZ,IAAmBuY,MAAMvY,IAAqB,UAATkZ,IACtCtb,KAAKwZ,cAAc7M,WAAS2O,EAAMlZ,OAAY,MAQ1EwV,EAAehB,UAAUwD,kBAAoB,WACzCpa,KAAKwZ,eAAgBvT,YAAajG,KAAKoZ,KAAKG,YAAY,iBAAkB,IAE9E3B,EAAehB,UAAUkD,gBAAkB,WACvC9Z,KAAKwb,SAAW,GAAIM,wBAAqB9b,KAAKsZ,SAElD1B,EAAehB,UAAUiD,gBAAkB,WACvC7Z,KAAK4Z,YAAY8B,OAAS1b,KAAK0b,OACI,OAA/BlD,WAAS,WAAYxY,QACrB2M,WAAS,WAAY3M,KAAK+b,SAAU/b,KAAK4Z,aACzC5Z,KAAKwZ,eAAgBwC,aAAchc,KAAK+b,WAAY,KAI5DnE,EAAehB,UAAU0D,cAAgB,WACrC,GAAI2B,GAAuBjc,KAAKsR,QAC3B5P,qBAAkB1B,KAAKsR,WAA+B,KAAlBtR,KAAKsR,WAC1C2K,EAAuBjc,KAAKkc,yBAAyBlc,KAAKsR,UAE9D,IAAI5N,GAAWgJ,QAAMyB,aACjBlO,QAASD,KAAKC,QACd+F,eAAgBhG,KAAKgG,eACrBiJ,YACIrI,SAAU5G,KAAK4G,SACfX,YAAajG,KAAKiG,YAClBqL,SAAU2K,EACVxK,UAAWzR,KAAKyR,UAChBhO,gBAAiBzD,KAAKyD,gBACtBN,QAASnD,KAAKmD,UAEnBnD,KAAKsO,cACRtO,MAAKmc,aAAezY,EACpB1D,KAAK8F,UAAYpC,EAASoC,UAC1B9F,KAAK8F,UAAUqJ,aAAa,QAASiN,+BAAapc,KAAK8F,UAAUiL,aAAa,UAC9E/Q,KAAKqc,0BACDrc,KAAK4G,UACL7G,aAAWC,KAAKC,SAAWqc,gBAAiB,SAEhDtc,KAAKgb,YAAehb,KAAKsO,cAAc,SAAW0F,OAAStL,KAAM,OACzD6T,eAAkB,OAAQC,MA3OtB,sBA4OZxc,KAAK2Z,UAA+B,OAAnB3Z,KAAK2Z,UAAqB3Z,KAAK2Z,UAAY3Z,KAAKC,QAAQuQ,GACzExQ,KAAKC,QAAQ2Q,gBAAgB,QAC7B7Q,aAAWC,KAAKgb,aAAeyB,KAAQzc,KAAK2Z,YAC5C3Z,KAAK8F,UAAU+I,aAAa7O,KAAKgb,YAAahb,KAAK8F,UAAU4W,WAAW,IACxE1c,KAAK2c,qBAAoB,GACD,OAApB3c,KAAK0Z,YACL3Z,aAAWC,KAAK8F,WAAamN,MAASjT,KAAK0Z,cAGnD9B,EAAehB,UAAU+F,oBAAsB,SAAUxB,GACrD,GAAIyB,KACJ,IAAKzB,EAMDyB,EAAO5c,KAAKqb,mBALZ,KAAK,GAAIwB,GAAI,EAAGA,EAAI7c,KAAKC,QAAQF,WAAWc,OAAQgc,IAChDD,EAAK5c,KAAKC,QAAQF,WAAW8c,GAAGJ,MAAQzc,KAAKC,QAAQ8Q,aAAa/Q,KAAKC,QAAQF,WAAW8c,GAAGJ,KAMrG,KAAK,GAAIxL,GAAK,EAAGC,EAAKC,OAAOC,KAAKwL,GAAO3L,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC3D,GAAI1H,GAAM2H,EAAGD,EACe,KAAxB1H,EAAI8C,QAAQ,SACZrM,KAAKgb,YAAY7L,aAAa5F,EAAKqT,EAAKrT,MAIpDqO,EAAehB,UAAUmD,wBAA0B,WAC/C,IAAKrY,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI6L,GAAM5L,EAAGD,EACT0G,GAAkBtL,QAAQyQ,GAAO,GACjC9c,KAAKC,QAAQkP,aAAa2N,EAAK9c,KAAKqb,eAAeyB,MAKnElF,EAAehB,UAAUmG,eAAiB,SAAUC,EAAUlK,GAC1DpG,QAAM2E,YAAYrR,KAAKkc,yBAAyBc,IAAYhd,KAAK8F,WAAY9F,KAAKkc,yBAAyBpJ,KAE/G8E,EAAehB,UAAUsF,yBAA2B,SAAUe,GAC1D,GAAIxK,GAASwK,CAIb,OAHKvb,qBAAkBub,IAA0C,KAArBA,IACxCxK,EAAUwK,EAAiBxb,QAAQ,OAAQ,KAAM+I,QAE9CiI,GAEXmF,EAAehB,UAAUyF,wBAA0B,WAC/C,IAAK3a,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI6L,GAAM5L,EAAGD,EACb,IAAI0G,EAAkBtL,QAAQyQ,IAAQ,EAClC,GAAY,UAARA,EAAiB,CACjB,GAAII,GAAoBld,KAAKkc,yBAAyBlc,KAAKqb,eAAeyB,GAChD,MAAtBI,GACAjR,YAAUjM,KAAK8F,WAAYoX,EAAkBvc,MAAM,UAGtD,IAAY,UAARmc,EAAiB,CACtB,GAAIK,GAAend,KAAK8F,UAAUiL,aAAa+L,EAC/CK,GAAgBzb,oBAAkByb,GAC9Bnd,KAAKqb,eAAeyB,GAD2BK,EAAend,KAAKqb,eAAeyB,GAEtF9c,KAAK8F,UAAUqJ,aAAa2N,EAAKK,OAGjCnd,MAAK8F,UAAUqJ,aAAa2N,EAAK9c,KAAKqb,eAAeyB,MAMzElF,EAAehB,UAAU6D,gBAAkB,SAAUzH,GAC5CtR,oBAAkBsR,KACE,gBAAVA,GACPhT,KAAK8F,UAAUmN,MAAMD,MAAQE,aAAWF,GAElB,gBAAVA,KACZhT,KAAK8F,UAAUmN,MAAMD,MAASA,EAAMlR,MAAM,aAAyBoR,aAAWF,MAK1F4E,EAAehB,UAAU4D,gBAAkB,WACvCxa,KAAKod,SAAW1Q,QAAM0C,WAAWqI,EAAW,eAAgBzX,KAAK8F,UAAW9F,KAAKsO,eACjFvO,aAAWC,KAAKod,UACZC,MAASrd,KAAKoZ,KAAKG,YAAY,kBAC/B+D,aAActd,KAAKoZ,KAAKG,YAAY,oBAExCvZ,KAAKud,OAAS7Q,QAAM0C,WAAWqI,EAAW,aAAczX,KAAK8F,UAAW9F,KAAKsO,eAC7EvO,aAAWC,KAAKud,QACZF,MAASrd,KAAKoZ,KAAKG,YAAY,kBAC/B+D,aAActd,KAAKoZ,KAAKG,YAAY,oBAExCvZ,KAAKwd,qBAET5F,EAAehB,UAAUsD,eAAiB,YACV,gBAAdla,WAA2B2a,MAAM3a,KAAKyd,OAChDzd,KAAKwZ,eAAgBiE,KAAOC,mBAAqB,IAEzB,gBAAd1d,WAA2B2a,MAAM3a,KAAK2d,OAChD3d,KAAKwZ,eAAgBmE,IAAKD,OAAOE,YAAa,GAE5B,OAAlB5d,KAAK8a,WACD9a,KAAKyd,OAAUC,OAAiB,WAChC1d,KAAKwZ,eAAgBiE,IAAKzd,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAK6d,eAAe7d,KAAK8a,SAAU9a,KAAKyd,QAAS,GAE1Hzd,KAAK2d,MAASD,OAAiB,WAC/B1d,KAAKwZ,eAAgBmE,IAAK3d,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAK6d,eAAe7d,KAAK8a,SAAU9a,KAAK2d,QAAS,IAGlI3d,KAAKwZ,eAAgBiE,IAAKzd,KAAKyd,IAAMzd,KAAK2d,IAAM3d,KAAK2d,IAAM3d,KAAKyd,MAAO,GACvE1d,aAAWC,KAAKC,SAAW6d,gBAAiB9d,KAAKyd,IAAIM,WAAYC,gBAAiBhe,KAAK2d,IAAII,cAE/FnG,EAAehB,UAAUiH,eAAiB,SAAU/C,EAAU1Y,GAC1D,MAAOpC,MAAKwb,SAASyC,iBACjBC,sBAAuBpD,EACvBqD,sBAAuBrD,EAAUsD,aAAa,IAC/Chc,IAEPwV,EAAehB,UAAUuD,aAAe,WACd,OAAlBna,KAAK8a,UACL9a,KAAKwZ,eAAgB6E,KAAMre,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAK6d,eAAe7d,KAAK8a,SAAU9a,KAAKqe,SAAU,IAGpIzG,EAAehB,UAAU0H,OAAS,SAAUC,EAAWra,GACnDlE,KAAKwe,YAAa,CAClB,IAAIpc,GAAQpC,KAAKye,UAAYze,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQmC,OAASpC,KAAKoC,KACvGpC,MAAK0a,YAAY1a,KAAK0e,cAActc,EAAOpC,KAAKqe,KAAME,IACtDve,KAAK2e,iBAAiBza,IAE1B0T,EAAehB,UAAUgI,gBAAkB,WACnC5e,KAAKyZ,aACL9S,eAAa3G,KAAK8F,WAvXlB,WA0XAmG,YAAUjM,KAAK8F,WA1Xf,WA4XJ/F,aAAWC,KAAKC,SAAW+B,eAAgBhC,KAAKyZ,aAAe,QAAU,UAE7E7B,EAAehB,UAAUxT,eAAiB,WAClCpD,KAAKyD,iBACLnB,eAAaC,IAAIvC,KAAKmc,aAAaxY,YAAa,uBAAwB3D,KAAK4D,aAAc5D,OAGnG4X,EAAehB,UAAUhT,aAAe,SAAUC,GAC9CA,EAAEC,iBACI9D,KAAKmc,aAAaxY,YAAYI,UAAUC,SAAS,sBACnDhE,KAAKiE,MAAMJ,GAEf7D,KAAKwe,YAAa,EAClBxe,KAAK2e,iBAAiB9a,IAG1B+T,EAAehB,UAAU3S,MAAQ,SAAUC,GAKvC,GAJAlE,KAAKwZ,eAAgBpX,MAAO,OAAQ,GACpCpC,KAAKkC,gBAAgB,IACrBlC,KAAKgb,YAAY5Y,MAAQ,GACPiS,UAAQrU,KAAKC,QAAS,QACvB,CACb,GAAIA,GAAUD,KAAKC,QAAQ4e,mBACvBC,EAAa3M,SAAS4M,YAAY,gBACtCD,GAAWE,UAAU,SAAS,GAAO,GACrC/e,EAAQgf,cAAcH,KAG9BlH,EAAehB,UAAUtT,iBAAmB,WACX,uBAAzBtD,KAAKC,QAAQ0E,QACb3E,KAAKkf,YAAY,MAGjBlf,KAAKkf,YAAYlf,KAAKia,gBAG9BrC,EAAehB,UAAUuI,cAAgB,WAChCzd,oBAAkB1B,KAAKod,WACxBrd,aAAWC,KAAKod,UACZC,MAASrd,KAAKoZ,KAAKG,YAAY,kBAC/B+D,aAActd,KAAKoZ,KAAKG,YAAY,oBAGvC7X,oBAAkB1B,KAAKud,SACxBxd,aAAWC,KAAKud,QACZF,MAASrd,KAAKoZ,KAAKG,YAAY,kBAC/B+D,aAActd,KAAKoZ,KAAKG,YAAY,qBAIhD3B,EAAehB,UAAUvU,WAAa,WAClCC,eAAaC,IAAIvC,KAAKC,QAAS,QAASD,KAAKof,aAAcpf,MAC3DsC,eAAaC,IAAIvC,KAAKC,QAAS,OAAQD,KAAKqf,gBAAiBrf,MAC7DsC,eAAaC,IAAIvC,KAAKC,QAAS,UAAWD,KAAKsf,eAAgBtf,MAC/DsC,eAAaC,IAAIvC,KAAKC,QAAS,QAASD,KAAKuf,aAAcvf,MAC3DsC,eAAaC,IAAIvC,KAAKC,QAAS,QAASD,KAAKwf,aAAcxf,MAC3DsC,eAAaC,IAAIvC,KAAKC,QAAS,WAAYD,KAAKyf,gBAAiBzf,MACjEsC,eAAaC,IAAIvC,KAAKC,QAAS,SAAUD,KAAK0f,cAAe1f,MAC7DsC,eAAaC,IAAIvC,KAAKC,QAAS,QAASD,KAAK2f,aAAc3f,MACvDA,KAAKmD,UACLnD,KAAKoD,iBACDpD,KAAK4Y,SACLtW,eAAaC,IAAIvC,KAAK4Y,QAAS,QAAS5Y,KAAKsD,iBAAkBtD,QAI3E4X,EAAehB,UAAU4G,kBAAoB,WAEzClb,eAAaC,IAAIvC,KAAKud,OAAQ/V,UAAQoY,gBAAiB5f,KAAK6f,mBAAoB7f,MAChFsC,eAAaC,IAAIvC,KAAKod,SAAU5V,UAAQoY,gBAAiB5f,KAAK6f,mBAAoB7f,MAClFsC,eAAaC,IAAIvC,KAAKud,OAAQ/V,UAAQsY,cAAe9f,KAAK+f,iBAAkB/f,MAC5EsC,eAAaC,IAAIvC,KAAKod,SAAU5V,UAAQsY,cAAe9f,KAAK+f,iBAAkB/f,MAC9EsC,eAAaC,IAAIvC,KAAKud,OAAQ/V,UAAQwY,eAAgBhgB,KAAKigB,mBAAoBjgB,MAC/EsC,eAAaC,IAAIvC,KAAKod,SAAU5V,UAAQwY,eAAgBhgB,KAAKigB,mBAAoBjgB,OAErF4X,EAAehB,UAAUrT,aAAe,WACpCjB,eAAakB,OAAOxD,KAAKC,QAAS,QAASD,KAAKof,cAChD9c,eAAakB,OAAOxD,KAAKC,QAAS,OAAQD,KAAKqf,iBAC/C/c,eAAakB,OAAOxD,KAAKC,QAAS,QAASD,KAAKuf,cAChDjd,eAAakB,OAAOxD,KAAKC,QAAS,QAASD,KAAKwf,cAChDld,eAAakB,OAAOxD,KAAKC,QAAS,UAAWD,KAAKsf,gBAClDhd,eAAakB,OAAOxD,KAAKC,QAAS,WAAYD,KAAKyf,iBACnDnd,eAAakB,OAAOxD,KAAKC,QAAS,SAAUD,KAAK0f,eACjDpd,eAAakB,OAAOxD,KAAKC,QAAS,QAASD,KAAK2f,cAC5C3f,KAAK4Y,SACLtW,eAAakB,OAAOxD,KAAK4Y,QAAS,QAAS5Y,KAAKsD,mBAGxDsU,EAAehB,UAAUsJ,oBAAsB,WAE3C5d,eAAakB,OAAOxD,KAAKud,OAAQ/V,UAAQoY,gBAAiB5f,KAAK6f,oBAC/Dvd,eAAakB,OAAOxD,KAAKod,SAAU5V,UAAQoY,gBAAiB5f,KAAK6f,oBACjEvd,eAAakB,OAAOxD,KAAKud,OAAQ/V,UAAQsY,cAAe9f,KAAK+f,kBAC7Dzd,eAAakB,OAAOxD,KAAKod,SAAU5V,UAAQsY,cAAe9f,KAAK+f,kBAC/Dzd,eAAakB,OAAOxD,KAAKud,OAAQ/V,UAAQwY,eAAgBhgB,KAAKigB,oBAC9D3d,eAAakB,OAAOxD,KAAKod,SAAU5V,UAAQwY,eAAgBhgB,KAAKigB,qBAEpErI,EAAehB,UAAU8I,cAAgB,SAAUxb,GAC/CA,EAAMic,kBACDngB,KAAKC,QAAQmC,MAAMvB,QACpBb,KAAKwZ,eAAgBpX,MAAO,OAAQ,EAExC,IAAIge,GAAcpgB,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQmC,MAC9EpC,MAAKkf,YAAYkB,EAAalc,IAElC0T,EAAehB,UAAU+H,iBAAmB,SAAUza,GAClD,GAAIlE,KAAKiI,YAAcjI,KAAKoC,MAAO,CAC/B,GAAIwD,KACJ5F,MAAK6J,iBAAoBzH,MAAOpC,KAAKoC,MAAOie,cAAergB,KAAKiI,UAAW+B,aAAchK,KAAKwe,WAC1FzU,cAAe/J,KAAKwe,WAAYta,MAAOA,GACvCA,IACAlE,KAAK6J,gBAAgB3F,MAAQA,OAEEmB,KAA/BrF,KAAK6J,gBAAgB3F,QACrBlE,KAAK6J,gBAAgBG,cAAe,EACpChK,KAAK6J,gBAAgBE,eAAgB,GAEzCE,QAAMrE,EAAW5F,KAAK6J,iBACtB7J,KAAKiI,UAAYjI,KAAKoC,MACtBpC,KAAKwe,YAAa,EAClBxe,KAAKib,iBAAmBjb,KAAKC,QAAQmC,MACrCpC,KAAKmK,eAAgB,EACrBnK,KAAKoG,QAAQ,SAAUR,KAG/BgS,EAAehB,UAAU+I,aAAe,WACpC,GAAIpa,GAAQvF,IACZ,IAAKA,KAAKmD,UAAWnD,KAAK4G,SAA1B,CAGA,GAAI0Z,GAAetgB,KAAKC,QAAQmC,KAChC8D,YAAW,WACFX,EAAMgb,eAAeC,KAAKjb,EAAMtF,QAAQmC,QACzCmD,EAAMrD,gBAAgBoe,OAIlC1I,EAAehB,UAAU6J,eAAiB,WACtC,GAAIlb,GAAQvF,KACR0gB,IAAQC,UAAUC,UAAY,mBAAmBJ,KAAKG,UAAUC,SACpE1a,YAAW,WACP,GAAIX,EAAMtF,QAAQqE,eAAiB,EAAG,CAClC,GAAIuc,GAAatb,EAAMtF,QAAQqE,eAC3Bwc,EAAUvb,EAAMtF,QAAQqE,eAAiB,EAEzCyc,EAAWxb,EAAMtF,QAAQmC,MAAMzB,MAAM,IACrCqgB,EAAgBC,mBAAiB1b,EAAM+T,QAEvC4H,EADmB1I,WAAS,UAAWwI,GACNG,WAAW,EACX,OAAjC5b,EAAMtF,QAAQmC,MAAM0e,IAAoBvb,EAAMtF,QAAQqE,eAAiB,IAAMoc,GACzEhf,oBAAkB6D,EAAM6b,SACxB7b,EAAMtF,QAAQmC,MAAQmD,EAAMtF,QAAQmC,MAAMoI,OAEzB,IAAZsW,EACLvb,EAAMtF,QAAQmC,MAAQmD,EAAM6b,QAEX,IAAZN,IACLvb,EAAMtF,QAAQmC,MAAQmD,EAAMtF,QAAQmC,MAAMoI,QAE9CjF,EAAMtF,QAAQyE,kBAAkBoc,EAASA,IAEpCnG,MAAM0G,WAAW9b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,MACD,KAAxEiB,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,GAAG6c,WAAW,IAC5DJ,EAAS1U,QAAQ9G,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,MACrEyc,EAASO,YAAY/b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,KACxEiB,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,GAAG6c,WAAW,KAAOD,GACxE3b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,GAAG6c,WAAW,KAAOD,KACxE3b,EAAMtF,QAAQmC,MAAQmD,EAAMtF,QAAQmC,MAAML,UAAU,EAAG+e,GACnDvb,EAAMtF,QAAQmC,MAAML,UAAU8e,EAAYtb,EAAMtF,QAAQmC,MAAMvB,QAClE0E,EAAMtF,QAAQyE,kBAAkBoc,EAASA,GACrCnG,MAAM0G,WAAW9b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,MAAQiB,EAAMtF,QAAQqE,eAAiB,GACxGiB,EAAMtF,QAAQmC,MAAMvB,QACvB0E,EAAMkb,kBAIT9F,MAAM0G,WAAW9b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,MAAQiB,EAAMtF,QAAQqE,eAAiB,GACxC,KAAxEiB,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,GAAG6c,WAAW,KAC5DJ,EAAS1U,QAAQ9G,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,MACrEyc,EAASO,YAAY/b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,KACxEiB,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,GAAG6c,WAAW,KAAOD,GACxE3b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,GAAG6c,WAAW,KAAOD,KACxE3b,EAAMtF,QAAQyE,kBAAkBoc,EAASA,GACzCvb,EAAMgc,QAAUhc,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,gBAClDiB,EAAMic,kBAAmB,EACzBjc,EAAMkb,mBAGiB,IAA3Blb,EAAMic,kBAA6Bjc,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,kBAAoBiB,EAAMgc,SAC/F5G,MAAM0G,WAAW9b,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,OACpEiB,EAAMtF,QAAQyE,kBAAkBa,EAAMtF,QAAQqE,eAAiB,EAAGiB,EAAMtF,QAAQqE,eAAiB,GACjGiB,EAAMic,kBAAmB,EACzBjc,EAAMgc,QAAU,MAEe,KAA/Bhc,EAAMtF,QAAQmC,MAAMoI,QACpBjF,EAAMtF,QAAQyE,kBAnDN,EAAA,GAqDRa,EAAMtF,QAAQqE,eAAiB,GAC8C,KAAxEiB,EAAMtF,QAAQmC,MAAMmD,EAAMtF,QAAQqE,eAAiB,GAAG6c,WAAW,IAAc5b,EAAMtF,QAAQqE,eAAiB,IAC3G5C,oBAAkB6D,EAAM6b,SAExB7b,EAAMtF,QAAQmC,MAAQmD,EAAMtF,QAAQmC,MAGpCmD,EAAMtF,QAAQmC,MAAQmD,EAAM6b,QAEhC7b,EAAMtF,QAAQyE,kBAAkBa,EAAMtF,QAAQqE,eAAgBiB,EAAMtF,QAAQqE,iBAGpFiB,EAAM6b,QAAU7b,EAAMtF,QAAQmC,UAI1CwV,EAAehB,UAAU2I,aAAe,WACpC,GAAKvf,KAAKmD,UAAWnD,KAAK4G,SAA1B,KAGY+Z,UAAUC,UAAY,mBAAmBJ,KAAKG,UAAUC,YACxDpZ,UAAQia,UAChBzhB,KAAKygB,gBAET,IAAIiB,GAAa1hB,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQmC,MAI7E,IAHAsf,EAA4B,OAAfA,GAAuB/G,MAAM+G,GAAc,KAAOA,EAC/D1hB,KAAKgb,YAAY5Y,MAAQsf,GAA6B,IAAfA,EAAmBA,EAAW3D,WAAa,KAChE1J,UAAQrU,KAAKC,QAAS,QACvB,CACb,GAAIA,GAAUD,KAAKC,QAAQ4e,mBACvBC,EAAa3M,SAAS4M,YAAY,gBACtCD,GAAWE,UAAU,SAAS,GAAO,GACrC/e,EAAQgf,cAAcH,MAG9BlH,EAAehB,UAAU4I,aAAe,SAAUtb,GAE9C,GAAIyd,GAAoB3hB,IACxB,IAAKA,KAAKmD,UAAWnD,KAAK4G,SAA1B,CAGA,GAAI8Z,KAAQC,UAAUC,UAAY,mBAAmBJ,KAAKG,UAAUC,SAMpE,KALcD,UAAUiB,UAAUrV,cAAcF,QAAQ,YAAc,GACtDqU,IAAQlZ,UAAQia,UAC5BzhB,KAAKygB,iBAGLzgB,KAAKkK,WACFlK,KAAKC,QAAQmC,QAAUoW,WAAS,UAAWyI,mBAAiBjhB,KAAKsZ,UACjEtZ,KAAKC,QAAQmC,QAAUoW,WAAS,YAAayI,mBAAiBjhB,KAAKsZ,SAAU,CAChF,GAAIuI,GAAc7hB,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQmC,MAC9Eyf,GAAclH,MAAMkH,GAAe,KAAOA,EAC1CF,EAAkBG,aAAc1f,MAAOyf,IACvC7hB,KAAKmK,eAAgB,EAEzB,GAAInK,KAAK+X,MAAO,CACZ,GAAIgK,GAAU/hB,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQmC,OACtE4f,EAAWhiB,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKib,kBAC/DrV,GACA1B,MAAOA,EACP9B,MAAoB,OAAZ2f,GAAoBpH,MAAMoH,GAAW,KAAOA,EACpD1B,cAA6B,OAAb2B,GAAqBrH,MAAMqH,GAAY,KAAOA,EAElEhiB,MAAKmK,eAAgB,EACrBnK,KAAKib,iBAAmBjb,KAAKC,QAAQmC,MACrCpC,KAAKoG,QAAQ,QAASR,MAG9BgS,EAAehB,UAAU0I,eAAiB,SAAUpb,GAChD,IAAKlE,KAAK4G,SACN,OAAQ1C,EAAMyD,SACV,IAAK,IACDzD,EAAMJ,iBACN9D,KAAKse,OAzoBT,YAyoB2Bpa,EACvB,MACJ,KAAK,IACDA,EAAMJ,iBACN9D,KAAKse,OA5oBT,YA4oB2Bpa,KAMvC0T,EAAehB,UAAU8H,cAAgB,SAAUtc,EAAOic,EAAME,IAC9C,OAAVnc,GAAkBuY,MAAMvY,MACxBA,EAAQ,EAEZ,IAAI6f,GAvpBI,cAupBW1D,EAA0Bnc,EAAQic,EAAOjc,EAAQic,CAEpE,OADA4D,GAAejiB,KAAKkiB,gBAAgB9f,EAAOic,EAAM4D,GAC1CjiB,KAAK4a,WAAa5a,KAAK6a,UAAUoH,GAAgBA,GAE5DrK,EAAehB,UAAUsL,gBAAkB,SAAU9f,EAAOic,EAAM5L,GAC9D,GAAI0P,GAAW,GAAIvgB,QAAO,YACtBwgB,EAAaD,EAAS3B,KAAKpe,EAAM2b,YACjCsE,EAAYF,EAAS3B,KAAKnC,EAAKN,WACnC,IAAIqE,GAAcC,EAAW,CACzB,GAAIC,GAAaF,EAAaD,EAASI,KAAKngB,EAAM2b,YAAY,GAAGld,OAAS,EACtE2hB,EAAYH,EAAYF,EAASI,KAAKlE,EAAKN,YAAY,GAAGld,OAAS,EACnE8c,EAAM8E,KAAK9E,IAAI2E,EAAYE,EAC/B,OAAOpgB,GAAQpC,KAAK0iB,WAAWjQ,EAAQkL,GAE3C,MAAOlL,IAEXmF,EAAehB,UAAU8L,WAAa,SAAUjQ,EAAQkQ,GACpDA,EAAYA,GAAa,CACzB,IAAIC,GAASH,KAAKI,IAAI,GAAIF,EAC1B,OAAOlQ,IAAUmQ,EAAQnQ,EAASgQ,KAAKK,MAAMrQ,GAAUmQ,GAE3DhL,EAAehB,UAAUsI,YAAc,SAAU9c,EAAO8B,GAChDA,IACAlE,KAAKwe,YAAa,GAER,OAAVpc,GAAmBuY,MAAMvY,IACrBpC,KAAK8a,WACL1Y,EAAQpC,KAAK+a,YAAY3Y,EAAOpC,KAAK8a,WAG7C9a,KAAK0a,YAAsB,OAAVtY,GAAkBuY,MAAMvY,GAAS,KAAOpC,KAAK4a,WAAa5a,KAAK6a,UAAUzY,GAASA,GAE9FpC,KAAKgY,iBACNhY,KAAK2e,iBAAiBza,IAG9B0T,EAAehB,UAAUmM,eAAiB,SAAUzH,EAAM0H,GACtDrW,WAAS2O,EAAM0H,EAAShjB,KAAK4Z,aAC7B5Z,KAAKkf,YAAYlf,KAAKoC,QAE1BwV,EAAehB,UAAU8D,YAAc,SAAUtY,GAC7C,GAAMA,GAAmB,IAAVA,EAIV,CACD,GAAI6gB,GAAmBjjB,KAAKkjB,oBAAoB9gB,EAChDpC,MAAKwZ,eAAgBpX,MAAOpC,KAAK+a,YAAY3Y,EAAO6gB,KAAqB,OALzE7gB,GAAQ,KACRpC,KAAKwZ,eAAgBpX,MAAOA,IAAS,EAMzCpC,MAAKmjB,aACAnjB,KAAK4a,YACN5a,KAAKojB,iBAGbxL,EAAehB,UAAUuM,WAAa,WAClC,GAAInjB,KAAKoC,OAAwB,IAAfpC,KAAKoC,MAAa,CAChC,GAAIA,GAAQpC,KAAKqjB,eACbha,EAAerJ,KAAKye,UAAYrc,EAAQpC,KAAKwb,SAASyC,gBAAgBje,KAAK4Z,aAAa5Z,KAAKoC,MACjGpC,MAAKkC,gBAAgBmH,GACrBtJ,aAAWC,KAAKC,SAAWO,gBAAiB4B,IAC5CpC,KAAKgb,YAAY5Y,MAAQpC,KAAKoC,MAAM2b,WACjB,OAAf/d,KAAKoC,OAAkBpC,KAAKsjB,yBAC5BtjB,KAAKgb,YAAY5Y,MAAQpC,KAAKgb,YAAY5Y,MAAMX,QAAQ,IAAKzB,KAAKsjB,6BAItEtjB,MAAKkC,gBAAgB,IACrBlC,KAAKC,QAAQ2Q,gBAAgB,iBAC7B5Q,KAAKgb,YAAY5Y,MAAQ,MAGjCwV,EAAehB,UAAU1U,gBAAkB,SAAU8F,EAAK/H,GACtDyM,QAAMC,SAAS3E,EAAM/H,GAAoBD,KAAKC,QAAUD,KAAKgG,eAAgBhG,KAAKyD,kBAEtFmU,EAAehB,UAAUwM,cAAgB,WACrCpjB,KAAKyZ,cAAe,GAChBzZ,KAAKoC,OAAwB,IAAfpC,KAAKoC,SACnBpC,KAAKyZ,eAAiBzZ,KAAKoC,MAAQpC,KAAK2d,KAAO3d,KAAKoC,MAAQpC,KAAKyd,MAErEzd,KAAK4e,mBAEThH,EAAehB,UAAUsM,oBAAsB,SAAU9gB,GACrD,GAAI6gB,GAEAM,EAAY,GAAI3hB,QAAO,qBACvB4hB,EAAcphB,EAAM2b,UACxB,IAAIwF,EAAU/C,KAAKgD,GAAc,CAC7B,GAAI/Q,GAAS8Q,EAAUhB,KAAKiB,EACvB9hB,qBAAkB+Q,KACnB+Q,EAAcphB,EAAMqhB,QAAQhB,KAAKhF,IAAIiG,SAASjR,EAAO,GAAI,IAAK,MAGtE,GAAIkR,GAAcH,EAAY7iB,MAAM,KAAK,EAKzC,OAJAsiB,GAAoBU,GAAgBA,EAAY9iB,OAAa8iB,EAAY9iB,OAAhB,EACnC,OAAlBb,KAAK8a,WACLmI,EAAmBA,EAAmBjjB,KAAK8a,SAAWmI,EAAmBjjB,KAAK8a,UAE3EmI,GAEXrL,EAAehB,UAAUyM,aAAe,WACpC,GAAIJ,GAAmBjjB,KAAKkjB,oBAAoBljB,KAAKoC,MACrD,OAAOpC,MAAKwb,SAASyC,iBACjBC,sBAAuB+E,EACvB9E,sBAAuB8E,EAAkB7E,aAAa,IACvDpe,KAAKoC,QAEZwV,EAAehB,UAAUiE,UAAY,SAAUzY,GAC3C,MAAIA,GAAQpC,KAAK2d,IACN3d,KAAK2d,IAEZvb,EAAQpC,KAAKyd,IACNzd,KAAKyd,IAETrb,GAEXwV,EAAehB,UAAUmE,YAAc,SAAU3Y,EAAOugB,GACpD,GAAIlQ,GAASrQ,EACT0Y,EAAW6H,GAAa,EACxBiB,EAAUnR,EAAOsL,WAAWpd,MAAM,KAElCkjB,GADJpR,EAASgQ,KAAKK,MAAMpF,OAAOkG,EAAQ,GAAK,KAAOA,EAAQ,GAAMlG,OAAOkG,EAAQ,IAAM9I,EAAYA,MACzEiD,WAAWpd,MAAM,IAEtC,OADA8R,GAASiL,OAAOmG,EAAQ,GAAK,KAAOA,EAAQ,GAAMnG,OAAOmG,EAAQ,IAAM/I,GAAaA,IAC7E4C,OAAOjL,EAAOgR,QAAQ3I,KAEjClD,EAAehB,UAAUkN,YAAc,SAAU5f,GAE7C,MADAA,GAAMJ,kBACC,GAEX8T,EAAehB,UAAU6I,gBAAkB,SAAUvb,GACjD,IAAKlE,KAAKmD,SAAWnD,KAAK4G,SACtB,OAAO,CAEX,KAAKY,UAAQia,UAAqC,SAAzBja,UAAQuc,KAAKC,SAAwC,KAAlB9f,EAAMyD,QAAgB,CAC9E,GAAIyY,GAAcpgB,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQmC,MAE9E,OADApC,MAAKkf,YAAYkB,EAAalc,IACvB,EAEX,GAAoB,IAAhBA,EAAM+f,OAAe/f,EAAMggB,SAAWhgB,EAAMwD,SAA6B,IAAlBxD,EAAMyD,SAAmC,KAAlBzD,EAAMyD,QACpF,OAAO,CAEX,IAAIwc,GAAc3a,OAAOC,aAAavF,EAAM+f,OACxCG,EAAOpkB,KAAKC,QAAQmC,KAExB,OADAgiB,GAAOA,EAAKriB,UAAU,EAAG/B,KAAKC,QAAQqE,gBAAkB6f,EAAcC,EAAKriB,UAAU/B,KAAKC,QAAQuE,gBAC7FxE,KAAKugB,eAAeC,KAAK4D,KAC1BlgB,EAAMJ,iBACNI,EAAMic,mBACC,IAMfvI,EAAehB,UAAU2J,aAAe,WACpC,GAAIS,GAAgBC,mBAAiBjhB,KAAKsZ,QACtClB,EAAmBI,WAAS,UAAWwI,GACvCqD,EAAe,GAInB,OAnzBe,MAgzBXjM,IACAA,EAAmB,KAAOA,GAER,IAAlBpY,KAAK8a,UAAkB9a,KAAKskB,sBACrB5M,GAEP1X,KAAK8a,UAAY9a,KAAKskB,wBACtBD,EAAe,MAAQrkB,KAAK8a,SAAW,KAEpC,GAAIlZ,QAAO,gBAAkBwW,EAAmB,MAAQiM,EAC3D,QAAUjM,EAAmB,MAAQiM,EAAe,WAE5DzM,EAAehB,UAAU2N,WAAa,SAAUrgB,GAC5CA,EAAMJ,gBACN,IAAI0gB,GAEAC,EAAWvgB,CACXugB,GAASC,WACTF,EAAQC,EAASC,WAAa,IAEzBD,EAASE,SACdH,GAASC,EAASE,OAAS,GAE3BH,EAAQ,EACRxkB,KAAKse,OA30BD,YA20BmBpa,GAElBsgB,EAAQ,GACbxkB,KAAKse,OA70BD,YA60BmBpa,GAE3BlE,KAAK8jB,YAAY5f,IAErB0T,EAAehB,UAAUwI,aAAe,SAAUlb,GAC9C,GAAIqB,GAAQvF,IAGZ,IAFAA,KAAK4kB,gBAAmB1gB,MAAOA,EAAO9B,MAAOpC,KAAKoC,MAAO0D,UAAW9F,KAAK8F,WACzE9F,KAAKoG,QAAQ,QAASpG,KAAK4kB,gBACtB5kB,KAAKmD,UAAWnD,KAAK4G,SAA1B,CAMA,GAHA5G,KAAKye,WAAY,EACjB9X,eAAa3G,KAAK8F,WA31Bd,WA41BJ9F,KAAKiI,UAAYjI,KAAKoC,MACjBpC,KAAKoC,OAAwB,IAAfpC,KAAKoC,MAAc,CAClC,GAAIyiB,GAAgB7kB,KAAKqjB,cAEzB,IADArjB,KAAKkC,gBAAgB2iB,IAChB7kB,KAAKmY,cACN,GAAK3Q,UAAQia,UAAqC,SAAzBja,UAAQuc,KAAKC,QAGjC,CACD,GAAIc,GAAStd,UAAQia,UAAYja,UAAQud,MAAS,IAAM,CACxD7e,YAAW,WACPX,EAAMtF,QAAQyE,kBAAkB,EAAGmgB,EAAchkB,SAClDikB,OANH9kB,MAAKC,QAAQyE,kBAAkB,EAAGmgB,EAAchkB,QAUvD2G,UAAQia,UACTnf,eAAaC,IAAIvC,KAAKC,QAAS,4BAA6BD,KAAKukB,WAAYvkB,QAGrF4X,EAAehB,UAAUyI,gBAAkB,SAAUnb,GACjD,GAAIqB,GAAQvF,IAGZ,IAFAA,KAAKqG,eAAkBnC,MAAOA,EAAO9B,MAAOpC,KAAKoC,MAAO0D,UAAW9F,KAAK8F,WACxE9F,KAAKoG,QAAQ,OAAQpG,KAAKqG,eACrBrG,KAAKmD,UAAWnD,KAAK4G,SAA1B,CAGA,GAAI5G,KAAKmY,eAEL,GADAjU,EAAMJ,iBACF0D,UAAQia,SAAU,CAClB,GAAIla,GAAUvH,KAAKC,QAAQmC,KAC3BpC,MAAKC,QAAQoS,QACbrS,KAAKmY,eAAgB,CACrB,IAAI6M,GAAQhlB,KAAKC,OACjBiG,YAAW,WACPX,EAAMrD,gBAAgBqF,EAASyd,IAChC,UAGN,CACDhlB,KAAKye,WAAY,EACZze,KAAKC,QAAQmC,MAAMvB,QACpBb,KAAKwZ,eAAgBpX,MAAO,OAAQ,EAExC,IAAIge,GAAcpgB,KAAKwb,SAASC,iBAAkBC,OAAQ,MAAO1b,KAAKC,QAAQmC,MAC9EpC,MAAKkf,YAAYkB,GACZ5Y,UAAQia,UACTnf,eAAakB,OAAOxD,KAAKC,QAAS,4BAA6BD,KAAKukB,YAI5E,GADkBlQ,UAAQrU,KAAKC,QAAS,QACvB,CACb,GAAIA,GAAUD,KAAKC,QAAQ4e,mBACvBoG,EAAa9S,SAAS4M,YAAY,aACtCkG,GAAWjG,UAAU,YAAY,GAAO,GACxC/e,EAAQgf,cAAcgG,MAG9BrN,EAAehB,UAAUiJ,mBAAqB,SAAU3b,GACpD,GAAIqB,GAAQvF,IAKZ,IAJIA,KAAKye,YACLze,KAAKmY,eAAgB,EACrBjU,EAAMJ,kBAEL9D,KAAKklB,eAAehhB,GAAzB,CAIalE,KAAKklB,eAAehhB,EAAjC,IACI8S,GAAS9S,EAAMihB,cACf7G,EAAUtH,EAAOjT,UAAUC,SAp6B1B,aAGG,YACA,WAi6BR1B,gBAAaC,IAAIyU,EAAQ,aAAchX,KAAKolB,aAAcplB,MAC1DA,KAAKqlB,QAAUC,YAAY,WACvB/f,EAAM+S,UAAW,EACjB/S,EAAM+Y,OAAOA,EAAQpa,IACtB,KACH5B,eAAaC,IAAI4P,SAAU,UAAWnS,KAAKolB,aAAcplB,QAE7D4X,EAAehB,UAAUqJ,mBAAqB,SAAU/b,GACpD,GAAI8S,EACJ,IAAmB,cAAf9S,EAAMwE,KAAsB,CAC5B,GAAI6c,GAAarhB,EAAMshB,OACvBxO,GAASuO,EAAW1kB,QAAUsR,SAASsT,iBAAiBF,EAAW,GAAGG,MAAOH,EAAW,GAAGI,WAG3F3O,GAAS7E,SAASsT,iBAAiBvhB,EAAM0hB,QAAS1hB,EAAM2hB,QAEtD7O,GAAOjT,UAAUC,SAASyT,IAC5BqO,cAAc9lB,KAAKqlB,UAG3BzN,EAAehB,UAAUmJ,iBAAmB,SAAU7b,GAUlD,GATIlE,KAAKmY,gBACLnY,KAAKC,QAAQoS,QACR7K,UAAQia,WACTzhB,KAAKmY,eAAgB,IAGxB3Q,UAAQia,UACTvd,EAAMJ,iBAEL9D,KAAKklB,eAAehhB,GAAzB,CAGA,GAAI8S,GAAS9S,EAAMihB,cACf7G,EAAUtH,EAAOjT,UAAUC,SAv8B1B,aAGG,YACA,WA28BR,IAPA1B,eAAakB,OAAOwT,EAAQ,aAAchX,KAAKolB,cAC1CplB,KAAKsY,UACNtY,KAAKse,OAAOA,EAAQpa,GAExBlE,KAAKsY,UAAW,EAChBhW,eAAakB,OAAO2O,SAAU,UAAWnS,KAAKolB,cAC5B/Q,UAAQrU,KAAKC,QAAS,QACvB,CACb,GAAIA,GAAUD,KAAKC,QAAQ4e,mBACvBC,EAAa3M,SAAS4M,YAAY,gBACtCD,GAAWE,UAAU,SAAS,GAAO,GACrC/e,EAAQgf,cAAcH,MAG9BlH,EAAehB,UAAUsO,eAAiB,SAAUhhB,GAChD,QAAKA,EAAM+f,OAAyB,IAAhB/f,EAAM+f,OAAiB/f,EAAM2N,QAA2B,IAAjB3N,EAAM2N,SACzD7R,KAAKmD,SAAWnD,KAAK4G,YAG7Bkf,cAAc9lB,KAAKqlB,UACZ,IAEXzN,EAAehB,UAAUmP,qBAAuB,WAC5CrZ,QAAMuH,eAAejU,KAAKmc,aAC1B,IAAInB,GAAchb,KAAKgb,WACvBhb,MAAKgb,YAAYxX,SACjBkJ,QAAM0H,YAAYpU,KAAKC,QAASD,KAAKgG,eAAgBhG,KAAKiG,YAAajG,KAAKsO,eAC5EtO,KAAK8F,UAAU+I,aAAamM,EAAahb,KAAK8F,UAAU4W,WAAW,KAEvE9E,EAAehB,UAAUwO,aAAe,SAAUlhB,GAC9CA,EAAMic,kBACN2F,cAAc9lB,KAAKqlB,SACnBrlB,KAAKsY,UAAW,EAChBhW,eAAakB,OAAOxD,KAAKud,OAAQ,aAAcvd,KAAKolB,cACpD9iB,eAAakB,OAAOxD,KAAKod,SAAU,aAAcpd,KAAKolB,eAS1DxN,EAAehB,UAAUoP,UAAY,SAAU3H,OAC9B,KAATA,IAAmBA,EAAOre,KAAKqe,MACnCre,KAAKwe,YAAa,EAClBxe,KAAK0a,YAAY1a,KAAK0e,cAAc1e,KAAKoC,MAAOic,EAn/BxC,cAo/BRre,KAAK2e,oBAST/G,EAAehB,UAAUqP,UAAY,SAAU5H,OAC9B,KAATA,IAAmBA,EAAOre,KAAKqe,MACnCre,KAAKwe,YAAa,EAClBxe,KAAK0a,YAAY1a,KAAK0e,cAAc1e,KAAKoC,MAAOic,EA//BxC,cAggCRre,KAAK2e,oBAST/G,EAAehB,UAAUsP,QAAU,WAC/BlmB,KAAKuD,eACL4Q,SAAOnU,KAAKgb,aACRhb,KAAKua,iBACLva,KAAKkgB,sBACL/L,SAAOnU,KAAKud,QACZpJ,SAAOnU,KAAKod,UAMhB,KAAK,GAJD+I,IAAa,kBAAmB,OAAQ,eAAgB,gBACxD,cAAe,gBAAiB,mBAAoB,iBACpD,aAAc,oBAAqB,WAAY,gBAC/C,gBAAiB,YAAa,gBAAiB,gBAC1CvlB,EAAI,EAAGA,EAAIulB,EAAUtlB,OAAQD,IAClCZ,KAAKC,QAAQ2Q,gBAAgBuV,EAAUvlB,GAE3CZ,MAAKC,QAAQ8D,UAAUP,OAAO,WAC9BxD,KAAK8F,UAAUkM,sBAAsB,WAAYhS,KAAKC,SACtDkU,SAAOnU,KAAK8F,WACZ+R,EAAOjB,UAAUsP,QAAQjlB,KAAKjB,OAOlC4X,EAAehB,UAAUwP,QAAU,WAC/B,MAAOpmB,MAAKC,QAAQmC,OAQxBwV,EAAehB,UAAUyP,QAAU,WAC3BlU,SAASC,gBAAkBpS,KAAKC,SAAWD,KAAKmD,UAChDnD,KAAKC,QAAQoS,QACbpG,YAAUjM,KAAK8F,YAziCP,oBAijChB8R,EAAehB,UAAU0P,SAAW,WAC5BnU,SAASC,gBAAkBpS,KAAKC,SAAWD,KAAKmD,UAChDnD,KAAKC,QAAQsmB,OACb5f,eAAa3G,KAAK8F,YApjCV,oBA6jChB8R,EAAehB,UAAU4P,eAAiB,WACtC,GAAIC,IAAa,QACjB,OAAOzmB,MAAK0mB,aAAaD,IAW7B7O,EAAehB,UAAU+P,kBAAoB,SAAUC,EAASC,GAC5D,IAAK,GAAI5V,GAAK,EAAGC,EAAKC,OAAOC,KAAKwV,GAAU3V,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC9D,GAAIqK,GAAOpK,EAAGD,EACd,QAAQqK,GACJ,IAAK,QACDtb,KAAKya,gBAAgBmM,EAAQ5T,MAC7B,MACJ,KAAK,WACDhT,KAAK+c,eAAe6J,EAAQtV,SAAUuV,EAAQvV,SAC9C,MACJ,KAAK,UACD5E,QAAM6E,WAAWqV,EAAQzjB,QAASnD,KAAKC,QACvC,MACJ,KAAK,YACDyM,QAAM8E,aAAaoV,EAAQnV,WAAYzR,KAAK8F,WAC5C,MACJ,KAAK,WACD4G,QAAMiF,YAAYiV,EAAQhgB,SAAU5G,KAAKC,SACrCD,KAAK4G,SACL7G,aAAWC,KAAKC,SAAWqc,gBAAiB,SAG5Ctc,KAAKC,QAAQ2Q,gBAAgB,gBAEjC,MACJ,KAAK,iBACD5Q,KAAK+Z,0BACL/Z,KAAKqc,0BACLrc,KAAK2c,qBAAoB,GACzB3c,KAAKga,iBAAgB,GACrBtN,QAAM2C,kBAAkBrP,KAAK8F,UAAW9F,KAAKC,QAC7C,MACJ,KAAK,cACDyM,QAAMgF,eAAekV,EAAQ3gB,YAAajG,KAAKC,QAC/C,MACJ,KAAK,OACDD,KAAKqe,KAAOuI,EAAQvI,KACpBre,KAAKma,cACL,MACJ,KAAK,iBACDna,KAAK8mB,iBAAiBF,EACtB,MACJ,KAAK,kBACD5mB,KAAK+mB,kBAAkBH,EACvB,MACJ,KAAK,iBACD5mB,KAAKgG,eAAiB4gB,EAAQ5gB,eAC9BhG,KAAK+lB,sBACL,MACJ,KAAK,QACD/lB,KAAKgY,iBAAmBhY,KAAKkK,WAAalK,KAAK+X,QAAU/X,KAAKmK,cAC9DnK,KAAKkf,YAAY0H,EAAQxkB,OACrBpC,KAAKgY,kBACLhY,KAAKmK,eAAgB,EACrBnK,KAAKgY,iBAAkB,EAE3B,MACJ,KAAK,MACL,IAAK,MACDrL,WAAS2O,EAAM9C,WAAS8C,EAAMsL,GAAU5mB,MACxCA,KAAKka,iBACLla,KAAKkf,YAAYlf,KAAKoC,MACtB,MACJ,KAAK,aACDpC,KAAK4a,WAAagM,EAAQhM,WAC1B5a,KAAKkf,YAAYlf,KAAKoC,OACtBpC,KAAKojB,eACL,MACJ,KAAK,SACDpjB,KAAK8Z,kBACL9Z,KAAKoZ,KAAK4N,UAAUhnB,KAAKsZ,QACzBtZ,KAAKmf,gBACLnf,KAAKoa,oBACL1N,QAAMgF,eAAe1R,KAAKiG,YAAajG,KAAKC,SAC5CD,KAAKkf,YAAYlf,KAAKoC,MACtB,MACJ,KAAK,WAEG,GAAI4gB,GAAUxK,WAAS8C,EAAMsL,EAC7B5mB,MAAKwZ,eAAgBwC,aAAcgH,IAAW,GAC9ChjB,KAAK+iB,eAAezH,EAAM0H,EAE9B,MACJ,KAAK,eAEG,GAAIiE,GAAYzO,WAAS8C,EAAMsL,EAC/B5mB,MAAKwZ,eAAgBuC,SAAUkL,IAAa,GAC5CjnB,KAAK+iB,eAAe,WAAYkE,EAEpC,MACJ,KAAK,SACDta,WAAS2O,EAAM9C,WAAS8C,EAAMsL,GAAU5mB,MACxCA,KAAK6Z,kBACL7Z,KAAKkf,YAAYlf,KAAKoC,MACtB,MACJ,KAAK,WACDpC,KAAK8a,SAAW8L,EAAQ9L,SACxB9a,KAAKkf,YAAYlf,KAAKoC,UAItCwV,EAAehB,UAAUmQ,kBAAoB,SAAUH,GACnDla,QAAMwC,eAAe0X,EAAQnjB,gBAAiBzD,KAAKC,QAASD,KAAKmc,iBAAc9W,GAAWrF,KAAKsO,eAC/FtO,KAAKoD,kBAETwU,EAAehB,UAAUkQ,iBAAmB,SAAUF,GAC9CA,EAAQrM,eACRva,KAAKwa,mBAGLrG,SAAOnU,KAAKud,QACZpJ,SAAOnU,KAAKod,YASpBxF,EAAehB,UAAUsQ,cAAgB,WACrC,MAAO,kBAEXpQ,GACIqQ,WAAS,KACVvP,EAAehB,UAAW,eAAY,IACzCE,GACIqQ,WAAS,OACVvP,EAAehB,UAAW,YAAS,IACtCE,GACIqQ,YAAWzJ,OAAiB,YAC7B9F,EAAehB,UAAW,UAAO,IACpCE,GACIqQ,WAASzJ,OAAOE,YACjBhG,EAAehB,UAAW,UAAO,IACpCE,GACIqQ,WAAS,IACVvP,EAAehB,UAAW,WAAQ,IACrCE,GACIqQ,WAAS,OACVvP,EAAehB,UAAW,YAAS,IACtCE,GACIqQ,WAAS,OACVvP,EAAehB,UAAW,kBAAe,IAC5CE,GACIqQ,gBACDvP,EAAehB,UAAW,qBAAkB,IAC/CE,GACIqQ,YAAS,IACVvP,EAAehB,UAAW,qBAAkB,IAC/CE,GACIqQ,YAAS,IACVvP,EAAehB,UAAW,eAAY,IACzCE,GACIqQ,YAAS,IACVvP,EAAehB,UAAW,cAAW,IACxCE,GACIqQ,YAAS,IACVvP,EAAehB,UAAW,sBAAmB,IAChDE,GACIqQ,YAAS,IACVvP,EAAehB,UAAW,wBAAqB,IAClDE,GACIqQ,WAAS,OACVvP,EAAehB,UAAW,aAAU,IACvCE,GACIqQ,WAAS,OACVvP,EAAehB,UAAW,eAAY,IACzCE,GACIqQ,WAAS,OACVvP,EAAehB,UAAW,eAAY,IACzCE,GACIqQ,WAAS,OACVvP,EAAehB,UAAW,mBAAgB,IAC7CE,GACIqQ,YAAS,IACVvP,EAAehB,UAAW,iBAAc,IAC3CE,GACIqQ,YAAS,IACVvP,EAAehB,UAAW,4BAAyB,IACtDE,GACIqQ,WAAS,UACVvP,EAAehB,UAAW,qBAAkB,IAC/CE,GACIsQ,WACDxP,EAAehB,UAAW,cAAW,IACxCE,GACIsQ,WACDxP,EAAehB,UAAW,gBAAa,IAC1CE,GACIsQ,WACDxP,EAAehB,UAAW,aAAU,IACvCE,GACIsQ,WACDxP,EAAehB,UAAW,YAAS,IACtCE,GACIsQ,WACDxP,EAAehB,UAAW,WAAQ,IACrCgB,EAAiBd,GACbuQ,yBACDzP,IAEL0P,aFlzCEpb,EAAQ,UACRH,GAAa,gBACbC,GAAa,gBACbgB,GAAW,iBACXtG,GAAW,cACX+F,GAAc,iBAKPQ,IACPsa,EAAK,QACLC,EAAK,SACLC,IAAK,WACLC,EAAK,WACLC,IAAK,YACLC,IAAK,SACLC,EAAK,QACLC,EAAK,cACLjL,EAAK,gBA6lCLkL,GAA0B,WAC1B,QAASA,MAET,MAAOA,MGznCP9R,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB/E,OAAOkF,iBAChBC,uBAA2BC,QAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,MACpDL,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASM,KAAO1W,KAAK2W,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAajF,OAAO0F,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAYC,EAAQzN,EAAK0N,GAC7E,GAA2Hd,GAAvHe,EAAIC,UAAUtW,OAAQuW,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAO9F,OAAOkG,yBAAyBL,EAAQzN,GAAO0N,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQzN,EAAK0N,OACpH,KAAK,GAAIrW,GAAImW,EAAWlW,OAAS,EAAGD,GAAK,EAAGA,KAASuV,EAAIY,EAAWnW,MAAIwW,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQzN,EAAK6N,GAAKjB,EAAEa,EAAQzN,KAAS6N,EAChJ,OAAOF,GAAI,GAAKE,GAAKjG,OAAOqG,eAAeR,EAAQzN,EAAK6N,GAAIA,GAa5D4Q,IAAe,QAAS,QAAS,SAajCC,GAA+B,SAAUpQ,GAQzC,QAASoQ,GAAcnQ,EAAS7X,GAC5B,GAAIsF,GAAQsS,EAAO5W,KAAKjB,KAAM8X,EAAS7X,IAAYD,IAMnD,OALAuF,GAAMX,eAAiB,GACvBW,EAAM2E,WAAY,EAClB3E,EAAM4E,eAAgB,EACtB5E,EAAMD,WAAY,EAClBC,EAAM2iB,YAAcpQ,EACbvS,EA8bX,MA5cA0Q,IAAUgS,EAAepQ,GAsBzBoQ,EAAcrR,UAAUsQ,cAAgB,WACpC,MAAO,iBAQXe,EAAcrR,UAAUsB,UAAY,WAChClY,KAAKwB,WAAa,GAClBxB,KAAKqB,WAAa,GAClBrB,KAAKuB,gBAAkB,GACvBvB,KAAKoF,aAAe6H,GACpBjN,KAAKmB,sBACLnB,KAAKsH,cACLtH,KAAKmE,cACLnE,KAAK6J,mBACL7J,KAAK4kB,kBACL5kB,KAAKqG,iBACLrG,KAAKgH,cAAe,EACpBhH,KAAKsG,SAAU,EACftG,KAAK8J,WAAY,EACjB9J,KAAK0J,cAAe,CACpB,IAAI6O,GAAaC,WAAS,gBAAiBxY,KAAKC,QAKhD,IAJAD,KAAKyY,aAAezY,KAAKC,QAAQyY,WAAU,GAC3C/R,eAAa3G,KAAKyY,eAhEZ,YADE,kBAiE8C,UACtDzY,KAAK2Y,eAAiB,KACtB3Y,KAAKqD,YAAcgR,UAAQrU,KAAKC,QAAS,QACZ,sBAAzBD,KAAKC,QAAQ0E,QAAiC,CAC9C3E,KAAK2Y,eAAiB3Y,KAAKC,QAAQ0E,OAEnC,KAAK,GADDuP,GAAQlU,KAAKsO,cAAc,SACtB1N,EAAI,EAAGA,EAAIZ,KAAKC,QAAQF,WAAWc,OAAQD,IAChDsT,EAAM/E,aAAanP,KAAKC,QAAQF,WAAWa,GAAGiY,SAAU7Y,KAAKC,QAAQF,WAAWa,GAAGkY,WACnF5E,EAAMvB,UAAY3S,KAAKC,QAAQ0S,SAE/B3S,MAAKC,QAAQ8Y,aAAa,OAC1B/Y,KAAKC,QAAQ2Q,gBAAgB,MAEjC5Q,KAAKC,QAAQ8D,UAAUP,OAAO,YAAa,mBAC3CxD,KAAKC,QAAQ8D,UAAUxB,IAAI,oBAC3BvC,KAAKC,QAAQ6O,YAAYoF,GACzBlU,KAAKC,QAAUiU,EACfvH,WAAS,gBAAiB4L,EAAYvY,KAAKC,SAE/CD,KAAK+Z,0BACL/Z,KAAKmoB,qBAAoB,GACrBnoB,KAAKqD,cACLrD,KAAK4E,eAAiB5E,KAAKoC,QASnC6lB,EAAcrR,UAAU4P,eAAiB,WACrC,GAAIC,IAAa,QACjB,OAAOzmB,MAAK0mB,aAAaD,IAS7BwB,EAAcrR,UAAUyD,OAAS,WACc,UAAvCra,KAAKC,QAAQ0E,QAAQ4H,gBACO,UAAxBvM,KAAKgG,gBACLiG,YAAUjM,KAAKC,SA/GnB,WAiHAD,KAAKsa,gBACLta,KAAKqc,0BACqB,KAAtBrc,KAAKC,QAAQwc,MACbzc,KAAKC,QAAQkP,aAAa,OAAQnP,KAAKC,QAAQuQ,IAEnDxQ,KAAK8J,WAAY,EACjB9J,KAAKooB,qBACLpoB,KAAK8J,WAAY,EACjB9J,KAAKqoB,oBAAmB,GAAM,GAC9BroB,KAAK+S,SAAS/S,KAAKgT,OACnBhT,KAAK+H,UAAY/H,KAAKC,QAAQmC,MACzBoF,UAAQia,UAAsC,SAAzBja,UAAQuc,KAAKC,SAA4C,SAAtBxc,UAAQuc,KAAKtH,MACtEzc,KAAKC,QAAQsmB,OAEb/e,UAAQia,UAAYja,UAAQud,OAC5B/kB,KAAKC,QAAQsmB,QAEbvmB,KAAKC,QAAQ8Q,aAAa,UAAY/Q,KAAKoC,QAC3CpC,KAAKC,QAAQkP,aAAa,QAASnP,KAAKC,QAAQmC,OAEpDpC,KAAKkb,mBAGb+M,EAAcrR,UAAUmD,wBAA0B,WAC9C,IAAKrY,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI1H,GAAM2H,EAAGD,EACT+W,IAAY3b,QAAQ9C,GAAO,GAC3BvJ,KAAKC,QAAQkP,aAAa5F,EAAKvJ,KAAKqb,eAAe9R,MAKnE0e,EAAcrR,UAAUmG,eAAiB,SAAUC,EAAUlK,GACzDpG,QAAM2E,YAAYrR,KAAKsoB,kBAAkBtL,IAAYhd,KAAK0D,SAASoC,WAAY9F,KAAKsoB,kBAAkBxV,KAE1GmV,EAAcrR,UAAU0R,kBAAoB,SAAUC,GAClD,GAAI9V,GAAS8V,CAIb,OAHK7mB,qBAAkB6mB,IAAoC,KAAlBA,IACrC9V,EAAU8V,EAAc9mB,QAAQ,OAAQ,KAAM+I,QAE3CiI,GAEXwV,EAAcrR,UAAUyF,wBAA0B,WAC9C,IAAK3a,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI1H,GAAM2H,EAAGD,EACb,IAAI+W,GAAY3b,QAAQ9C,IAAQ,EAC5B,GAAY,UAARA,EAAiB,CACjB,GAAIif,GAAsBxoB,KAAKqb,eAAe9R,GAAK9H,QAAQ,OAAQ,KAAM+I,MAC9C,MAAvBge,GACAvc,YAAUjM,KAAK0D,SAASoC,WAAY0iB,EAAmB7nB,MAAM,UAGhE,IAAY,UAAR4I,EAAiB,CACtB,GAAIkf,GAAYzoB,KAAK0D,SAASoC,UAAUiL,aAAaxH,EACrDkf,GAAa/mB,oBAAkB+mB,GAC3BzoB,KAAKqb,eAAe9R,GADqBkf,EAAYzoB,KAAKqb,eAAe9R,GAE7EvJ,KAAK0D,SAASoC,UAAUqJ,aAAa5F,EAAKkf,OAG1CzoB,MAAK0D,SAASoC,UAAUqJ,aAAa5F,EAAKvJ,KAAKqb,eAAe9R,MAMlF0e,EAAcrR,UAAUwR,mBAAqB,WACzCpoB,KAAKwB,WAAa,GAClBxB,KAAKqB,WAAa,GAClBrB,KAAKuB,gBAAkB,GACvBvB,KAAKmB,sBACLnB,KAAKsH,cACLtH,KAAKmE,cACDnE,KAAKsB,WAAWT,OAAS,IACzBb,KAAKsB,WAAatB,KAAKsB,WAAW,IAEtCxB,EAAWmB,KAAKjB,MAChBiC,EAAUhB,KAAKjB,OACG,OAAdA,KAAKS,MAA+B,KAAdT,KAAKS,UAA8B4E,KAAfrF,KAAKoC,QAC/CF,EAAgBjB,KAAKjB,KAAMA,KAAKoC,MAEpC,IAAI4F,GAAMlD,EAAc7D,KAAKjB,KAAMA,KAAKC,QACxCD,MAAKiI,UAAYD,EACjBhI,KAAKoC,MAAQ4F,EACRhI,KAAK8J,WACNvG,EAAatC,KAAKjB,MAEtBqC,EAAWpB,KAAKjB,OAEpBioB,EAAcrR,UAAUyR,mBAAqB,SAAUK,EAAQC,IACvDA,GAAsB3oB,KAAKiG,eAC3ByG,QAAMgF,eAAe1R,KAAKiG,YAAajG,KAAKC,UACvCD,KAAKC,QAAQmC,QAAUpC,KAAKwB,YAAcknB,GAAkC,WAAxB1oB,KAAKgG,gBAC1DhG,KAAKC,QAAQmC,QAAUpC,KAAKwB,YAAsC,UAAxBxB,KAAKgG,iBAC/C9D,EAAgBjB,KAAKjB,KAAM,MAIvCioB,EAAcrR,UAAU7D,SAAW,SAAUC,GACzC,IAAKtR,oBAAkBsR,GACnB,GAAqB,gBAAVA,GACPhT,KAAK0D,SAASoC,UAAUmN,MAAMD,MAAQE,aAAWF,GACjDhT,KAAKC,QAAQgT,MAAMD,MAAQE,aAAWF,OAErC,IAAqB,gBAAVA,GAAoB,CAChC,GAAI4V,GAAgB5V,EAAMlR,MAAM,aAAyBoR,aAAWF,EACpEhT,MAAK0D,SAASoC,UAAUmN,MAAMD,MAAQ4V,EACtC5oB,KAAKC,QAAQgT,MAAMD,MAAQ4V,IAIvCX,EAAcrR,UAAUuR,oBAAsB,SAAUhN,GAGpD,IAAK,GAAIlK,GAAK,EAAGmK,EAFAD,EAAYzZ,oBAAkB1B,KAAKqb,mBAAuBlK,OAAOC,KAAKpR,KAAKqb,iBACrF,cAAe,WAAY,QAAS,YACCpK,EAAKmK,EAAava,OAAQoQ,IAAM,CACxE,GAAI1H,GAAM6R,EAAanK,EACvB,KAAKvP,oBAAkB1B,KAAKC,QAAQ8Q,aAAaxH,IAC7C,OAAQA,GACJ,IAAK,eACI7H,oBAAkB1B,KAAKkoB,kBAAqD7iB,KAApCrF,KAAKkoB,YAAyB,aAAqB/M,IAC5Fnb,KAAKwZ,eAAgBvT,YAAajG,KAAKC,QAAQgG,cAAgBkV,EAEnE,MACJ,KAAK,WACD,GAAKzZ,oBAAkB1B,KAAKkoB,kBAAiD7iB,KAAhCrF,KAAKkoB,YAAqB,SAAqB/M,EAAW,CACnG,GAAI0N,GAA+C,aAAnC7oB,KAAKC,QAAQ8Q,aAAaxH,IAA0D,KAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,IACpD,SAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,EAC9BvJ,MAAKwZ,eAAgBrW,QAAS0lB,IAAc1N,GAEhD,KACJ,KAAK,SACIzZ,oBAAkB1B,KAAKkoB,kBAA+C7iB,KAA9BrF,KAAKkoB,YAAmB,OAAqB/M,IACtFnb,KAAKwZ,eAAgBpX,MAAOpC,KAAKC,QAAQmC,QAAU+Y,EAEvD,MACJ,KAAK,WACD,GAAKzZ,oBAAkB1B,KAAKkoB,kBAAkD7iB,KAAjCrF,KAAKkoB,YAAsB,UAAqB/M,EAAW,CACpG,GAAI9H,GAAgD,aAAnCrT,KAAKC,QAAQ8Q,aAAaxH,IAA0D,KAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,IAClD,SAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,EACjCvJ,MAAKwZ,eAAgB5S,SAAUyM,IAAe8H,OAOtE8M,EAAcrR,UAAU0D,cAAgB,WACpC,GAAIwO,GAAwB9oB,KAAKsR,QAC5B5P,qBAAkB1B,KAAKsR,WAA+B,KAAlBtR,KAAKsR,WAC1CwX,EAAwB9oB,KAAKsoB,kBAAkBtoB,KAAKsR,WAExDtR,KAAK0D,SAAWgJ,QAAMyB,aAClBlO,QAASD,KAAKC,QACd+F,eAAgBhG,KAAKgG,eACrBiJ,YACIwC,UAAWzR,KAAKyR,UAChBH,SAAUwX,EACV3lB,QAASnD,KAAKmD,QACdyD,SAAU5G,KAAK4G,SACfX,YAAajG,KAAKiG,YAClBxC,gBAAiBzD,KAAKyD,kBAE3BzD,KAAKsO,eACRtO,KAAK0D,SAASoC,UAAUqJ,aAAa,QAASiN,4BAAapc,KAAK0D,SAASoC,UAAUiL,aAAa,WAUpGkX,EAAcrR,UAAU+P,kBAAoB,SAAUC,EAASC,GAC3D,IAAK,GAAI5V,GAAK,EAAGC,EAAKC,OAAOC,KAAKwV,GAAU3V,EAAKC,EAAGrQ,OAAQoQ,IAExD,OADWC,EAAGD,IAEV,IAAK,QACD9O,EAAalB,KAAKjB,KAAMA,KAAKoC,OACzBpC,KAAKiG,aACLjG,KAAKqoB,oBAAmB,GAAO,EAEnC,MACJ,KAAK,cACDroB,KAAKqoB,oBAAmB,GAAM,EAC9B,MACJ,KAAK,QACDroB,KAAK+S,SAAS6T,EAAQ5T,MACtB,MACJ,KAAK,WACDhT,KAAK+c,eAAe6J,EAAQtV,SAAUuV,EAAQvV,SAC9C,MACJ,KAAK,UACD5E,QAAM6E,WAAWqV,EAAQzjB,QAASnD,KAAKC,QAASD,KAAKgG,eAAgBhG,KAAK0D,SAASoC,UACnF,MACJ,KAAK,WACD4G,QAAMiF,YAAYiV,EAAQhgB,SAAU5G,KAAKC,QACzC,MACJ,KAAK,YACDyM,QAAM8E,aAAaoV,EAAQnV,WAAYzR,KAAK0D,SAASoC,WACrD,MACJ,KAAK,mBACD9F,KAAK2B,iBAAmBilB,EAAQjlB,iBAChC3B,KAAKooB,oBACL,MACJ,KAAK,kBACD1b,QAAMwC,eAAe0X,EAAQnjB,gBAAiBzD,KAAKC,QAASD,KAAK0D,aAAU2B,GAAWrF,KAAKsO,eAC3FlL,EAAenC,KAAKjB,KACpB,MACJ,KAAK,iBACDA,KAAKgG,eAAiB4gB,EAAQ5gB,eAC9B0G,QAAMuH,eAAejU,KAAK0D,UAC1BgJ,QAAM0H,YAAYpU,KAAKC,QAASD,KAAKgG,eAAgBhG,KAAKiG,YAAajG,KAAKsO,cAC5E,MACJ,KAAK,iBACDtO,KAAK+Z,0BACL/Z,KAAKqc,0BACLrc,KAAKmoB,qBAAoB,EACzB,MACJ,KAAK,OAEG,GAAIY,GAAkB/oB,KAAKoC,KAC3BpC,MAAKS,KAAOmmB,EAAQnmB,KACpBT,KAAKkf,YAAY6J,EAErB,MACJ,KAAK,aACGnC,EAAQtlB,WAAWT,OAAS,IAC5B+lB,EAAQtlB,WAAaslB,EAAQtlB,WAAW,IAExCslB,EAAQtlB,WACRtB,KAAKsB,WAAaslB,EAAQtlB,WAG1BtB,KAAKsB,WAAa,GAEtB,IAAIc,GAAQpC,KAAKC,QAAQmC,MAAMX,QAAQ,GAAIG,QAAO,IAAMilB,EAAQvlB,WAAa,IAAK,KAAMtB,KAAKsB,WACzFtB,MAAKwB,aAAexB,KAAKC,QAAQmC,QACjCA,EAAQpC,KAAKwB,WAAWC,QAAQ,GAAIG,QAAO,IAAMilB,EAAQvlB,WAAa,IAAK,KAAMtB,KAAKsB,aAE1FtB,KAAKwB,WAAaxB,KAAKwB,WAAWC,QAAQ,GAAIG,QAAO,IAAMilB,EAAQvlB,WAAa,IAAK,KAAMtB,KAAKsB,YAChGtB,KAAKsH,WAAatH,KAAKmE,cACvBjC,EAAgBjB,KAAKjB,KAAMoC,GAKvCpC,KAAKmK,cAAgBnK,KAAKkK,WAAalK,KAAKmK,eAAiBnK,KAAKmK,cAAgBnK,KAAKmK,eAE3F8d,EAAcrR,UAAUsI,YAAc,SAAU8J,GAC5ChpB,KAAKooB,qBACLjmB,EAAalB,KAAKjB,KAAMgpB,IAS5Bf,EAAcrR,UAAUqS,eAAiB,WACrC,MAAOpkB,GAAgB5D,KAAKjB,KAAMA,KAAKC,UAQ3CgoB,EAAcrR,UAAUyP,QAAU,WAC1BlU,SAASC,gBAAkBpS,KAAKC,SAAWD,KAAKmD,UAChDnD,KAAKC,QAAQoS,QACbpG,YAAUjM,KAAK0D,SAASoC,YA/Xd,oBAuYlBmiB,EAAcrR,UAAU0P,SAAW,WAC3BnU,SAASC,gBAAkBpS,KAAKC,SAAWD,KAAKmD,UAChDnD,KAAKC,QAAQsmB,OACb5f,eAAa3G,KAAK0D,SAASoC,YA1YjB,oBAoZlBmiB,EAAcrR,UAAUsP,QAAU,WAC9B3iB,EAAatC,KAAKjB,KAKlB,KAAK,GAJDmmB,IAAa,kBAAmB,OAAQ,eAAgB,gBACxD,cAAe,gBAAiB,mBAAoB,iBACpD,aAAc,oBACd,YAAa,gBAAiB,gBACzBvlB,EAAI,EAAGA,EAAIulB,EAAUtlB,OAAQD,IAClCZ,KAAKC,QAAQ2Q,gBAAgBuV,EAAUvlB,GAE3CZ,MAAKC,QAAQ8D,UAAUP,OAAO,WAC9BxD,KAAK0D,SAASoC,UAAUkM,sBAAsB,WAAYhS,KAAKC,SAC/DkU,SAAOnU,KAAK0D,SAASoC,WACrB+R,EAAOjB,UAAUsP,QAAQjlB,KAAKjB,OAElC8W,IACIqQ,WAAS,OACVc,EAAcrR,UAAW,eAAY,IACxCE,IACIqQ,WAAS,OACVc,EAAcrR,UAAW,YAAS,IACrCE,IACIqQ,WAAS,OACVc,EAAcrR,UAAW,kBAAe,IAC3CE,IACIqQ,WAAS,UACVc,EAAcrR,UAAW,qBAAkB,IAC9CE,IACIqQ,gBACDc,EAAcrR,UAAW,qBAAkB,IAC9CE,IACIqQ,YAAS,IACVc,EAAcrR,UAAW,cAAW,IACvCE,IACIqQ,YAAS,IACVc,EAAcrR,UAAW,eAAY,IACxCE,IACIqQ,YAAS,IACVc,EAAcrR,UAAW,sBAAmB,IAC/CE,IACIqQ,YAAS,IACVc,EAAcrR,UAAW,wBAAqB,IACjDE,IACIqQ,WAAS,OACVc,EAAcrR,UAAW,WAAQ,IACpCE,IACIqQ,WAAS,MACVc,EAAcrR,UAAW,iBAAc,IAC1CE,IACIqQ,WAAS,OACVc,EAAcrR,UAAW,YAAS,IACrCE,IACIqQ,WAAS,OACVc,EAAcrR,UAAW,uBAAoB,IAChDE,IACIsQ,WACDa,EAAcrR,UAAW,cAAW,IACvCE,IACIsQ,WACDa,EAAcrR,UAAW,gBAAa,IACzCE,IACIsQ,WACDa,EAAcrR,UAAW,aAAU,IACtCE,IACIsQ,WACDa,EAAcrR,UAAW,YAAS,IACrCE,IACIsQ,WACDa,EAAcrR,UAAW,WAAQ,IACpCqR,EAAgBnR,IACZuQ,yBACDY,IAELX,aCzfErR,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB/E,OAAOkF,iBAChBC,uBAA2BC,QAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,MACpDL,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASM,KAAO1W,KAAK2W,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAajF,OAAO0F,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAYC,EAAQzN,EAAK0N,GAC7E,GAA2Hd,GAAvHe,EAAIC,UAAUtW,OAAQuW,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAO9F,OAAOkG,yBAAyBL,EAAQzN,GAAO0N,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQzN,EAAK0N,OACpH,KAAK,GAAIrW,GAAImW,EAAWlW,OAAS,EAAGD,GAAK,EAAGA,KAASuV,EAAIY,EAAWnW,MAAIwW,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQzN,EAAK6N,GAAKjB,EAAEa,EAAQzN,KAAS6N,EAChJ,OAAOF,GAAI,GAAKE,GAAKjG,OAAOqG,eAAeR,EAAQzN,EAAK6N,GAAIA,GAW5D8R,GAA2B,SAAUrR,GAErC,QAASqR,KACL,MAAkB,QAAXrR,GAAmBA,EAAOsR,MAAMnpB,KAAMmX,YAAcnX,KAiB/D,MAnBAiW,IAAUiT,EAAWrR,GAIrBf,IACIqQ,WAAS,SACV+B,EAAUtS,UAAW,gBAAa,IACrCE,IACIqQ,WAAS,KACV+B,EAAUtS,UAAW,gBAAa,IACrCE,IACIqQ,WAAS,IACV+B,EAAUtS,UAAW,gBAAa,IACrCE,IACIqQ,YAAS,IACV+B,EAAUtS,UAAW,qBAAkB,IAC1CE,IACIqQ,WAAS,OACV+B,EAAUtS,UAAW,aAAU,IAC3BsS,GACTE,iBAMEC,GAAgC,SAAUxR,GAE1C,QAASwR,KACL,MAAkB,QAAXxR,GAAmBA,EAAOsR,MAAMnpB,KAAMmX,YAAcnX,KAW/D,MAbAiW,IAAUoT,EAAgBxR,GAI1Bf,IACIqQ,WAAS,OACVkC,EAAezS,UAAW,YAAS,IACtCE,IACIqQ,WAAS,OACVkC,EAAezS,UAAW,YAAS,IACtCE,IACIqQ,WAAS,OACVkC,EAAezS,UAAW,UAAO,IAC7ByS,GACTD,iBAMEE,GAA2B,SAAUzR,GAErC,QAASyR,KACL,MAAkB,QAAXzR,GAAmBA,EAAOsR,MAAMnpB,KAAMmX,YAAcnX,KAuB/D,MAzBAiW,IAAUqT,EAAWzR,GAIrBf,IACIqQ,YAAS,IACVmC,EAAU1S,UAAW,cAAW,IACnCE,IACIqQ,WAAS,OACVmC,EAAU1S,UAAW,eAAY,IACpCE,IACIqQ,WAAS,OACVmC,EAAU1S,UAAW,aAAU,IAClCE,IACIqQ,WAAS,OACVmC,EAAU1S,UAAW,eAAY,IACpCE,IACIqQ,WAAS,OACVmC,EAAU1S,UAAW,aAAU,IAClCE,IACIqQ,YAAS,IACVmC,EAAU1S,UAAW,uBAAoB,IAC5CE,IACIqQ,YAAS,IACVmC,EAAU1S,UAAW,qBAAkB,IACnC0S,GACTF,iBAKEG,GAA6B,SAAU1R,GAEvC,QAAS0R,KACL,MAAkB,QAAX1R,GAAmBA,EAAOsR,MAAMnpB,KAAMmX,YAAcnX,KAiB/D,MAnBAiW,IAAUsT,EAAa1R,GAIvBf,IACIqQ,WAAS,KACVoC,EAAY3S,UAAW,eAAY,IACtCE,IACIqQ,WAAS,WACVoC,EAAY3S,UAAW,gBAAa,IACvCE,IACIqQ,WAAS,UACVoC,EAAY3S,UAAW,aAAU,IACpCE,IACIqQ,YAAS,IACVoC,EAAY3S,UAAW,gBAAa,IACvCE,IACIqQ,WAAS,OACVoC,EAAY3S,UAAW,aAAU,IAC7B2S,GACTH,iBAIEI,IACAC,KAAM,WACNC,IAAK,QACLC,kBAAmB,iBACnBC,eAAgB,oBAChBC,aAAc,WACdC,SAAU,UACVC,aAAc,kBACdC,YAAa,iBACbC,aAAc,kBACdC,MAAO,UACPC,KAAM,SACNC,MAAO,UACPC,UAAW,eACXC,cAAe,mBACfC,YAAa,iBACbC,kBAAmB,iBACnBC,mBAAoB,kBACpBC,eAAgB,aAChBC,gBAAiB,qBACjBC,wBAAyB,6BACzBC,uBAAwB,4BACxBC,sBAAuB,2BACvBC,qBAAsB,0BACtBC,gBAAiB,qBACjBC,oBAAqB,0BACrBC,sBAAuB,mBACvBC,eAAgB,oBAChBC,YAAa,iBACbC,sBAAuB,4BACvBC,oBAAqB,0BACrBC,oBAAqB,mBACrBC,eAAgB,aAChBC,iBAAkB,eAClBC,kBAAmB,iBACnBC,mBAAoB,2BACpBC,gBAAiB,eACjBC,iBAAkB,gBAClBC,gBAAiB,eACjBC,mBAAoB,aACpBC,gBAAiB,eACjBC,eAAgB,cAChBC,kBAAmB,eACnBC,qBAAsB,iBACtBC,eAAgB,cAChBC,eAAgB,cAChBC,mBAAoB,kBACpBC,qBAAsB,oBACtBC,oBAAqB,mBACrBC,sBAAuB,qBACvBC,oBAAqB,0BACrBC,oBAAqB,0BACrB/lB,SAAU,cACVgmB,OAAQ,WACRC,gBAAiB,cACjBC,cAAe,gBACfC,eAAgB,iBAChBC,eAAgB,oBAChBC,aAAc,mBAedC,GAAwB,SAAUrV,GAElC,QAASqV,GAAOpV,EAAS7X,GACrB,GAAIsF,GAAQsS,EAAO5W,KAAKjB,KAAM8X,EAAS7X,IAAYD,IAiBnD,OAhBAuF,GAAM4nB,OAAS,OACf5nB,EAAM6nB,OAAS,SACf7nB,EAAM8nB,YACFC,OAAQ,oKAERxD,SAAU,yCAEdvkB,EAAMgoB,6BACFD,OAAQ,+EACRxD,SAAU,uGAEdvkB,EAAMioB,eAAiB,8CACvBjoB,EAAMkoB,eAAiB,KACvBloB,EAAMmoB,MAAO,EACbnoB,EAAMooB,gBAAiB,EACvBpoB,EAAMqoB,gBAAiB,EAChBroB,EA4oFX,MA/pFA0Q,IAAUiX,EAAQrV,GAqBlBqV,EAAOtW,UAAUsB,UAAY,WAEzB,GAAIe,IAAeC,eAAgB,WAAYC,eAAgB,WAC/DnZ,MAAKoZ,KAAO,GAAIC,QAAK,SAAUJ,EAAYjZ,KAAKsZ,QAChDtZ,KAAK6tB,kBAAmB,EACxB7tB,KAAK8tB,yBACL9tB,KAAK+tB,qBACL/tB,KAAKguB,mBACLhuB,KAAK6Z,kBACL7Z,KAAK8Z,kBACL9Z,KAAKiuB,eAETf,EAAOtW,UAAUqX,YAAc,WAC3B,GAAI5qB,GAAcgR,UAAQrU,KAAKC,QAAS,OACpCoD,IACArD,KAAKkuB,QAAS,EAGTxsB,oBAAkB1B,KAAKmuB,iBACxBnuB,KAAKwZ,eAAgBpX,MAASpC,KAAKmuB,iBAAkB,GAEzDnuB,KAAKmuB,eAAiBnuB,KAAKoC,MACT,UAAdpC,KAAK0I,OACJhH,oBAAkB1B,KAAKmuB,iBAAoD,gBAAzBnuB,qBAG9C0B,oBAAkB1B,KAAKmuB,kBAC5BnuB,KAAKmuB,eAAiB9M,WAAWnO,aAAWlT,KAAKyd,OAHjDzd,KAAKmuB,gBAAkB9M,WAAWnO,aAAWlT,KAAKyd,MAAO4D,WAAWnO,aAAWlT,KAAK2d,OAKxF3d,KAAKqD,YAAcA,GAGnBrD,KAAKkuB,QAAS,GAGtBhB,EAAOtW,UAAUkD,gBAAkB,WAC/B9Z,KAAKouB,qBAAuB,GAAItS,wBAAqB9b,KAAKsZ,SAE9D4T,EAAOtW,UAAUiD,gBAAkB,WAC/B7Z,KAAK+tB,kBAAkBrS,OAAWha,oBAAkB1B,KAAKquB,QAAQ3S,QAAiC,KAAtB1b,KAAKquB,QAAQ3S,OACzF1b,KAAKguB,gBAAgBtS,OAAWha,oBAAkB1B,KAAKsuB,MAAM5S,QAA+B,KAApB1b,KAAKsuB,MAAM5S,QAEvFwR,EAAOtW,UAAU2X,aAAe,SAAUnsB,EAAOosB,GAC7C,GAAIC,GAAc,KACdF,EAAe,IACnB,IAAKnsB,GAAmB,IAAVA,EAAc,CACxBqsB,EAAczuB,KAAKqjB,aAAajhB,EAChC,IAAI6gB,GAAmBjjB,KAAKijB,iBAAiB7gB,EAC7CmsB,GAAevuB,KAAKouB,qBAAqBnQ,gBAAgBuQ,GAAYxuB,KAAK0uB,gBAAgBtsB,EAAO6gB,IAErG,OAAS0L,WAAYF,EAAaF,aAAcA,IAEpDrB,EAAOtW,UAAUyM,aAAe,SAAUjhB,GACtC,GAAI6gB,GAAmBjjB,KAAKijB,iBAAiB7gB,EAC7C,OAAOpC,MAAKouB,qBAAqBnQ,iBAC7BC,sBAAuB+E,EACvB9E,sBAAuB8E,EAAkB7E,aAAa,IACvDhc,IAEP8qB,EAAOtW,UAAUqM,iBAAmB,SAAU7gB,GAC1C,GAAIuhB,GAAcvhB,EAAM2b,WAAWpd,MAAM,KAAK,EAE9C,OADwBgjB,IAAgBA,EAAY9iB,OAAa8iB,EAAY9iB,OAAhB,GAGjEqsB,EAAOtW,UAAU8X,gBAAkB,SAAUtsB,EAAOugB,GAChD,GAAI7H,GAAW6H,GAAa,CAC5B,OAAOjF,QAAOtb,EAAMqhB,QAAQ3I,KAEhCoS,EAAOtW,UAAUgY,oBAAsB,SAAUxsB,GAC7CA,EAA0C,IAAjCpC,KAAKijB,iBAAiB7gB,GAAgBsb,OAAOtb,GAAOqhB,QAAQzjB,KAAK6uB,cAAgBzsB,CAE1F,KAAK,GADD0sB,GAAO,EACFluB,EAAI,EAAGA,EAAIZ,KAAK6uB,aAAcjuB,IACnCkuB,GAAQ,EAGZ,OADA1sB,GAAQsb,QAAQtb,EAAQ0sB,GAAMrL,QAAQ,KAO1CyJ,EAAOtW,UAAUyD,OAAS,WACtB,GAAI9U,GAAQvF,IACZA,MAAK+uB,aACL/uB,KAAKgvB,aACLhvB,KAAKqC,aACLrC,KAAKivB,YACLjvB,KAAKkb,iBACwB,eAAzBlb,KAAKC,QAAQ0E,SAC8B,QAAvC3E,KAAKkvB,SAASlvB,KAAK2qB,kBACnBzkB,WAAW,WACPX,EAAM4pB,WACP,IAIfjC,EAAOtW,UAAUmY,WAAa,WAC1B9iB,YAAUjM,KAAKC,SAAUupB,GAAWC,MACpCzpB,KAAKovB,eAETlC,EAAOtW,UAAU6D,gBAAkB,SAAUzH,GACpCtR,oBAAkBsR,KACE,gBAAVA,GACPhT,KAAK2qB,gBAAgB1X,MAAMD,MAAQE,aAAWF,GAExB,gBAAVA,KACZhT,KAAK2qB,gBAAgB1X,MAAMD,MAASA,EAAMlR,MAAM,aAAyBoR,aAAWF,MAIhGka,EAAOtW,UAAUwY,YAAc,SAAUC,GACjCA,GACA1oB,eAAa3G,KAAKC,SAAUovB,EAAY1uB,MAAM,MAE9CX,KAAKsR,UACLrF,YAAUjM,KAAKC,SAAUD,KAAKsR,SAAS3Q,MAAM,OAGrDusB,EAAOtW,UAAUrF,WAAa,WACrBvR,KAAKmD,SAQNwD,eAAa3G,KAAK2qB,kBAAmBnB,GAAWkB,iBAC5C1qB,KAAKquB,QAAQiB,WAAatvB,KAAKuvB,gBAA0C,WAAxBvvB,KAAKquB,QAAQmB,QAC9DxvB,KAAKuvB,eAAexrB,UAAUP,OAAOgmB,GAAWkB,gBAEpD1qB,KAAKqC,eAXL4J,YAAUjM,KAAK2qB,kBAAmBnB,GAAWkB,iBACzC1qB,KAAKquB,QAAQiB,WAAatvB,KAAKuvB,gBAA0C,WAAxBvvB,KAAKquB,QAAQmB,QAC9DxvB,KAAKuvB,eAAexrB,UAAUxB,IAAIinB,GAAWkB,gBAEjD1qB,KAAKuD,iBAUb2pB,EAAOtW,UAAUsY,SAAW,SAAUppB,GAElC,MADY2pB,QAAOC,iBAAiB5pB,EAAW,UAAU6pB,iBAAiB,WAC7DluB,QAAQ,SAAU,KAMnCyrB,EAAOtW,UAAUoY,WAAa,WAC1BhvB,KAAK2qB,gBAAkB3qB,KAAKsO,cAAc,OAASgC,UAAWkZ,GAAWmB,gBAAkB,IAAMnB,GAAWI,iBAC5G5pB,KAAKC,QAAQuG,WAAWqI,aAAa7O,KAAK2qB,gBAAiB3qB,KAAKC,SAChED,KAAK2qB,gBAAgB7b,YAAY9O,KAAKC,SACtCD,KAAKorB,YAAcprB,KAAKsO,cAAc,OAASgC,UAAWkZ,GAAW4B,cACrEprB,KAAKC,QAAQ6O,YAAY9O,KAAKorB,aAC9BprB,KAAKya,gBAAgBza,KAAKgT,OAC1BhT,KAAKC,QAAQ2vB,UAAY,EACzB5vB,KAAK6vB,yBACL7vB,KAAK8vB,aACL9vB,KAAK+vB,iBACD/vB,KAAK4sB,OAAOzpB,SACZnD,KAAKgwB,iBAEThwB,KAAKiwB,iBACLjwB,KAAKgb,YAAehb,KAAKsO,cAAc,SACnC0F,OACItL,KAAM,SAAUtG,MAAQV,oBAAkB1B,KAAKoC,OAASpC,KAAKyd,IAAIM,WAAa/d,KAAKoC,MAAM2b,WACzFtB,KAAMzc,KAAKC,QAAQ8Q,aAAa,SAAW/Q,KAAKC,QAAQ8Q,aAAa,OACjE,KAAuB,IAAhB0R,KAAKyN,UAAiBzM,QAAQ,GAAK,SAAUjH,MAAOgN,GAAWG,qBAGlF3pB,KAAKgb,YAAY4U,UAAY,EAC7B5vB,KAAK2qB,gBAAgB7b,YAAY9O,KAAKgb,aAClChb,KAAKmwB,aACLnwB,KAAKowB,aAETpwB,KAAKqwB,eACa,UAAdrwB,KAAK0I,KACL1I,KAAKswB,mBAGLtwB,KAAKoC,MAAQV,oBAAkB1B,KAAKoC,OAASif,WAAWnO,aAAWlT,KAAKyd,IAAIM,aAAe/d,KAAKoC,MAEpGpC,KAAKuwB,YAA4B,UAAdvwB,KAAK0I,KAAmB1I,KAAKwwB,iBAAiBnP,WAAWnO,aAAWlT,KAAKoC,MAAM2b,eAC7F/d,KAAKwwB,iBAAiBnP,WAAWnO,aAAWlT,KAAKoC,MAAM,GAAG2b,cACvD/d,KAAKwwB,iBAAiBnP,WAAWnO,aAAWlT,KAAKoC,MAAM,GAAG2b,eAClE/d,KAAKywB,gBAAkBzwB,KAAKuwB,YACvB7uB,oBAAkB1B,KAAKC,QAAQ8Y,aAAa,UAC7C/Y,KAAKC,QAAQ2Q,gBAAgB,QAEjC5Q,KAAK2M,WACD3M,KAAK4sB,OAAOzpB,SACZnD,KAAK0wB,cAEoB,SAAzB1wB,KAAKsuB,MAAMqC,WACX3wB,KAAK4wB,cAEL5wB,KAAKquB,QAAQiB,WACbtvB,KAAK6wB,gBAEJ7wB,KAAKmD,QAINwD,eAAa3G,KAAK2qB,kBAAmBnB,GAAWkB,iBAHhDze,YAAUjM,KAAK2qB,kBAAmBnB,GAAWkB,iBAK7C1qB,KAAK4G,SACLqF,YAAUjM,KAAK2qB,kBAAmBnB,GAAW5iB,WAG7CD,eAAa3G,KAAK2qB,kBAAmBnB,GAAW5iB,YAGxDsmB,EAAOtW,UAAUiZ,uBAAyB,WACtC7vB,KAAK8wB,WAAqD,aAAxC9wB,KAAKkvB,SAASlvB,KAAK2qB,kBACU,kBAAxC3qB,KAAKkvB,SAASlvB,KAAK2qB,iBAC1B3qB,KAAK+wB,YAAsD,cAAxC/wB,KAAKkvB,SAASlvB,KAAK2qB,kBACS,mBAAxC3qB,KAAKkvB,SAASlvB,KAAK2qB,iBAC1B3qB,KAAKgxB,aAAuD,eAAxChxB,KAAKkvB,SAASlvB,KAAK2qB,iBACvC3qB,KAAKixB,WAAqD,aAAxCjxB,KAAKkvB,SAASlvB,KAAK2qB,kBAA2E,kBAAxC3qB,KAAKkvB,SAASlvB,KAAK2qB,iBAC3F3qB,KAAKkxB,aAAuD,eAAxClxB,KAAKkvB,SAASlvB,KAAK2qB,iBACvC3qB,KAAKmxB,kBAAoBnxB,KAAK8wB,YAA4B,UAAd9wB,KAAK0I,MAAoB1I,KAAKquB,QAAQiB,WAEtFpC,EAAOtW,UAAUmZ,eAAiB,WACZ,YAAd/vB,KAAK0I,OACL1I,KAAK8pB,SAAY9pB,KAAKsO,cAAc,OAAS0F,OAASwI,MAAOgN,GAAWM,YACxE9pB,KAAKC,QAAQ6O,YAAY9O,KAAK8pB,UAC1B9pB,KAAK0tB,MAAsB,UAAd1tB,KAAK0I,OACO,eAArB1I,KAAKoxB,YACLpxB,KAAK8pB,SAAS/lB,UAAUxB,IAAIinB,GAAWwD,gBAGvChtB,KAAK8pB,SAAS/lB,UAAUxB,IAAIinB,GAAWyD,iBAKvDC,EAAOtW,UAAUoZ,eAAiB,WAC9B,GAAIqB,GAAsC,UAAdrxB,KAAK0I,KAAmB8gB,GAAWqD,gBAC3DrD,GAAWsD,aACfuE,IAAyB,IAAM7H,GAAWoD,OAC1C5sB,KAAK8sB,cAAiB9sB,KAAKsO,cAAc,OACrC0F,OAASwI,MAAO6U,KAEpBrxB,KAAKC,QAAQ6O,YAAY9O,KAAK8sB,eACZ,UAAd9sB,KAAK0I,OACL1I,KAAK+sB,eAAkB/sB,KAAKsO,cAAc,OACtC0F,OACIwI,MAAOgN,GAAWuD,eAAiB,IAAMvD,GAAWoD,UAG5D5sB,KAAKC,QAAQ6O,YAAY9O,KAAK+sB,kBAGtCG,EAAOtW,UAAUqZ,eAAiB,WACL,aAArBjwB,KAAKoxB,aACLpxB,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAWgC,gBACjDxrB,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAWiC,kBAC9CzrB,KAAKsxB,YAAYniB,aAAa,mBAAoB,cAChC,UAAdnP,KAAK0I,MACL1I,KAAKuxB,aAAapiB,aAAa,mBAAoB,gBAIvDnP,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAWiC,kBACjDzrB,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAWgC,gBAC9CxrB,KAAKsxB,YAAYniB,aAAa,mBAAoB,YAChC,UAAdnP,KAAK0I,MACL1I,KAAKuxB,aAAapiB,aAAa,mBAAoB,cAI/D+d,EAAOtW,UAAU4a,kBAAoB,SAAUvxB,GAC3C,GAAIsF,GAAQvF,KACRyd,EAAMzd,KAAKyd,IACXE,EAAM3d,KAAK2d,KACVjc,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,IACpE4c,EAAMzd,KAAKyxB,aAAa,GACxB9T,EAAM3d,KAAKyxB,aAAazxB,KAAKyxB,aAAa5wB,OAAS,IAErC,UAAdb,KAAK0I,KACL3I,aAAWE,GACP6d,gBAAiBL,EAAIM,WAAYC,gBAAiBL,EAAII,eAI7Crc,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,IAC1E4c,EAAIM,WAAa/d,KAAKyxB,aAAazxB,KAAKoC,MAAM,IAAK2b,aAC/C/d,KAAKyxB,aAAazxB,KAAKoC,MAAM,IAAK2b,WAAYJ,EAAII,eACtDN,EAAIM,WAAY/d,KAAKoC,MAAM,GAAG2b,aAAc/d,KAAKoC,MAAM,GAAG2b,WAAYJ,EAAII,cAC1E2T,QAAQ,SAAUC,EAAOzoB,GAC3B,GAAIjJ,GAAoB,IAAViJ,EAAc3D,EAAM+rB,YAAc/rB,EAAMgsB,YAClDtxB,IACAF,aAAWE,GACP6d,gBAAiB6T,EAAM,GAAI3T,gBAAiB2T,EAAM,QAMtEzE,EAAOtW,UAAUgb,mBAAqB,WAClC5xB,KAAKuxB,aAAevxB,KAAKsO,cAAc,OACnC0F,OACIwI,MAAOgN,GAAWK,aAAc3pB,KAAQ,SAAU0vB,SAAU,OAGpE5vB,KAAKuxB,aAAaxtB,UAAUxB,IAAIinB,GAAWiB,oBAC3CzqB,KAAKC,QAAQ6O,YAAY9O,KAAKuxB,eAElCrE,EAAOtW,UAAUib,kBAAoB,WACjC7xB,KAAKsxB,YAActxB,KAAKsO,cAAc,OAClC0F,OACIwI,MAAOgN,GAAWK,aAAc3pB,KAAQ,SAAU0vB,SAAU,OAGpE5vB,KAAKsxB,YAAYvtB,UAAUxB,IAAIinB,GAAWgB,mBAC1CxqB,KAAKC,QAAQ6O,YAAY9O,KAAKsxB,aAC1BtxB,KAAKmxB,oBACLnxB,KAAK8xB,eAAiB9xB,KAAKsO,cAAc,OACrC0F,OACIwI,MAAOgN,GAAWK,aAAe,IAC7BL,GAAW+C,wBAGvBvsB,KAAKC,QAAQ6O,YAAY9O,KAAK8xB,kBAGtC5E,EAAOtW,UAAUmb,mBAAqB,SAAU7L,GACvCA,GAOD5jB,eAAakB,OAAOxD,KAAKsxB,YAAa,uBAAwBtxB,KAAKgyB,aACnE1vB,eAAakB,OAAOxD,KAAKsxB,YAAa,gBAAiBtxB,KAAKiyB,eAC5D3vB,eAAakB,OAAOxD,KAAKsxB,YAAa,wBAAyBtxB,KAAKkyB,YACpE5vB,eAAakB,OAAOxD,KAAKsxB,YAAa,sBAAuBtxB,KAAKmyB,eATlE7vB,eAAaC,IAAIvC,KAAKsxB,YAAa,uBAAwBtxB,KAAKgyB,YAAahyB,MAC7EsC,eAAaC,IAAIvC,KAAKsxB,YAAa,gBAAiBtxB,KAAKiyB,cAAejyB,MACxEsC,eAAaC,IAAIvC,KAAKsxB,YAAa,wBAAyBtxB,KAAKkyB,WAAYlyB,MAC7EsC,eAAaC,IAAIvC,KAAKsxB,YAAa,sBAAuBtxB,KAAKmyB,YAAanyB,QASpFktB,EAAOtW,UAAUwb,oBAAsB,SAAUlM,GACxCA,GAOD5jB,eAAakB,OAAOxD,KAAKuxB,aAAc,uBAAwBvxB,KAAKgyB,aACpE1vB,eAAakB,OAAOxD,KAAKuxB,aAAc,gBAAiBvxB,KAAKiyB,eAC7D3vB,eAAakB,OAAOxD,KAAKuxB,aAAc,wBAAyBvxB,KAAKkyB,YACrE5vB,eAAakB,OAAOxD,KAAKuxB,aAAc,sBAAuBvxB,KAAKmyB,eATnE7vB,eAAaC,IAAIvC,KAAKuxB,aAAc,uBAAwBvxB,KAAKgyB,YAAahyB,MAC9EsC,eAAaC,IAAIvC,KAAKuxB,aAAc,gBAAiBvxB,KAAKiyB,cAAejyB,MACzEsC,eAAaC,IAAIvC,KAAKuxB,aAAc,wBAAyBvxB,KAAKkyB,WAAYlyB,MAC9EsC,eAAaC,IAAIvC,KAAKuxB,aAAc,sBAAuBvxB,KAAKmyB,YAAanyB,QASrFktB,EAAOtW,UAAUyb,YAAc,WACT,UAAdryB,KAAK0I,OACL1I,KAAKsxB,YAAYvtB,UAA8B,IAApB/D,KAAKsyB,WAAmB,MAAQ,UAAU9I,GAAWkC,mBAC5E1rB,KAAKmxB,oBACLnxB,KAAK8xB,eAAe/tB,UAA8B,IAApB/D,KAAKsyB,WAAmB,MAAQ,UAAU9I,GAAWkC,mBAC/E1rB,KAAKuvB,gBACLvvB,KAAKuvB,eAAexrB,UAA8B,IAApB/D,KAAKsyB,WAAmB,MAAQ,UAAU9I,GAAWmC,uBAKnGuB,EAAOtW,UAAUqb,cAAgB,SAAUpuB,GAChB,cAAnBA,EAAE0uB,eACFvyB,KAAKqyB,cACLryB,KAAKwyB,YAAYvf,MAAMoa,WAAa,OAClB,YAAdrtB,KAAK0I,OACL1I,KAAK8pB,SAAS7W,MAAMoa,WAAa,QAEjCrtB,KAAK8wB,YAAc9wB,KAAKquB,QAAQiB,WAA2B,YAAdtvB,KAAK0I,OAClD1I,KAAKuvB,eAAetc,MAAMoa,WAAartB,KAAKqtB,WAAWC,QAE3DttB,KAAKyyB,cAAczyB,KAAKwyB,aACxBxyB,KAAK0yB,iBAGbxF,EAAOtW,UAAU+b,eAAiB,WAC1B3yB,KAAKsxB,YAAYvtB,UAAUC,SAASwlB,GAAW+B,sBAC/CvrB,KAAKsxB,YAAYvtB,UAAUP,OAAOgmB,GAAW+B,qBAE/B,UAAdvrB,KAAK0I,MACD1I,KAAKuxB,aAAaxtB,UAAUC,SAASwlB,GAAW+B,sBAChDvrB,KAAKuxB,aAAaxtB,UAAUP,OAAOgmB,GAAW+B,sBAI1D2B,EAAOtW,UAAUob,YAAc,SAAUnuB,GACrC7D,KAAK4yB,qBACL5yB,KAAK6yB,eAAehvB,GAChBA,EAAEshB,gBAAkBnlB,KAAKsxB,YACzBtxB,KAAKsxB,YAAYvtB,UAAUxB,IAAIinB,GAAW+B,qBAG1CvrB,KAAKuxB,aAAaxtB,UAAUxB,IAAIinB,GAAW+B,qBAE/CjpB,eAAaC,IAAI4P,SAAU,sBAAuBnS,KAAK8yB,cAAe9yB,MACtEsC,eAAaC,IAAI4P,SAAU,mBAAoBnS,KAAK+yB,YAAa/yB,OAErEktB,EAAOtW,UAAUsb,WAAa,SAAUruB,GAChC7D,KAAKquB,QAAQiB,WAAqC,UAAxBtvB,KAAKquB,QAAQmB,QACvCxvB,KAAKyyB,cAAc5uB,EAAEshB,eAEP,YAAdnlB,KAAK0I,MACL1I,KAAKyyB,cAAczyB,KAAKwyB,cAGhCtF,EAAOtW,UAAUub,YAAc,SAAUtuB,IACjC7D,KAAKquB,QAAQiB,WAAqC,UAAxBtvB,KAAKquB,QAAQmB,QACtC3rB,EAAEshB,cAAcphB,UAAUC,SAASwlB,GAAW+B,sBAC9C1nB,EAAEshB,cAAcphB,UAAUC,SAASwlB,GAAWoC,kBAC/C5rB,KAAK0yB,gBAGbxF,EAAOtW,UAAUkZ,WAAa,WACtB9vB,KAAKyd,IAAMzd,KAAK2d,MAChB3d,KAAKyd,IAAMzd,KAAK2d,KAEpB3d,KAAK6xB,oBACa,UAAd7xB,KAAK0I,MACL1I,KAAK4xB,sBAGb1E,EAAOtW,UAAUyZ,aAAe,WAC5BrwB,KAAKyR,WAAkC,aAArBzR,KAAKoxB,YAA6BnlB,YAAUjM,KAAK2qB,iBAAkBnB,GAAWE,KAC5F/iB,eAAa3G,KAAK2qB,iBAAkBnB,GAAWE,IACnD,IAAIsJ,GAA+B,aAArBhzB,KAAKoxB,YAA8BpxB,KAAKmtB,OAASntB,KAAKotB,MAChEptB,MAAKyR,WACLzR,KAAKmtB,OAAS,QACdntB,KAAKotB,OAAS,WAGdptB,KAAKmtB,OAAS,OACdntB,KAAKotB,OAAS,UAGd4F,KADgC,aAArBhzB,KAAKoxB,YAA8BpxB,KAAKmtB,OAASntB,KAAKotB,SAExC,eAArBptB,KAAKoxB,cACL6B,oBAAkBjzB,KAAKsxB,aAAe4B,MAAS,GAAIC,KAAQ,SACzC,UAAdnzB,KAAK0I,MACLuqB,oBAAkBjzB,KAAKuxB,cAAgB6B,IAAO,GAAID,KAAQ,UAItEnzB,KAAKqzB,eAETnG,EAAOtW,UAAU0c,aAAe,WAC5B,GACIlP,GADA7e,EAAQvF,KAER6M,GACAzK,MAAOpC,KAAKoC,MACZgiB,KAAM,GAENpkB,MAAK4tB,iBACL5tB,KAAK4tB,gBAAiB,EACtB5tB,KAAKuzB,oBACL1mB,EAAKuX,KAAOA,EAAOpkB,KAAKwzB,WAAWC,QACnCzzB,KAAKoG,QAAQ,gBAAiByG,EAAM,SAAU6mB,GAC1CnuB,EAAMouB,gBAAgBD,EAAatP,MAC/BA,IAASsP,EAAatP,OACtB7e,EAAMkoB,eAAiBiG,EAAatP,KACpC7e,EAAMiuB,WAAWC,QAAUC,EAAatP,KACxC7e,EAAMquB,iBAAiBruB,EAAM+rB,aACV,UAAf/rB,EAAMmD,MACNnD,EAAMquB,iBAAiBruB,EAAMgsB,iBAIrCvxB,KAAKmxB,mBACLnxB,KAAK6zB,eAAe,SAAU7zB,KAAKoC,SAI/C8qB,EAAOtW,UAAU2c,kBAAoB,WACjC,GAAIE,EACJA,GAAUzzB,KAAK8zB,cAAc9zB,KAAK+tB,mBAAmB,GACrD/tB,KAAKwzB,WAAWC,QAAUA,GAE9BvG,EAAOtW,UAAUkd,cAAgB,SAAUtF,EAAYuF,GACnD,GAAIN,GAAU,GACVO,EAAUh0B,KAAKi0B,WACfC,EAAUl0B,KAAKm0B,UAKnB,QAJKzyB,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,IACpEmzB,EAAUh0B,KAAKyxB,aAAazxB,KAAKi0B,YACjCC,EAAUl0B,KAAKyxB,aAAazxB,KAAKm0B,aAEhCJ,GAsBiB,UAAd/zB,KAAK0I,KAED+qB,EADAzzB,KAAKyR,WAAkC,aAArBzR,KAAKoxB,YACX1vB,oBAAkB1B,KAAKquB,UAAa3sB,oBAAkB1B,KAAKquB,QAAQ3S,QAG1EwY,EAAQnW,WAAa,MAAQiW,EAAQjW,WAFrC/d,KAAKuuB,aAAa2F,EAAS1F,GAAYG,WAAa,MACjD3uB,KAAKuuB,aAAayF,EAASxF,GAAYG,WAInCjtB,oBAAkB1B,KAAKquB,UAAa3sB,oBAAkB1B,KAAKquB,QAAQ3S,QAG1EsY,EAAQjW,WAAa,MAAQmW,EAAQnW,WAFrC/d,KAAKuuB,aAAayF,EAASxF,GAAYG,WAAa,MACjD3uB,KAAKuuB,aAAa2F,EAAS1F,GAAYG,WAK9CjtB,oBAAkBsyB,KACnBP,EAAY/xB,oBAAkB1B,KAAKquB,UAAa3sB,oBAAkB1B,KAAKquB,QAAQ3S,QACvBsY,EAAQjW,WAA5D/d,KAAKuuB,aAAayF,EAASxF,GAAYG,YAG5C8E,IAzCW,UAAdzzB,KAAK0I,KAED+qB,EADAzzB,KAAKyR,WAAkC,aAArBzR,KAAKoxB,YACX1vB,oBAAkB8sB,EAAW9S,QAEpCwY,EAAQnW,WAAa,MAAQiW,EAAQjW,WAFW/d,KAAKuuB,aAAa2F,EAAS1F,GAC3ED,aAAe,MAAQvuB,KAAKuuB,aAAayF,EAASxF,GAAYD,aAIvD7sB,oBAAkB8sB,EAAW9S,QAEpCsY,EAAQjW,WAAa,MAAQmW,EAAQnW,WAFW/d,KAAKuuB,aAAayF,EAASxF,GAC3ED,aAAe,MAAQvuB,KAAKuuB,aAAa2F,EAAS1F,GAAYD,aAKlE7sB,oBAAkBsyB,KACnBP,EAAY/xB,oBAAkB8sB,EAAW9S,QACiBsY,EAAQjW,WAA9D/d,KAAKuuB,aAAayF,EAASxF,GAAYD,cAG5CkF,IA0BfvG,EAAOtW,UAAU+c,gBAAkB,SAAUF,GACzC,GAAIzzB,KAAKmxB,kBAAmB,CACxB,GAAIiD,GAAQX,EAAQ1V,WAAWld,MAC/B,IAAKb,KAAKuvB,eAIL,CACGje,EAAW8iB,EAAQ,GACjBC,OAAQ7K,GAAWiD,sBAAuB6H,OAAQ9K,GAAWgD,sBAC7D6H,OAAQ7K,GAAWgD,oBAAqB8H,OAAQ9K,GAAWiD,sBACjEzsB,MAAKuvB,eAAexrB,UAAUP,OAAO8N,EAAS+iB,QACzCr0B,KAAKuvB,eAAexrB,UAAUC,SAASsN,EAASgjB,UACjDt0B,KAAKuvB,eAAexrB,UAAUxB,IAAI+O,EAASgjB,QAC3Ct0B,KAAKuvB,eAAetc,MAAMshB,UAAYH,EAAQ,EAAI,WAC9Cp0B,KAAKw0B,8BAA8Bx0B,KAAKy0B,sBAAsBC,YAZhD,CACtB,GAAIpjB,GAAW8iB,EAAQ,EAAI5K,GAAWgD,oBAAsBhD,GAAWiD,qBACvEzsB,MAAKwzB,WAAWliB,SAAWkY,GAAWc,cAAgB,IAAMhZ,KAexE4b,EAAOtW,UAAU+d,iBAAmB,WAChC,MAA4B,eAArB30B,KAAKoxB,YAA2D,WAA3BpxB,KAAKquB,QAAQsC,UAAyB,YAAc,eAChE,WAA3B3wB,KAAKquB,QAAQsC,UAAyB,aAAe,eAE9DzD,EAAOtW,UAAUge,kBAAoB,SAAU/nB,GAC3C7M,KAAKuvB,eAAiB1iB,EAAK5M,QACvBD,KAAKquB,QAAQ/c,UACbrF,YAAUjM,KAAKuvB,gBAAiBvvB,KAAKquB,QAAQ/c,SAAS3Q,MAAM,KAAKk0B,OAAO,SAAUC,GAAO,MAAOA,MAEpGjoB,EAAKmK,OAAOpG,gBAAgB,oBACxB5Q,KAAKmxB,oBACLnxB,KAAKuvB,eAAewF,kBAAkBhxB,UAAUxB,IAAIinB,GAAWmD,qBAC/D3sB,KAAKqyB,cACLryB,KAAKg1B,wBAGb9H,EAAOtW,UAAUqe,iBAAmB,SAAUzf,GAC1C,GAAIxV,KAAK+wB,aAAe/wB,KAAKgxB,cAAiBhxB,KAAK8wB,aAAe9wB,KAAKmxB,kBAAoB,CACvF,GAAI+D,GAAqBl1B,KAAKgxB,aArpBZ,EADD,CAupBjB,QAAQxb,GACJ,IAAK,YACDxV,KAAKwzB,WAAWha,eAAgB2b,aAAoC,EACpE,MACJ,KAAK,eACDn1B,KAAKwzB,WAAWha,eAAgB2b,QAAWD,IAAsB,EACjE,MACJ,KAAK,aACDl1B,KAAKwzB,WAAWha,eAAgB4b,aAAoC,EACpE,MACJ,KAAK,cACDp1B,KAAKwzB,WAAWha,eAAgB4b,QAAWF,IAAsB,MAKjFhI,EAAOtW,UAAUye,6BAA+B,SAAUnxB,GACtDlE,KAAK6yB,eAAe3uB,GACpB5B,eAAaC,IAAI4P,SAAU,sBAAuBnS,KAAK8yB,cAAe9yB,MACtEsC,eAAaC,IAAI4P,SAAU,mBAAoBnS,KAAK+yB,YAAa/yB,OAErEktB,EAAOtW,UAAU0e,yBAA2B,SAAUpP,GAC9ClmB,KAAKmxB,oBACAjL,EAID5jB,eAAakB,OAAOxD,KAAKuvB,eAAgB,uBAAwBvvB,KAAKq1B,8BAHtE/yB,eAAaC,IAAIvC,KAAKuvB,eAAgB,uBAAwBvvB,KAAKq1B,6BAA8Br1B,QAO7GktB,EAAOtW,UAAU2e,2BAA6B,SAAU/f,GACpD,GAAIlE,EACJ,QAAQkE,GACJ,IAAK,YACDlE,EAAWkY,GAAWoB,uBACtB,MACJ,KAAK,eACDtZ,EAAWkY,GAAWqB,sBACtB,MACJ,KAAK,aACDvZ,EAAWkY,GAAWsB,qBACtB,MACJ,KAAK,cACDxZ,EAAWkY,GAAWuB,qBAG9B,MAAOzZ,IAEX4b,EAAOtW,UAAU4d,8BAAgC,SAAUlkB,GACvD,GAAIklB,EACJ,IAAIx1B,KAAKuvB,eAAgB,CACrB,GAAI/Z,GAAgC,eAArBxV,KAAKoxB,YACdpxB,KAAKuvB,eAAekG,aAAe,GAAOz1B,KAAKuvB,eAAekG,aAAe,EAC7Ez1B,KAAKuvB,eAAemG,YAAc,GAAO11B,KAAKuvB,eAAemG,YAAc,CACjFF,GAA2C,eAArBx1B,KAAKoxB,YACtB9gB,IAAckZ,GAAWoB,yBAA4B8J,OAAQ,gBAAiBiB,UAAW,cAAgBngB,EAAW,QAC/Gkf,OAAQ,iBAAkBiB,UAAW,iBAA8B,OACxErlB,IAAckZ,GAAWsB,uBAA0B4J,OAAQ,iBAAkBiB,UAAW,cAAgBngB,EAAW,QAC9Gkf,OAAQ,kBAAmBiB,UAAW,eAAkBngB,EAAY,OAElF,MAAOggB,IAEXtI,EAAOtW,UAAUgf,oBAAsB,WACnC,GAAIrwB,GAAQvF,IACZ,IAAIA,KAAKmxB,kBAAmB,CACxBnxB,KAAK61B,eAAe71B,KAAKsxB,YACzB,IAAIwE,GAAwB91B,KAAKuvB,eAAewF,iBAChDe,GAAsB/xB,UAAUP,OAAOgmB,GAAWmD,qBAClDmJ,EAAsB/xB,UAAUxB,IAAIinB,GAAWkD,qBAC/C1sB,KAAKsxB,YAAYre,MAAM8iB,OAAS,UAChC/1B,KAAKuvB,eAAetc,MAAMoa,WAAartB,KAAKwtB,eAC5CxtB,KAAKuvB,eAAexrB,UAAUxB,IAAIinB,GAAWyB,qBAC7CjrB,KAAK8xB,eAAe7e,MAAMshB,UAAY,WAClCuB,EAAsBplB,UAAU7P,OAAS,EACzCb,KAAKuvB,eAAetc,MAAMshB,UAAY,WAGtCv0B,KAAKuvB,eAAetc,MAAMshB,UAAYv0B,KAAKw0B,8BAA8Bx0B,KAAKy0B,sBAAsBC,OAEtF,YAAd10B,KAAK0I,KACLxC,WAAW,WAAcX,EAAMgqB,eAAetc,MAAMoa,WAAa9nB,EAAM8nB,WAAWC,QAAW,MAG7FpnB,WAAW,WAAcX,EAAMgqB,eAAetc,MAAMoa,WAAa,QAAW,QAIxFH,EAAOtW,UAAUof,qBAAuB,WACpC,GAAIzwB,GAAQvF,IACZ,IAAIA,KAAKmxB,kBAAmB,CACxB,GAAI2E,GAAwB91B,KAAKuvB,eAAewF,iBAChD/0B,MAAKuvB,eAAetc,MAAMoa,WAAartB,KAAKwtB,eAC5CsI,EAAsB/xB,UAAUP,OAAOgmB,GAAWkD,qBAClDoJ,EAAsB/xB,UAAUxB,IAAIinB,GAAWmD,qBAC/C3sB,KAAKsxB,YAAYre,MAAM8iB,OAAS,eAChC/1B,KAAKsxB,YAAYre,MAAM8iB,OAAS,OAC5B/1B,KAAK8xB,iBACL9xB,KAAK8xB,eAAe7e,MAAMshB,UAAY,YAE1Cv0B,KAAKuvB,eAAexrB,UAAUP,OAAOgmB,GAAWyB,qBAChDjrB,KAAKg1B,sBACLh1B,KAAKi2B,kBAAgB5wB,GACrBa,WAAW,WAAcX,EAAMgqB,eAAetc,MAAMoa,WAAa,QAAW,QAGpFH,EAAOtW,UAAUsf,qBAAuB,SAAUrpB,GAC9C,GAAIspB,GAAen2B,KAAKu1B,2BAA2B1oB,EAAKupB,sBACnB/wB,KAAjCrF,KAAKq2B,yBACLr2B,KAAKq2B,0BAA4BxpB,EAAKupB,kBAAqBvpB,EAAK5M,QAAQ8D,UAAUC,SAASmyB,KACvFn2B,KAAKmxB,wBACgB9rB,KAAjB8wB,IACAtpB,EAAK5M,QAAQ8D,UAAUP,OAAOxD,KAAKy0B,sBACnC5nB,EAAK5M,QAAQ8D,UAAUxB,IAAI4zB,GAC3Bn2B,KAAKy0B,qBAAuB0B,GAE5BtpB,EAAK5M,QAAQgT,MAAMshB,WAAa1nB,EAAK5M,QAAQ8D,UAAUC,SAASwlB,GAAWyB,sBAC3Epe,EAAK5M,QAAQ80B,kBAAkBrkB,UAAU7P,QAAU,IACnDgM,EAAK5M,QAAQgT,MAAMshB,UAAYv0B,KAAKw0B,8BAA8Bx0B,KAAKy0B,sBAAsBC,SAGrG10B,KAAKq2B,wBAA0BxpB,EAAKupB,kBAEpCp2B,KAAKmxB,mBAAqBnxB,KAAKuvB,iBAAgF,IAA9DvvB,KAAKuvB,eAAetc,MAAMshB,UAAUloB,QAAQ,cAC7FrM,KAAKg1B,uBAGb9H,EAAOtW,UAAUoe,oBAAsB,WACnC,GAAIQ,GAAsBx1B,KAAKw0B,8BAA8Bx0B,KAAKy0B,qBAC9Dz0B,MAAKuvB,eAAewF,kBAAkBrkB,UAAU7P,OAAS,EACzDb,KAAKuvB,eAAetc,MAAMshB,UAAYiB,EAAoBG,UAAY,eAGtE31B,KAAKuvB,eAAetc,MAAMshB,UAAYiB,EAAoBG,UAAY,IAAMH,EAAoBd,OAAS,gBAGjHxH,EAAOtW,UAAUia,cAAgB,WAC7B7wB,KAAKwzB,WAAa,GAAI8C,YAClBC,eAAgBv2B,KAAK+wB,aAAe/wB,KAAK8wB,YAAc9wB,KAAKgxB,cAAgBhxB,KAAKixB,YAAcjxB,KAAKkxB,aACpG5f,SAAUkY,GAAWc,cACrBkM,OAAQx2B,KAAK8wB,WAAa,GAAK,OAC/B2F,WAAaC,MAAQC,OAAQ,QAAUC,OAASD,OAAQ,UAAWE,SAAU,MAC7EC,QAAS,SACTC,WAAY/2B,KAAK40B,kBAAkBoC,KAAKh3B,MACxCi3B,gBAAiBj3B,KAAKk2B,qBAAqBc,KAAKh3B,MAChDk3B,YAAal3B,KAAKm3B,mBAAmBH,KAAKh3B,MAC1Co3B,oBAAqBp3B,KAAKo3B,sBAE9Bp3B,KAAKwzB,WAAW6D,SAASr3B,KAAKsxB,aAC9BtxB,KAAKs3B,0BAETpK,EAAOtW,UAAU0gB,uBAAyB,WACtC,GAAIC,GAAgBv3B,KAAKmxB,kBAAoB,SAAoC,SAAxBnxB,KAAKquB,QAAQmB,OAAoB,QAAUxvB,KAAKquB,QAAQmB,MACjHxvB,MAAKwZ,eAAgB6U,SAAWmB,OAAQ+H,KAAmB,GAC3Dv3B,KAAKwzB,WAAWhe,SAAWxV,KAAK20B,mBAChC30B,KAAKi1B,iBAAiBj1B,KAAKwzB,WAAWhe,WACrCxV,KAAKsxB,YAAatxB,KAAK8pB,SAAU9pB,KAAKuxB,cAAcG,QAAQ,SAAUpE,GAC9D5rB,oBAAkB4rB,KACnBA,EAAOra,MAAMoa,WAAa,UAG9BrtB,KAAKmxB,oBACLnxB,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAW2B,gBAC9CnrB,KAAKszB,eACLtzB,KAAKwzB,WAAWiD,UAAUG,MAAMD,OAAS,OACzC32B,KAAKwzB,WAAWkD,KAAK12B,KAAKsxB,eAGlCpE,EAAOtW,UAAUugB,mBAAqB,WAClCn3B,KAAKuvB,mBAAiBlqB,GACtBrF,KAAKq2B,4BAA0BhxB,IAEnC6nB,EAAOtW,UAAUwZ,WAAa,WAC1BpwB,KAAKw3B,SAAWx3B,KAAKsO,cAAc,OAASgC,UAAWkZ,GAAWO,aAAe,IAAMP,GAAWQ,cAClGhqB,KAAKw3B,SAAS1oB,YAAY9O,KAAKsO,cAAc,QAAUgC,UAAWkZ,GAAWqC,oBACzE7rB,KAAKixB,YACLjxB,KAAKw3B,SAAS/wB,cAAc,QAAQ1C,UAAUxB,IAAI,WAEtDvC,KAAKw3B,SAAS5H,UAAY,EAC1B5vB,KAAKy3B,UAAYz3B,KAAKsO,cAAc,OAASgC,UAAWkZ,GAAWO,aAAe,IAAMP,GAAWS,eACnGjqB,KAAKy3B,UAAU3oB,YAAY9O,KAAKsO,cAAc,QAAUgC,UAAWkZ,GAAWqC,oBAC1E7rB,KAAKixB,YACLjxB,KAAKy3B,UAAUhxB,cAAc,QAAQ1C,UAAUxB,IAAI,WAEvDvC,KAAKy3B,UAAU7H,UAAY,EAC3B5vB,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAW0C,mBAC9ClsB,KAAK2qB,gBAAgB7b,YAAY9O,KAAKw3B,UACtCx3B,KAAK2qB,gBAAgB7b,YAAY9O,KAAKy3B,WACtCz3B,KAAK2qB,gBAAgB7b,YAAY9O,KAAKC,SACtCD,KAAK03B,eAETxK,EAAOtW,UAAU8gB,YAAc,WAC3B,GAAIC,GAAa33B,KAAKyR,WAAkC,aAArBzR,KAAKoxB,WACxCpxB,MAAKoZ,KAAK4N,UAAUhnB,KAAKsZ,OACzB,IAAIH,GAAiBnZ,KAAKoZ,KAAKG,YAAY,kBACvCL,EAAiBlZ,KAAKoZ,KAAKG,YAAY,iBAC3CxZ,cAAW43B,EAAa33B,KAAKy3B,UAAYz3B,KAAKw3B,UAAYla,aAAcnE,EAAgBkE,MAAOlE,IAC/FpZ,aAAW43B,EAAa33B,KAAKw3B,SAAWx3B,KAAKy3B,WAAana,aAAcpE,EAAgBmE,MAAOnE,KAEnGgU,EAAOtW,UAAUghB,eAAiB,WAC1B53B,KAAK8wB,YACL9wB,KAAKwyB,YAAYzuB,UAAUP,OAAO,uBAG1C0pB,EAAOtW,UAAUihB,aAAe,SAAUhrB,GACtC,GAEIzK,GAFA01B,EAAO93B,KAAK+3B,oBACZJ,EAAa33B,KAAKyR,WAAkC,aAArBzR,KAAKoxB,WAEpCvkB,GAAKmK,OAAOnL,cAAc9H,UAAUC,SAASwlB,GAAWQ,cACrDnd,EAAKmK,OAAOjT,UAAUC,SAASwlB,GAAWQ,aAC/B5nB,EAAdu1B,EAAsB33B,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,GAC1D/d,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,IAEzDlR,EAAKmK,OAAOnL,cAAc9H,UAAUC,SAASwlB,GAAWS,eACzDpd,EAAKmK,OAAOjT,UAAUC,SAASwlB,GAAWS,iBAChC7nB,EAAdu1B,EAAsB33B,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,GAC1D/d,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,IAE9D/d,KAAK4sB,OAAOzpB,UACZf,EAAQpC,KAAKg4B,wBAAwB51B,IAErCA,GAASpC,KAAKyd,KAAOrb,GAASpC,KAAK2d,MACnC3d,KAAKi4B,kBAAkB71B,GACvBpC,KAAKyyB,cAAczyB,KAAKwyB,eAGhCtF,EAAOtW,UAAUshB,mBAAqB,SAAUrrB,GAC5CA,EAAK/I,+BACD+I,EAAKnE,qBAA0BmE,EAAKnE,OACpC1I,KAAKm4B,YAAYtrB,GACjB7M,KAAKo4B,eAAiB9S,YAAYtlB,KAAK63B,aAAab,KAAKh3B,MAAO,IAAK6M,KAG7EqgB,EAAOtW,UAAUyhB,eAAiB,WACzBr4B,KAAKwyB,YAAYzuB,UAAUC,SAAS,uBACrChE,KAAKwyB,YAAYzuB,UAAUxB,IAAI,uBAGvC2qB,EAAOtW,UAAU0hB,gBAAkB,SAAUz0B,GACzC7D,KAAKu4B,YAAY,UAAW10B,GAC5B7D,KAAK0yB,eACL5M,cAAc9lB,KAAKo4B,gBACnBp4B,KAAKwyB,YAAYngB,SAErB6a,EAAOtW,UAAU4hB,kBAAoB,SAAUC,GAC3C,GAAIC,GAAY,CAehB,QAdKh3B,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,IAChE43B,EAAS,IACTC,EAAY,GAEZD,EAAS,IACTC,EAAY,GAEZD,EAAS,KACTC,EAAY,GAEZD,EAAS,KACTC,EAAY,IAGbA,GAGXxL,EAAOtW,UAAUga,YAAc,WAC3B,GACI+H,GAA6B,aAArB34B,KAAKoxB,YAA6B,IAAM,GACpDpxB,MACK6uB,aAAe7uB,KAAKijB,iBAAiBjjB,KAAKqe,MAC/Cre,KAAK44B,GAAK54B,KAAKsO,cAAc,MACzBgC,UAAWkZ,GAAWU,MAAQ,MAAayO,EAAQ,UAAYnP,GAAWW,KAAO,IAAMnqB,KAAKsuB,MAAMqC,UAAUpkB,cAC5GyH,OAAS9T,KAAM,eAAgB0vB,SAAU,KAAMiJ,cAAe,UAElE74B,KAAK44B,GAAG3lB,MAAM6lB,OAAS,KACnBtxB,UAAQkD,WAAuB,MAAViuB,GACrB34B,KAAK44B,GAAG70B,UAAUxB,IAAIinB,GAAWuC,mBAErC,IAAIgN,GAAY/4B,KAAKsuB,MAAMyK,SACtB/4B,MAAKsuB,MAAM0K,eAIPD,GAAa,IAClBA,EAAY1X,WAAWnO,aAAWlT,KAAKqe,QAJX0a,EAA5B/4B,KAAKsuB,MAAM2K,UAAY,EAAiBj5B,KAAKsuB,MAAM2K,UACjC5X,WAAWnO,aAAWlT,KAAK2d,MAAU0D,WAAWnO,aAAWlT,KAAKyd,KAKtF,IAAIA,GAAMzd,KAAK4uB,oBAAoB5uB,KAAKyd,KACpCE,EAAM3d,KAAK4uB,oBAAoB5uB,KAAK2d,KACpCub,EAAQl5B,KAAK4uB,oBAAoBmK,GACjCN,GAAU/2B,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,GAAKb,KAAKyxB,aAAa5wB,OAAS,EAC7Gs4B,EAAan5B,KAAKw4B,kBAAkBC,GACpCrE,GAAS1yB,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,EAC3E43B,EAASU,EAAcV,EAAShW,KAAK2W,KAAKzb,EAAMF,GAAOyb,EAC5Dl5B,MAAKC,QAAQ6O,YAAY9O,KAAK44B,GAC9B,IAAIS,GACAC,EAAQjY,WAAWrhB,KAAKyd,IAAIM,WAClB,OAAV4a,IACAW,EAAQjY,WAAWrhB,KAAK2d,IAAII,YAEhC,IACIwb,GADApG,EAAO,EAEPqG,EAAY,IAAMpF,CAClBoF,KAAcC,EAAAA,IACdD,EAAY,EAEhB,KAAK,GAAI54B,GAAI,EAAG84B,GAAKh4B,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,EACpFb,KAAKyxB,aAAa5wB,OAAS,EAAI,EAAGmE,EAAI,EAAGpE,GAAKwzB,EAAOxzB,IAAK,CAO1D,GANAy4B,EAAMr5B,KAAKsO,cAAc,MACrB0F,OACIwI,MAAOgN,GAAWW,KAAMjqB,KAAM,eAAgB0vB,SAAU,KACxDiJ,cAAe,WAGlBn3B,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,GACpE04B,EAAc34B,GAAKu4B,EAAa,IAAO,KAErB,MAAVR,GACAW,EAAQt5B,KAAKyxB,aAAazsB,GAC1BA,MAGAs0B,EAAQt5B,KAAKyxB,aAAaiI,GAC1BA,KAEJL,EAAGlqB,aAAa,QAASmqB,EAAMvb,iBAKnC,IADAsb,EAAGlqB,aAAa,QAASmqB,EAAMvb,YACS,IAApC/d,KAAKijB,iBAAiBjjB,KAAK2d,MAAkD,IAApC3d,KAAKijB,iBAAiBjjB,KAAKyd,MAC/B,IAArCzd,KAAKijB,iBAAiBjjB,KAAKqe,MAEvBkb,EADU,MAAVZ,GACgBW,EAAQjY,WAAWrhB,KAAKyd,IAAIM,aAAe/d,KAAKsuB,MAAM2K,WAAc,EAGrExW,KAAK2W,IAAIE,EAAQjY,WAAWrhB,KAAK2d,IAAII,aAAe/d,KAAKsuB,MAAM2K,WAAc,MAG/F,CACD,GAAIU,GAAY35B,KAAK4uB,oBAAoB5uB,KAAKsuB,MAAM2K,WAChD/wB,EAAalI,KAAK4uB,oBAAoB0K,EAEtCC,GADU,MAAVZ,GACgBzwB,EAAauV,GAAOkc,GAAc,EAGnClX,KAAK2W,IAAIlxB,EAAamZ,WAAW1D,EAAII,aAAe4b,GAAc,EAIzFJ,GACAF,EAAGt1B,UAAUxB,IAAIinB,GAAWY,OAErB,MAAVuO,EAAkBU,EAAGpmB,MAAMD,MAAQwmB,EAAY,IAAQH,EAAGpmB,MAAMujB,OAASgD,EAAY,GACtF,IAAII,GAASL,EAAwC,SAAzBv5B,KAAKsuB,MAAMqC,UAAuB,EAAI,EAAK,CACvE,IAAI4I,EACA,IAAK,GAAIx4B,GAAI,EAAGA,EAAI64B,EAAQ74B,IACxBf,KAAK65B,WAAWR,EAAIC,EAAOE,OAG1B93B,qBAAkB1B,KAAKyxB,eAC5BzxB,KAAK85B,iBAAiBT,EAAIC,EAE9Bt5B,MAAK44B,GAAG9pB,YAAYuqB,GACpBr5B,KAAK8tB,sBAAsB1sB,KAAKi4B,EAChC,IAAIU,OAAgB,EAChBr4B,qBAAkB1B,KAAKyxB,gBAEnBsI,EADA/5B,KAAKijB,iBAAiB8V,GAAa/4B,KAAKijB,iBAAiBqW,GACzCt5B,KAAKijB,iBAAiB8V,GAGtB/4B,KAAKijB,iBAAiBqW,GAGtCA,EADU,MAAVX,EACQ34B,KAAK0uB,gBAAgB4K,EAAQP,EAAWgB,GAGxC/5B,KAAK0uB,gBAAgB4K,EAAQP,EAAWgB,GAEpD5G,EAAOnzB,KAAK0uB,gBAAgByE,EAAO4F,EAAWgB,IAGtD/5B,KAAKg6B,eAAerB,EAAOa,IAE/BtM,EAAOtW,UAAUojB,eAAiB,SAAUrB,EAAOa,EAAWS,OACrC,KAAjBA,IAA2BA,GAAe,GAC9Cj6B,KAAKk6B,WAAal6B,KAAK44B,GAAG7D,kBAC1B/0B,KAAKm6B,UAAYn6B,KAAK44B,GAAGwB,iBACzBp6B,KAAKk6B,WAAWn2B,UAAUxB,IAAIinB,GAAWwC,iBACzChsB,KAAKm6B,UAAUp2B,UAAUxB,IAAIinB,GAAWyC,gBACxCjsB,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAWU,MAAQ,IAAMlqB,KAAKsuB,MAAMqC,UAAUpkB,eACnE,MAAVosB,GACA34B,KAAKk6B,WAAWjnB,MAAMD,MAAQwmB,EAAY,EAAI,IAC9Cx5B,KAAKm6B,UAAUlnB,MAAMD,MAAQwmB,EAAY,EAAI,MAG7Cx5B,KAAKk6B,WAAWjnB,MAAMujB,OAASgD,EAAY,EAAI,IAC/Cx5B,KAAKm6B,UAAUlnB,MAAMujB,OAASgD,EAAY,EAAI,IAElD,IAAI5zB,IAAcy0B,aAAcr6B,KAAK44B,GAAI0B,aAAct6B,KAAK8tB,sBACxDmM,IACAj6B,KAAKoG,QAAQ,gBAAiBR,GAElC5F,KAAKu6B,kBAETrN,EAAOtW,UAAUijB,WAAa,SAAUR,EAAIC,EAAOE,GAC/C,GAAIgB,GAAOx6B,KAAKsO,cAAc,QAC1BgC,UAAWkZ,GAAWa,UAAY,IAAMb,GAAWW,KAAO,IAAMnqB,KAAKsuB,MAAMqC,UAAUpkB,cACrFyH,OAAS9T,KAAM,eAAgB0vB,SAAU,KAAMiJ,cAAe,SAElEQ,GAAGvqB,YAAY0rB,GACX94B,oBAAkB1B,KAAKyxB,cACvBzxB,KAAK85B,iBAAiBT,EAAIC,EAAOkB,EAAMhB,GAGnCx5B,KAAKo3B,oBACLoD,EAAK7nB,UAAY8nB,qBAAmBC,SAASpB,EAAMvb,YAGnDyc,EAAK7nB,UAAY2mB,EAAMvb,YAInCmP,EAAOtW,UAAUkjB,iBAAmB,SAAUT,EAAIC,EAAOqB,EAAanB,GAClE,GAAIj0B,GAAQvF,KACR46B,EAAW56B,KAAKqjB,aAAaiW,GAG7B1zB,GAAcxD,MAAOk3B,EAAOlV,KAFpB1iB,oBAAkB1B,KAAKsuB,QAAW5sB,oBAAkB1B,KAAKsuB,MAAM5S,QACTkf,EAA9D56B,KAAKuuB,aAAa+K,EAAOt5B,KAAKguB,iBAAiBO,aACPsM,YAAaxB,EACzDr5B,MAAKoG,QAAQ,iBAAkBR,EAAW,SAAU8tB,GAChD2F,EAAGlqB,aAAa,QAASukB,EAAatP,KAAKrG,YACvC4c,IACIp1B,EAAM6xB,oBACNuD,EAAYhoB,UAAY8nB,qBAAmBC,SAAShH,EAAatP,KAAKrG,YAGtE4c,EAAYhoB,UAAY+gB,EAAatP,KAAKrG,eAK1DmP,EAAOtW,UAAU2jB,eAAiB,WAC9Bv6B,KAAK86B,mBAIO96B,MAAKoxB,WACQ,cAArBpxB,KAAKoxB,YACJpxB,KAAKC,QAAQ86B,wBAAwB/nB,OAAS,GAC3ChT,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAWsC,iBAC9C9rB,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAWsC,iBAGpD9rB,KAAKC,QAAQ86B,wBAAwBvE,QAAU,GAC5Cx2B,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAWsC,iBAC9C9rB,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAWsC,kBAG7DoB,EAAOtW,UAAUkkB,kBAAoB,WACjC96B,KAAKk6B,WAAal6B,KAAKC,QAAQwG,cAAc,MAAMmM,SAAS,EAC5D,IACIsnB,GACAc,EAFAC,EAAQj7B,KAAKk6B,WAAWa,wBAGxBhC,EAAY/4B,KAAKsuB,MAAMyK,UACvB3E,EAAQ3R,KAAK2W,IAAK/X,WAAWnO,aAAWlT,KAAK2d,MAAU0D,WAAWnO,aAAWlT,KAAKyd,OAAUsb,CAC5F/4B,MAAKk6B,WAAWtnB,SAAS/R,OAAS,IAClCq5B,EAAal6B,KAAKk6B,WAAWtnB,SAAS,GAAGmoB,wBAE7C,IAEIG,GAFAZ,GAAgBt6B,KAAK2qB,gBAAgB5V,iBAAiB,IAAMyU,GAAWW,KAAO,IAC1EX,GAAWY,MAAQ,KAAOZ,GAAWa,WAGzC6Q,GADyB,SAAzBl7B,KAAKsuB,MAAMqC,aACAwK,MAAMl6B,KAAKq5B,EAAa,GAAI,MAG5Ba,MAAMl6B,KAAKq5B,EAAa,GAAI,EAI3C,KAAK,GAFDd,GAAiC,aAArBx5B,KAAKoxB,YACD,EAAf6J,EAAMzE,OAA6B,EAAdyE,EAAMjoB,MACvBpS,EAAI,EAAGA,EAAIZ,KAAKk6B,WAAWtnB,SAAS/R,OAAQD,IACxB,aAArBZ,KAAKoxB,YACLpxB,KAAKk6B,WAAWtnB,SAAShS,GAAGqS,MAAMmgB,KAAQ8G,EAAW1D,OAAS,EAAK,KAG9Dx2B,KAAKyR,UAINzR,KAAKk6B,WAAWtnB,SAAShS,GAAGqS,MAAMkgB,MAAQqG,EACtCx5B,KAAKk6B,WAAWtnB,SAAShS,GAAGm6B,wBAAwB/nB,OAAS,EAAI,KAJrEhT,KAAKk6B,WAAWtnB,SAAShS,GAAGqS,MAAMkgB,MAAS+G,EAAWlnB,MAAQ,EAAK,IAQ/E,KAASpS,EAAI,EAAGA,EAAIs6B,EAAMr6B,OAAQD,IAC9Bo6B,EAAaE,EAAMt6B,GAAGm6B,wBACG,aAArB/6B,KAAKoxB,YACL6B,oBAAkBiI,EAAMt6B,IAAMwyB,KAAMoG,EAAYwB,EAAWxE,QAAU,EAAI,OAGzEvD,oBAAkBiI,EAAMt6B,IAAMuyB,MAAOqG,EAAYwB,EAAWhoB,OAAS,EAAI,MAG7EhT,MAAKyR,WAAazR,KAAKm6B,UAAUvnB,SAAS/R,QAAoB,IAAVuzB,IACpDp0B,KAAKm6B,UAAUvnB,SAAS,GAAGK,MAAMkgB,MAASnzB,KAAKm6B,UAAUY,wBAAwB/nB,MAAQ,EAAK,KACjE,SAAzBhT,KAAKsuB,MAAMqC,YACX3wB,KAAKm6B,UAAUvnB,SAAS,GAAGK,MAAMkgB,MAASnzB,KAAKm6B,UAAUY,wBAAwB/nB,MAAQ,EAAK,OAGxF,IAAVohB,IACyB,eAArBp0B,KAAKoxB,cACApxB,KAAKyR,WAKNzR,KAAKk6B,WAAWn2B,UAAUP,OAAOgmB,GAAWyC,gBAC5CjsB,KAAKk6B,WAAWjnB,MAAMigB,MAAQlzB,KAAKsxB,YAAYre,MAAMigB,MACrDlzB,KAAKk6B,WAAWtnB,SAAS,GAAGK,MAAMkgB,KAC7BnzB,KAAKk6B,WAAWa,wBAAwB/nB,MAAQ,EAAK,EAAI,KACjC,SAAzBhT,KAAKsuB,MAAMqC,YACX3wB,KAAKk6B,WAAWtnB,SAAS,GAAGK,MAAMkgB,KAC7BnzB,KAAKk6B,WAAWa,wBAAwB/nB,MAAQ,EAAK,EAAI,QAVlEhT,KAAKk6B,WAAWn2B,UAAUP,OAAOgmB,GAAWyC,gBAC5CjsB,KAAKk6B,WAAWjnB,MAAMkgB,KAAOnzB,KAAKsxB,YAAYre,MAAMkgB,OAanC,aAArBnzB,KAAKoxB,aACLpxB,KAAKk6B,WAAWn2B,UAAUP,OAAOgmB,GAAWyC,kBAIxDiB,EAAOtW,UAAUgd,iBAAmB,SAAU3zB,GAC1C,GAAIm7B,GACAC,GAAqB35B,oBAAkB1B,KAAKsuB,SAAW5sB,oBAAkB1B,KAAKsuB,MAAM5S,QACpF0I,EAAQiX,EAC0Cr7B,KAAK8zB,cAAc9zB,KAAK+tB,mBAAmB,GAA7F/tB,KAAK8zB,cAAc9zB,KAAKguB,iBAAiB,GACzCsN,EAAWD,EAAkBr7B,KAAK8zB,cAAc9zB,KAAKguB,iBAAiB,GACtEhuB,KAAK8zB,cAAc9zB,KAAK+tB,mBAAmB,EAG3CqN,GAD6B,KADjChX,EAASpkB,KAAKytB,eAA4BztB,KAAoB,kBACrDW,MAAM,OAAOE,OACFujB,EAAKzjB,MAAM,QAGVyjB,EAAMA,GAE3BpkB,KAAKwxB,kBAAkBvxB,GACL,UAAdD,KAAK0I,KACL3I,aAAWE,GAAWO,gBAAiB86B,EAAUC,iBAAkBnX,IAIjEpkB,KAAKyR,UAGDxR,IAAYD,KAAKsxB,YACfvxB,aAAWE,GAAWO,gBAAiB86B,EAAS36B,MAAM,OAAO,GAAI46B,iBAAkBH,EAAc,KACjGr7B,aAAWE,GAAWO,gBAAiB86B,EAAS36B,MAAM,OAAO,GAAI46B,iBAAkBH,EAAc,KALnFn7B,IAAYD,KAAKsxB,YACnCvxB,aAAWE,GAAWO,gBAAiB86B,EAAS36B,MAAM,OAAO,GAAI46B,iBAAkBH,EAAc,KACjGr7B,aAAWE,GAAWO,gBAAiB86B,EAAS36B,MAAM,OAAO,GAAI46B,iBAAkBH,EAAc,MAM7GlO,EAAOtW,UAAUmhB,kBAAoB,WAajC,MAXkB,UAAd/3B,KAAK0I,KACqB,IAAtB1I,KAAKw7B,aACEx7B,KAAKi0B,WAGLj0B,KAAKm0B,WAITn0B,KAAKi0B,YAIpB/G,EAAOtW,UAAUohB,wBAA0B,SAAU51B,GAYjD,MAVIA,GADc,aAAdpC,KAAK0I,MAAqC,YAAd1I,KAAK0I,KACxB1I,KAAKy7B,yBAAyBr5B,EAAOpC,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,QAAS,GAG/D,IAAtB37B,KAAKw7B,aACIx7B,KAAKy7B,yBAAyBr5B,EAAOpC,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,QAAS,GAGhF37B,KAAKy7B,yBAAyBr5B,EAAOpC,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOiP,QAAS,IAKrG3O,EAAOtW,UAAUgc,mBAAqB,WAC7B5yB,KAAK6tB,mBACN7tB,KAAKC,QAAQoS,QACbrS,KAAK6tB,kBAAmB,IAGhCX,EAAOtW,UAAUuhB,YAAc,SAAUtrB,GACrC7M,KAAK4yB,oBACL,IAAIxwB,GACAu1B,EAAa33B,KAAKyR,WAAkC,aAArBzR,KAAKoxB,YACpC0G,EAAO93B,KAAK+3B,mBACM,MAAjBlrB,EAAKlF,SAAqC,KAAjBkF,EAAKlF,SAC5BkF,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWQ,aAEtC5nB,EAAdu1B,EAAsB33B,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,GAC1D/d,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,GAEvC,KAAjBlR,EAAKlF,SAAqC,KAAjBkF,EAAKlF,SACpCkF,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWS,cAEnC7nB,EAAdu1B,EAAsB33B,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,GAC1D/d,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKqe,KAAKN,aAAa,GAEvC,KAAjBlR,EAAKlF,SACRkF,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWQ,aAEtC5nB,EAAdu1B,EAAsB33B,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKsuB,MAAM2K,UAAUlb,aAAa,GACrE/d,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKsuB,MAAM2K,UAAUlb,aAAa,GAElD,KAAjBlR,EAAKlF,SACXkF,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWS,cAEnC7nB,EAAdu1B,EAAsB33B,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKsuB,MAAM2K,UAAUlb,aAAa,GACrE/d,KAAKuC,IAAIu1B,EAAMzW,WAAWrhB,KAAKsuB,MAAM2K,UAAUlb,aAAa,GAElD,KAAjBlR,EAAKlF,QACXvF,EAAQif,WAAWrhB,KAAKyd,IAAIM,YAEL,KAAjBlR,EAAKlF,UACXvF,EAAQif,WAAWrhB,KAAK2d,IAAII,aAE5B/d,KAAK4sB,OAAOzpB,UACZf,EAAQpC,KAAKg4B,wBAAwB51B,IAEzCpC,KAAKi4B,kBAAkB71B,IACnBpC,KAAK8wB,YAAe9wB,KAAKquB,QAAQiB,WAChCtvB,KAAKwyB,YAAYzuB,UAAUC,SAASwlB,GAAWoC,kBAChD5rB,KAAKq4B,iBAETr4B,KAAKyyB,cAAczyB,KAAKwyB,aACxBxyB,KAAKwyB,YAAYngB,QACbxF,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWQ,cACjD1nB,eAAaC,IAAIvC,KAAKw3B,SAAU,mBAAoBx3B,KAAK87B,SAAU97B,MAEnE6M,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWS,eACjD3nB,eAAaC,IAAIvC,KAAKy3B,UAAW,mBAAoBz3B,KAAK87B,SAAU97B,OAG5EktB,EAAOtW,UAAU6b,cAAgB,SAAUzb,GACnChX,KAAKmxB,kBAEJnxB,KAAKuvB,eAAexrB,UAAUC,SAASwlB,GAAWyB,qBAClBjrB,KAAK61B,eAAe71B,KAAKsxB,aAAtDtxB,KAAK41B,sBAIR51B,KAAKuvB,eAA4CvvB,KAAK61B,eAAe7e,GAA/ChX,KAAK+7B,YAAY/kB,IAGhDkW,EAAOtW,UAAUklB,SAAW,SAAUjvB,GAC9BA,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWQ,cACjD1nB,eAAakB,OAAOxD,KAAKw3B,SAAU,mBAAoBx3B,KAAK87B,UAE5DjvB,EAAKsY,cAAcphB,UAAUC,SAASwlB,GAAWS,eACjD3nB,eAAakB,OAAOxD,KAAKy3B,UAAW,mBAAoBz3B,KAAK87B,WAGrE5O,EAAOtW,UAAUolB,YAAc,WACF,eAArBh8B,KAAKoxB,YACa,aAAdpxB,KAAK0I,MAEL1I,KAAKyR,UAAazR,KAAK8pB,SAAS7W,MAAMigB,MAAQ,MAAUlzB,KAAK8pB,SAAS7W,MAAMkgB,KAAO,MACnFF,oBAAkBjzB,KAAK8pB,UAAY9W,MAAStR,oBAAkB1B,KAAKsyB,YAAc,EAAItyB,KAAKsyB,WAAa,SAIvGtyB,KAAKyR,UAAazR,KAAK8pB,SAAS7W,MAAMigB,MAClClzB,KAAKsyB,WAAa,KAAStyB,KAAK8pB,SAAS7W,MAAMkgB,KAAOnzB,KAAKsyB,WAAa,KAC5EW,oBAAkBjzB,KAAK8pB,UAAY9W,MAAShT,KAAKi8B,WAAaj8B,KAAKsyB,WAAa,QAIlE,aAAdtyB,KAAK0I,MACL1I,KAAK8pB,SAAS7W,MAAMipB,OAAS,MAC7BjJ,oBAAkBjzB,KAAK8pB,UAAY0M,OAAU90B,oBAAkB1B,KAAKsyB,YAAc,EAAItyB,KAAKsyB,WAAa,SAGxGtyB,KAAK8pB,SAAS7W,MAAMipB,OAASl8B,KAAKsyB,WAAa,KAC/CW,oBAAkBjzB,KAAK8pB,UAAY0M,OAAUx2B,KAAKi8B,WAAaj8B,KAAKsyB,WAAa,SAI7FpF,EAAOtW,UAAUulB,sBAAwB,SAAU/5B,GAG/C,MAFAA,GAAQpC,KAAKwwB,iBAAiBpuB,GAC9BA,EAAQpC,KAAKo8B,oBAAoBh6B,IAGrC8qB,EAAOtW,UAAUylB,qBAAuB,SAAUC,EAAgBC,EAAgBC,EAAcC,GACnE,eAArBz8B,KAAKoxB,YACApxB,KAAKyR,WAKNzR,KAAK8sB,cAAc7Z,MAAMigB,MAAQoJ,EAAiB,KAClDt8B,KAAK8sB,cAAc7Z,MAAMD,MAASupB,EAAiBD,EAAkB,OALrEt8B,KAAK8sB,cAAc7Z,MAAMkgB,KAAOmJ,EAAiB,KACjDt8B,KAAK8sB,cAAc7Z,MAAMD,MAASupB,EAAiBD,EAAkB,OAQzEt8B,KAAK8sB,cAAc7Z,MAAMipB,OAASI,EAAiB,KACnDt8B,KAAK8sB,cAAc7Z,MAAMujB,OAAU+F,EAAiBD,EAAkB,MAExD,UAAdt8B,KAAK0I,OACoB,eAArB1I,KAAKoxB,YACApxB,KAAKyR,WAKNzR,KAAK+sB,eAAe9Z,MAAMigB,MAAQsJ,EAAe,KACjDx8B,KAAK+sB,eAAe9Z,MAAMD,MAASypB,EAAeD,EAAgB,OALlEx8B,KAAK+sB,eAAe9Z,MAAMkgB,KAAOqJ,EAAe,KAChDx8B,KAAK+sB,eAAe9Z,MAAMD,MAASypB,EAAeD,EAAgB,OAQtEx8B,KAAK+sB,eAAe9Z,MAAMipB,OAASM,EAAe,KAClDx8B,KAAK+sB,eAAe9Z,MAAMujB,OAAUiG,EAAeD,EAAgB,QAI/EtP,EAAOtW,UAAU8Z,YAAc,WAC3B,GAAkB,YAAd1wB,KAAK0I,MAAoC,aAAd1I,KAAK0I,KAAqB,CACrD,GAAIg0B,GAAgB18B,KAAKy7B,yBAAyBz7B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,QAAQ,GAAO,EACzHe,GAAe18B,KAAKm8B,sBAAsBO,EAC1C,IAAIC,GAAc38B,KAAKy7B,yBAAyBz7B,KAAK4sB,OAAO+O,OAAQ37B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,QAAQ,GAAO,EACrHgB,GAAa38B,KAAKm8B,sBAAsBQ,GACxC38B,KAAKq8B,qBAAqBK,EAAcC,OAEvC,IAAkB,UAAd38B,KAAK0I,KAAkB,CAC5B,GAAI4zB,GAAkBt8B,KAAKy7B,yBAAyBz7B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,QAAQ,GAAO,EAC3HW,GAAiBt8B,KAAKm8B,sBAAsBG,EAC5C,IAAIC,GAAkBv8B,KAAKy7B,yBAAyBz7B,KAAK4sB,OAAO+O,OAAQ37B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,QAAQ,GAAO,EACzHY,GAAiBv8B,KAAKm8B,sBAAsBI,EAC5C,IAAIC,GAAgBx8B,KAAKy7B,yBAAyBz7B,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOiP,QAAQ,GAAO,EACzHW,GAAex8B,KAAKm8B,sBAAsBK,EAC1C,IAAIC,GAAgBz8B,KAAKy7B,yBAAyBz7B,KAAK4sB,OAAOiP,OAAQ77B,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOiP,QAAQ,GAAO,EACvHY,GAAez8B,KAAKm8B,sBAAsBM,GAC1Cz8B,KAAKq8B,qBAAqBC,EAAgBC,EAAgBC,EAAcC,KAGhFvP,EAAOtW,UAAU6kB,yBAA2B,SAAUmB,EAAcjhB,EAAUC,EAAUihB,GAmBpF,MAlBIn7B,qBAAkBia,KAClBA,EAAW3b,KAAKyd,IACZ/b,oBAAkBk7B,IAAiBC,IACnCD,EAAejhB,IAGnBja,oBAAkBka,KAClBA,EAAW5b,KAAK2d,IACZjc,oBAAkBk7B,IAAiBC,IACnCD,EAAehhB,IAGnBghB,EAAejhB,IACfihB,EAAejhB,GAEfihB,EAAehhB,IACfghB,EAAehhB,IAEXghB,EAAc58B,KAAKo8B,oBAAoBQ,KAEnD1P,EAAOtW,UAAUjK,SAAW,WAexB,IAdKjL,oBAAkB1B,KAAKyxB,eAAiBzxB,KAAKyxB,aAAa5wB,OAAS,IACpEb,KAAKyd,IAAM,EACXzd,KAAK2d,IAAM3d,KAAKyxB,aAAa5wB,OAAS,EACtCb,KAAKqzB,eAETrzB,KAAKwxB,kBAAkBxxB,KAAKsxB,aAC5BtxB,KAAKi0B,WAAavyB,oBAAkB1B,KAAKoC,OAASpC,KAAKwwB,iBAAiBnP,WAAWrhB,KAAKyd,IAAIM,aACxF/d,KAAKwwB,iBAAiBnP,WAAWrhB,KAAKoC,MAAM2b,aAChD/d,KAAKsyB,WAAatyB,KAAKo8B,oBAAoBp8B,KAAKi0B,YAChDj0B,KAAK88B,cAAgB98B,KAAKsyB,WAE1B5wB,oBAAkB1B,KAAKw7B,cAA+B,UAAdx7B,KAAK0I,KAAmB1I,KAAKw7B,aAAe,EAAIx7B,KAAKw7B,aAAe,EAExGx7B,KAAKw7B,aAAex7B,KAAKw7B,aACX,YAAdx7B,KAAK0I,MAAoC,aAAd1I,KAAK0I,KAAqB,CACrD,GAAI1I,KAAK4sB,OAAOzpB,QAAS,CACrB,GAAI45B,GAAS/8B,KAAKy7B,yBAAyBz7B,KAAKi0B,WAAYj0B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,OAC9F37B,MAAKi0B,WAAa8I,EAAO,GACzB/8B,KAAKsyB,WAAayK,EAAO,GACzB/8B,KAAK88B,cAAgB98B,KAAKsyB,WAE9BtyB,KAAKg9B,kBAAkB,MACvBh9B,KAAKqyB,cACLryB,KAAKoC,MAAQpC,KAAKi0B,WAClBj0B,KAAK4zB,iBAAiB5zB,KAAKsxB,aAC3BtxB,KAAKu4B,YAAY,UAAW,UAG5Bv4B,MAAKi9B,oBAES,aAAdj9B,KAAK0I,MACL1I,KAAKg8B,cAELh8B,KAAK4sB,OAAOzpB,SACZnD,KAAK0wB,eAGbxD,EAAOtW,UAAU0Z,iBAAmB,WACb,OAAftwB,KAAKoC,OAA0C,gBAAhBpC,cAC/BA,KAAKoC,OAASif,WAAWnO,aAAWlT,KAAKyd,MAAO4D,WAAWnO,aAAWlT,KAAK2d,SAGnFuP,EAAOtW,UAAUqmB,mBAAqB,WAClCj9B,KAAKswB,mBACLtwB,KAAKk9B,iBAEThQ,EAAOtW,UAAUumB,aAAe,WACV,UAAdn9B,KAAK0I,KACqB,IAAtB1I,KAAKw7B,cACLx7B,KAAKsxB,YAAYre,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,GACpD94B,KAAKuxB,aAAate,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,KAGrD94B,KAAKsxB,YAAYre,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,GACpD94B,KAAKuxB,aAAate,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,IAGpD94B,KAAKmxB,mBAAqBnxB,KAAKuvB,iBACpCvvB,KAAKuvB,eAAetc,MAAM6lB,OAASsE,mBAAiBp9B,KAAKC,SAAW,KAG5EitB,EAAOtW,UAAUomB,kBAAoB,SAAU94B,GAC3C,GACIopB,GADA/nB,EAAQvF,KAERq9B,EAA6B,IAAtBr9B,KAAKw7B,aAAsBx7B,KAAKsyB,WAAatyB,KAAKi8B,UAEzD3O,GADAttB,KAAKmxB,mBACKnxB,KAAKsxB,YAAatxB,KAAK8xB,iBAGvB9xB,KAAKwyB,aAEnBxyB,KAAKqyB,cACL/E,EAAOoE,QAAQ,SAAUpE,GACK,eAAtB/nB,EAAM6rB,YAEN7rB,EAAMkM,UAAa6b,EAAOra,MAAMigB,MAC5BmK,EAAM,KAAS/P,EAAOra,MAAMkgB,KAAOkK,EAAM,KAG7C/P,EAAOra,MAAMipB,OAASmB,EAAM,OAGpCr9B,KAAKu4B,YAAY,SAAUr0B,IAE/BgpB,EAAOtW,UAAU4b,UAAY,WACzB,MAA8B,KAAtBxyB,KAAKw7B,aAAsBx7B,KAAKsxB,YAActxB,KAAKuxB,cAE/DrE,EAAOtW,UAAUsmB,cAAgB,WAC7Bl9B,KAAKs9B,mBACLt9B,KAAKw7B,aAAe,EACpBx7B,KAAKg9B,kBAAkB,MACvBh9B,KAAKw7B,aAAe,EACpBx7B,KAAKg9B,kBAAkB,MACvBh9B,KAAKw7B,aAAe,GAExBtO,EAAOtW,UAAU2hB,YAAc,SAAUgF,EAAW15B,GAChD,GAAIme,GAAyB,WAAdub,EAAyBv9B,KAAKuwB,YAAcvwB,KAAKywB,eAChE,IAAkB,UAAdzwB,KAAK0I,KACL1I,KAAKwZ,eAAgBpX,MAASpC,KAAKi0B,aAAc,GAC7CjS,IAAahiB,KAAKoC,OAAWpC,KAAKmxB,mBAAsBnxB,KAAK4tB,iBAC7D5tB,KAAKoG,QAAQm3B,EAAWv9B,KAAK6J,gBAAgB0zB,EAAW15B,IACxD7D,KAAK4tB,gBAAiB,EACtB5tB,KAAK6zB,eAAe0J,EAAWv9B,KAAKoC,QAExCpC,KAAK4zB,iBAAiB5zB,KAAKsxB,iBAE1B,CACD,GAAIlvB,GAAQpC,KAAKoC,OAASpC,KAAKi0B,WAAYj0B,KAAKm0B,WAChDn0B,MAAKwZ,eAAgBpX,MAASA,IAAS,IACnC4f,EAASnhB,SAAWb,KAAKoC,MAAMvB,QAC5Bb,KAAKoC,MAAM,KAAO4f,EAAS,IAAMhiB,KAAKoC,MAAM,KAAO4f,EAAS,MAC/DhiB,KAAK4tB,gBAAiB,EACtB5tB,KAAKoG,QAAQm3B,EAAWv9B,KAAK6J,gBAAgB0zB,EAAW15B,IACxD7D,KAAK4tB,gBAAiB,EACtB5tB,KAAK6zB,eAAe0J,EAAWv9B,KAAKoC,QAExCpC,KAAK4zB,iBAAiB5zB,KAAKwyB,aAE/BxyB,KAAKgb,YAAY5Y,MAAQpC,KAAKoC,MAAM2b,YAExCmP,EAAOtW,UAAU/M,gBAAkB,SAAU0zB,EAAW15B,GACpD,GAAI+B,EAoBJ,OAnBI5F,MAAKquB,QAAQiB,WAAatvB,KAAKwzB,YAAcxzB,KAAK4tB,gBAClD5tB,KAAKszB,eACL1tB,GACIxD,MAAOpC,KAAKoC,MACZie,cAA6B,WAAdkd,EAAyBv9B,KAAKuwB,YAAcvwB,KAAKywB,gBAChEnS,OAAQif,EAAWnZ,KAAMpkB,KAAKwzB,WAAWC,QAASzpB,cAActI,oBAAkBmC,KAItF+B,GACIxD,MAAOpC,KAAKoC,MACZie,cAA6B,WAAdkd,EAAyBv9B,KAAKuwB,YAAcvwB,KAAKywB,gBAChEnS,OAAQif,EAAWnZ,KAAM1iB,oBAAkB1B,KAAKguB,gBAAgBtS,QAAU1b,KAAKoC,MAAM2b,WAClE,UAAd/d,KAAK0I,KAAmB1I,KAAKuuB,aAAavuB,KAAKoC,MAAOpC,KAAKguB,iBAAiBO,aACxEvuB,KAAKuuB,aAAavuB,KAAKoC,MAAM,GAAIpC,KAAKguB,iBAAiBO,aAAe,MACnEvuB,KAAKuuB,aAAavuB,KAAKoC,MAAM,GAAIpC,KAAKguB,iBAAiBO,aACnEvkB,cAActI,oBAAkBmC,IAGjC+B,GAEXsnB,EAAOtW,UAAUid,eAAiB,SAAU0J,EAAWn7B,GACjC,WAAdm7B,EACAv9B,KAAKuwB,YAAcnuB,EAGnBpC,KAAKywB,gBAAkBruB,GAG/B8qB,EAAOtW,UAAU0mB,iBAAmB,WAChC,GAAIP,GAAS/8B,KAAKoC,MAAM2b,WAAWpd,MAAM,KAAK68B,IAAI9f,OAuBlD,IAtBK1d,KAAKyR,WAAkC,aAArBzR,KAAKoxB,aAA+BpxB,KAAK0pB,IAC5D1pB,KAAKoC,OAAS26B,EAAO,GAAIA,EAAO,IAGhC/8B,KAAKoC,OAAS26B,EAAO,GAAIA,EAAO,IAEhC/8B,KAAKyR,WAAkC,aAArBzR,KAAKoxB,aACvBpxB,KAAKi0B,WAAaj0B,KAAKwwB,iBAAiBxwB,KAAKoC,MAAM,IACnDpC,KAAKm0B,WAAan0B,KAAKwwB,iBAAiBxwB,KAAKoC,MAAM,MAGnDpC,KAAKi0B,WAAaj0B,KAAKwwB,iBAAiBxwB,KAAKoC,MAAM,IACnDpC,KAAKm0B,WAAan0B,KAAKwwB,iBAAiBxwB,KAAKoC,MAAM,KAEvDpC,KAAKsyB,WAAatyB,KAAKo8B,oBAAoBp8B,KAAKi0B,YAChDj0B,KAAKi8B,WAAaj8B,KAAKo8B,oBAAoBp8B,KAAKm0B,YAC5Cn0B,KAAKsyB,WAAatyB,KAAKi8B,aACvBj8B,KAAKsyB,WAAatyB,KAAKi8B,WACvBj8B,KAAKi0B,WAAaj0B,KAAKm0B,YAE3Bn0B,KAAK88B,cAAgB98B,KAAKsyB,WAC1BtyB,KAAKy9B,cAAgBz9B,KAAKi8B,WACtBj8B,KAAK4sB,OAAOzpB,QAAS,CACrBnD,KAAKw7B,aAAe,CACpB,IAAIkC,GAAW19B,KAAKy7B,yBAAyBz7B,KAAKi0B,WAAYj0B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,OAChG37B,MAAKi0B,WAAayJ,EAAS,GAC3B19B,KAAKsyB,WAAaoL,EAAS,GAC3B19B,KAAK88B,cAAgB98B,KAAKsyB,WAC1BtyB,KAAKw7B,aAAe,EACpBkC,EAAW19B,KAAKy7B,yBAAyBz7B,KAAKm0B,WAAYn0B,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOiP,QAC5F77B,KAAKm0B,WAAauJ,EAAS,GAC3B19B,KAAKi8B,WAAayB,EAAS,GAC3B19B,KAAKy9B,cAAgBz9B,KAAKi8B,aAGlC/O,EAAOtW,UAAUwlB,oBAAsB,SAAUh6B,GAC7C,GAAIi7B,EAiBJ,OAhBAj7B,GAAS,KACJA,EAASif,WAAWnO,aAAWlT,KAAKyd,QAAa4D,WAAWnO,aAAWlT,KAAK2d,MAAU0D,WAAWnO,aAAWlT,KAAKyd,OAElH4f,EADqB,eAArBr9B,KAAKoxB,YACCpxB,KAAKC,QAAQ86B,wBAAwB/nB,OAAS5Q,EAAQ,KAGtDpC,KAAKC,QAAQ86B,wBAAwBvE,QAAUp0B,EAAQ,KAE3Dif,WAAWnO,aAAWlT,KAAK2d,QAAY0D,WAAWnO,aAAWlT,KAAKyd,QAEhE4f,EADqB,eAArBr9B,KAAKoxB,YACCpxB,KAAKC,QAAQ86B,wBAAwB/nB,MAGrChT,KAAKC,QAAQ86B,wBAAwBvE,QAG5C6G,GAEXnQ,EAAOtW,UAAU4Z,iBAAmB,SAAUpuB,GAI1C,GAHIpC,KAAKyd,IAAMzd,KAAK2d,MAChB3d,KAAKyd,IAAMzd,KAAK2d,KAEhB3d,KAAKyd,MAAQzd,KAAK2d,IAClB,MAAQ0D,YAAWnO,aAAWlT,KAAK2d,KAEvC,IAAI2P,GAASttB,KAAK29B,cAOlB,OANIv7B,GAAQkrB,EAAOgM,MACfl3B,EAAQkrB,EAAOgM,MAEVl3B,EAAQkrB,EAAOsQ,MACpBx7B,EAAQkrB,EAAOsQ,KAEZx7B,GAMX8qB,EAAOtW,UAAUinB,WAAa,WAC1B,GAAIt4B,GAAQvF,IACZA,MAAKsxB,YAAYre,MAAMoa,WAAa,OAClB,YAAdrtB,KAAK0I,OACL1I,KAAK8pB,SAAS7W,MAAMoa,WAAa,QAEnB,UAAdrtB,KAAK0I,OACL1I,KAAKuxB,aAAate,MAAMoa,WAAa,QAEzCrtB,KAAKsyB,WAAatyB,KAAKo8B,oBAAoBp8B,KAAKi0B,YAC5Cj0B,KAAKm0B,aACLn0B,KAAKi8B,WAAaj8B,KAAKo8B,oBAAoBp8B,KAAKm0B,aAE3B,eAArBn0B,KAAKoxB,aAELpxB,KAAKyR,UAAYzR,KAAKsxB,YAAYre,MAAMigB,MACpClzB,KAAKsyB,WAAa,KAAOtyB,KAAKsxB,YAAYre,MAAMkgB,KAAOnzB,KAAKsyB,WAAa,KACzEtyB,KAAKmxB,oBAELnxB,KAAKyR,UAAYzR,KAAK8xB,eAAe7e,MAAMigB,MACvClzB,KAAKsyB,WAAa,KAAOtyB,KAAK8xB,eAAe7e,MAAMkgB,KAAOnzB,KAAKsyB,WAAa,MAElE,aAAdtyB,KAAK0I,MAEL1I,KAAKyR,UAAazR,KAAK8pB,SAAS7W,MAAMigB,MAAQ,MAAUlzB,KAAK8pB,SAAS7W,MAAMkgB,KAAO,MACnFF,oBAAkBjzB,KAAK8pB,UAAY9W,MAAStR,oBAAkB1B,KAAKsyB,YAAc,EAAItyB,KAAKsyB,WAAa,QAEpF,UAAdtyB,KAAK0I,OAEV1I,KAAKyR,UAAYzR,KAAKuxB,aAAate,MAAMigB,MACrClzB,KAAKi8B,WAAa,KAAOj8B,KAAKuxB,aAAate,MAAMkgB,KAAOnzB,KAAKi8B,WAAa,KAE9Ej8B,KAAKyR,UAAazR,KAAK8pB,SAAS7W,MAAMigB,MAClClzB,KAAKsyB,WAAa,KAAStyB,KAAK8pB,SAAS7W,MAAMkgB,KAAOnzB,KAAKsyB,WAAa,KAC5EW,oBAAkBjzB,KAAK8pB,UAAY9W,MAAShT,KAAKi8B,WAAaj8B,KAAKsyB,WAAa,UAIpFtyB,KAAKsxB,YAAYre,MAAMipB,OAASl8B,KAAKsyB,WAAa,KAC9CtyB,KAAKmxB,oBACLnxB,KAAK8xB,eAAe7e,MAAMipB,OAASl8B,KAAKsyB,WAAa,MAEvC,aAAdtyB,KAAK0I,MACL1I,KAAK8pB,SAAS7W,MAAMipB,OAAS,MAC7BjJ,oBAAkBjzB,KAAK8pB,UAAY0M,OAAU90B,oBAAkB1B,KAAKsyB,YAAc,EAAItyB,KAAKsyB,WAAa,QAErF,UAAdtyB,KAAK0I,OACV1I,KAAKuxB,aAAate,MAAMipB,OAASl8B,KAAKi8B,WAAa,KACnDj8B,KAAK8pB,SAAS7W,MAAMipB,OAASl8B,KAAKsyB,WAAa,KAC/CW,oBAAkBjzB,KAAK8pB,UAAY0M,OAAUx2B,KAAKi8B,WAAaj8B,KAAKsyB,WAAa,SAGrFtyB,KAAK4sB,OAAOzpB,SACZnD,KAAK0wB,cAEoB,SAAzB1wB,KAAKsuB,MAAMqC,WAAwB3wB,KAAK44B,KACxC54B,KAAK89B,cAAc99B,KAAK44B,IACxB54B,KAAK44B,OAAKvzB,GACVrF,KAAK4wB,eAET5wB,KAAKqyB,cACAryB,KAAKquB,QAAQiB,WACdppB,WAAW,WACPX,EAAM+rB,YAAYre,MAAMoa,WAAa9nB,EAAMioB,eACxB,UAAfjoB,EAAMmD,OACNnD,EAAMgsB,aAAate,MAAMoa,WAAa9nB,EAAMioB,kBAIxDxtB,KAAK61B,eAAe71B,KAAKi2B,eACzBj2B,KAAKqzB,eAETnG,EAAOtW,UAAUqhB,kBAAoB,SAAU71B,GAC3C,GAAIoT,GAAW,IACW,KAAtBxV,KAAKw7B,cACCx7B,KAAK4sB,OAAOzpB,SAAWnD,KAAK4sB,OAAOmR,mBACrC/9B,KAAKi0B,WAAaj0B,KAAKwwB,iBAAiBpuB,GACxCpC,KAAKsyB,WAAatyB,KAAKo8B,oBAAoBp8B,KAAKi0B,YAC9B,UAAdj0B,KAAK0I,MAAoB1I,KAAKsyB,WAAatyB,KAAKi8B,aAChDj8B,KAAKsyB,WAAatyB,KAAKi8B,WACvBj8B,KAAKi0B,WAAaj0B,KAAKm0B,YAEvBn0B,KAAKsyB,aAAetyB,KAAK88B,gBACzBtnB,EAAWxV,KAAK88B,cAAgB98B,KAAKsyB,aAG7CtyB,KAAKm9B,iBAGCn9B,KAAK4sB,OAAOzpB,SAAWnD,KAAK4sB,OAAOoR,iBACrCh+B,KAAKm0B,WAAan0B,KAAKwwB,iBAAiBpuB,GACxCpC,KAAKi8B,WAAaj8B,KAAKo8B,oBAAoBp8B,KAAKm0B,YAC9B,UAAdn0B,KAAK0I,MAAoB1I,KAAKi8B,WAAaj8B,KAAKsyB,aAChDtyB,KAAKi8B,WAAaj8B,KAAKsyB,WACvBtyB,KAAKm0B,WAAan0B,KAAKi0B,YAEvBj0B,KAAKi8B,aAAej8B,KAAKy9B,gBACzBjoB,EAAWxV,KAAKy9B,cAAgBz9B,KAAKi8B,aAG7Cj8B,KAAKm9B,gBAEQ,OAAb3nB,IACkB,YAAdxV,KAAK0I,MACL1I,KAAKg8B,cAETh8B,KAAKg9B,kBAAkB,QAI/B9P,EAAOtW,UAAU+mB,aAAe,WAC5B,MAAI39B,MAAKyd,IAAMzd,KAAK2d,KAEZ2b,MAAOt5B,KAAK2d,IACZigB,IAAK59B,KAAKyd,MAKV6b,MAAOt5B,KAAKyd,IACZmgB,IAAK59B,KAAK2d,MAKtBuP,EAAOtW,UAAUqnB,aAAe,SAAUzoB,GAEtC,GAAIxV,KAAKyd,MAAQzd,KAAK2d,IAClB,MAAO,IAEX,IAAyB,eAArB3d,KAAKoxB,YAA8B,CACnC,GAAI+B,GAAO3d,EAAS0oB,EAAIl+B,KAAKC,QAAQ86B,wBAAwB5H,KACzDgL,EAAMn+B,KAAKC,QAAQm+B,YAAc,GACrCp+B,MAAKgI,IAAOmrB,EAAOgL,MAElB,CACD,GAAIE,GAAQ7oB,EAASkkB,EAAI15B,KAAKC,QAAQ86B,wBAAwB3H,IAC1D+K,EAAMn+B,KAAKC,QAAQq+B,aAAe,GACtCt+B,MAAKgI,IAAM,IAAOq2B,EAAQF,EAE9B,GAAIn2B,GAAMhI,KAAKu+B,qBAAqBv+B,KAAKgI,IAgBzC,OAfIA,GAAM,EACNA,EAAM,EAEDA,EAAM,MACXA,EAAM,KAENhI,KAAKyR,WAAkC,aAArBzR,KAAKoxB,cACvBppB,EAAM,IAAMA,GAES,eAArBhI,KAAKoxB,YACCpxB,KAAKC,QAAQ86B,wBAAwB/nB,OAAShL,EAAM,KAGpDhI,KAAKC,QAAQ86B,wBAAwBvE,QAAUxuB,EAAM,MAInEklB,EAAOtW,UAAU2nB,qBAAuB,SAAUn8B,GAC5B,IAAdpC,KAAKqe,OACLre,KAAKqe,KAAO,EAEhB,IAAImgB,GAAend,WAAWnO,aAAWlT,KAAKqe,SAAYgD,WAAWnO,aAAWlT,KAAK2d,MAAQ0D,WAAWnO,aAAWlT,KAAKyd,OAAS,KAC7HghB,EAASr8B,EAAQqgB,KAAK2W,IAAIoF,EAS9B,OARe,KAAXC,IACKD,EAAc,EAAKC,EACpBr8B,GAASq8B,EAGTr8B,GAASqgB,KAAK2W,IAAIoF,GAAeC,GAGlCr8B,GAEX8qB,EAAOtW,UAAUrU,IAAM,SAAUsa,EAAGzG,EAAGsoB,GACnC,GACIR,GAAIzb,KAAKI,IAAI,GAAiB,EAQlC,OANI6b,IACOjc,KAAKK,MAAMjG,EAAIqhB,GAAKzb,KAAKK,MAAM1M,EAAI8nB,IAAMA,GAGzCzb,KAAKK,MAAMjG,EAAIqhB,GAAKzb,KAAKK,MAAM1M,EAAI8nB,IAAMA,GAIxDhR,EAAOtW,UAAU+nB,gBAAkB,SAAUtB,GACzC,GAAIr1B,GACA42B,EAAOvd,WAAWnO,aAAWlT,KAAK2d,MAAQ0D,WAAWnO,aAAWlT,KAAKyd,KAQzE,OANIzV,GADqB,eAArBhI,KAAKoxB,YACEiM,EAAMr9B,KAAKC,QAAQ86B,wBAAwB/nB,MAAS4rB,EAGpDvB,EAAMr9B,KAAKC,QAAQ86B,wBAAwBvE,OAAUoI,EAEpD5+B,KAAKuC,IAAIyF,EAAKqZ,WAAWrhB,KAAKyd,IAAIM,aAAa,IAG/DmP,EAAOtW,UAAUic,eAAiB,SAAUgM,GACxCA,EAAI/6B,gBAEJ,IAAIu5B,EACa,eAAbwB,EAAIn2B,MAAqC,YAAbm2B,EAAIn2B,MAAmC,UAAbm2B,EAAIn2B,KAC1D20B,GAAQa,EAAGW,EAAIjZ,QAAS8T,EAAGmF,EAAIhZ,SAEb,aAAbgZ,EAAIn2B,MAAoC,eAAbm2B,EAAIn2B,OACpC20B,GAAQa,EAAGW,EAAIC,eAAe,GAAGlZ,QAAS8T,EAAGmF,EAAIC,eAAe,GAAGjZ,SAEvE,IAAIkZ,GAAY/+B,KAAKi+B,aAAaZ,GAC9B2B,EAAYh/B,KAAK2+B,gBAAgBI,EACrC,IAAkB,UAAd/+B,KAAK0I,MAAqB1I,KAAKi8B,WAAa8C,EAAcA,EAAY/+B,KAAKsyB,WAC3EtyB,KAAKw7B,aAAe,EACdx7B,KAAK4sB,OAAOzpB,SAAWnD,KAAK4sB,OAAOoR,iBACjCh+B,KAAK4sB,OAAOzpB,UAEZ67B,GADI58B,EAAQpC,KAAKy7B,yBAAyBuD,EAAWh/B,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOiP,SACrE,GAClBkD,EAAY38B,EAAM,IAEtBpC,KAAKuxB,aAAaxtB,UAAUxB,IAAIinB,GAAW8C,oBAC3CtsB,KAAKi8B,WAAaj8B,KAAKy9B,cAAgBsB,EACvC/+B,KAAKm0B,WAAa6K,GAEtBh/B,KAAKm9B,eACLn9B,KAAKuxB,aAAalf,YAEjB,CAED,GADArS,KAAKw7B,aAAe,GACdx7B,KAAK4sB,OAAOzpB,UAAWnD,KAAK4sB,OAAOmR,iBAAmB,CACxD,GAAI/9B,KAAK4sB,OAAOzpB,QAAS,CACrB,GAAIf,GAAQpC,KAAKy7B,yBAAyBuD,EAAWh/B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,OACvFqD,GAAY58B,EAAM,GAClB28B,EAAY38B,EAAM,GAEtBpC,KAAKsxB,YAAYvtB,UAAUxB,IAAIinB,GAAW8C,oBAC1CtsB,KAAKsyB,WAAatyB,KAAK88B,cAAgBiC,EACvC/+B,KAAKi0B,WAAa+K,EAEtBh/B,KAAKm9B,eACLn9B,KAAKsxB,YAAYjf,QAEjBrS,KAAKmxB,mBACLnxB,KAAKuvB,eAAexrB,UAAUxB,IAAIinB,GAAW0B,sBAEjD,IAAI+T,GAAiBj/B,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAWoC,gBAC7DqT,IAAkBj/B,KAAKwyB,cAAgByM,GACvCA,EAAel7B,UAAUP,OAAOgmB,GAAWoC,gBAE/C,IAAI0B,GAA+B,IAAtBttB,KAAKw7B,aAAqBx7B,KAAKsxB,YAActxB,KAAKuxB,YAC/D,IAAIsN,EAAI7nB,SAAWsW,EAOf,OANIttB,KAAK8wB,YAAe9wB,KAAKquB,QAAQiB,WAChCtvB,KAAKwyB,YAAYzuB,UAAUC,SAASwlB,GAAWoC,kBAChD5rB,KAAKq4B,iBAETr4B,KAAK+yB,YAAY8L,OACjB7+B,MAAKyyB,cAAczyB,KAAKwyB,YAG5B,IAAKxyB,KAAKk/B,mBAAmBF,GAA7B,CAGA,GAAI3R,GAAartB,KAAK8wB,YAAc9wB,KAAKquB,QAAQiB,UAC7CtvB,KAAKutB,4BAA8BvtB,KAAKqtB,UAC5CrtB,MAAKwyB,YAAYvf,MAAMoa,WAAaA,EAAWC,OAC7B,YAAdttB,KAAK0I,OACL1I,KAAK8pB,SAAS7W,MAAMoa,WAAaA,EAAWvD,UAEhD9pB,KAAKg9B,kBAAkB6B,GACnB7+B,KAAKmxB,oBACLnxB,KAAK4tB,gBAAiB,GAE1B5tB,KAAKu4B,YAAY,UAAWsG,GACV,YAAd7+B,KAAK0I,MACL1I,KAAKg8B,gBAGb9O,EAAOtW,UAAUuoB,kBAAoB,SAAUC,EAAaC,EAAaC,GAChD,IAAjBA,GACAt/B,KAAKi0B,WAAaoL,EAClBr/B,KAAKm0B,WAAan0B,KAAKi0B,WAAaj0B,KAAKu/B,SAEnB,IAAjBD,IACLt/B,KAAKm0B,WAAakL,EAClBr/B,KAAKi0B,WAAaj0B,KAAKm0B,WAAan0B,KAAKu/B,SAE7Cv/B,KAAKsyB,WAAatyB,KAAKo8B,oBAAoBp8B,KAAKi0B,YAChDj0B,KAAKi8B,WAAaj8B,KAAKo8B,oBAAoBp8B,KAAKm0B,aAEpDjH,EAAOtW,UAAU4oB,iBAAmB,SAAUt7B,GAC1C,GAAIgN,GAAIuuB,CACW,eAAfv7B,EAAMwE,MACNxE,EAAMJ,iBAEV9D,KAAK0/B,iBAAkB,CACvB,IAAIrC,EACJr9B,MAAK8pB,SAAS7W,MAAMoa,WAAa,OACjCrtB,KAAKsxB,YAAYre,MAAMoa,WAAa,OACpCrtB,KAAKuxB,aAAate,MAAMoa,WAAa,MACrC,IAAIsS,GACAC,CAOJ,IANmB,cAAf17B,EAAMwE,MAC+Bi3B,GAArCzuB,GAAMhN,EAAM0hB,QAAS1hB,EAAM2hB,UAAwB,GAAI+Z,EAAW1uB,EAAG,KAGIyuB,GAAzEF,GAAMv7B,EAAM46B,eAAe,GAAGlZ,QAAS1hB,EAAM46B,eAAe,GAAGjZ,UAAwB,GAAI+Z,EAAWH,EAAG,MAEvGz/B,KAAK4sB,OAAOzpB,SAAWnD,KAAK4sB,OAAOmR,kBAAuB/9B,KAAK4sB,OAAOzpB,SAAWnD,KAAK4sB,OAAOoR,gBAAiB,CAiBhH,GAZIX,EAJCr9B,KAAKyR,WAIEysB,EAAGyB,EAAW3/B,KAAK6/B,iBAAkBnG,EAAGkG,EAAW5/B,KAAK6/B,mBAHxD3B,EAAGyB,EAAW3/B,KAAK8/B,gBAAiBpG,EAAGkG,EAAW5/B,KAAK6/B,kBAKnE7/B,KAAKsyB,WAAatyB,KAAKi+B,aAAaZ,GACpCr9B,KAAKi0B,WAAaj0B,KAAK2+B,gBAAgB3+B,KAAKsyB,YAKxC+K,EAJCr9B,KAAKyR,WAIEysB,EAAGyB,EAAW3/B,KAAK8/B,gBAAiBpG,EAAGkG,EAAW5/B,KAAK8/B,kBAHvD5B,EAAGyB,EAAW3/B,KAAK6/B,iBAAkBnG,EAAGkG,EAAW5/B,KAAK8/B,iBAKpE9/B,KAAKi8B,WAAaj8B,KAAKi+B,aAAaZ,GACpCr9B,KAAKm0B,WAAan0B,KAAK2+B,gBAAgB3+B,KAAKi8B,YACxCj8B,KAAK4sB,OAAOzpB,QAAS,CACrB,GAAIf,GAAQpC,KAAKy7B,yBAAyBz7B,KAAKi0B,WAAYj0B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,OAC7F37B,MAAKi0B,WAAa7xB,EAAM,GACxBpC,KAAKsyB,WAAalwB,EAAM,GACpBpC,KAAKi0B,aAAej0B,KAAK4sB,OAAO+O,QAChC37B,KAAKm/B,kBAAkBn/B,KAAKi0B,WAAYj0B,KAAK4sB,OAAO+O,OAAQ,GAE5D37B,KAAKi0B,aAAej0B,KAAK4sB,OAAO8O,UAChC17B,KAAKm/B,kBAAkBn/B,KAAKi0B,WAAYj0B,KAAK4sB,OAAO8O,SAAU,GAElEt5B,EAAQpC,KAAKy7B,yBAAyBz7B,KAAKm0B,WAAYn0B,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOiP,QACzF77B,KAAKm0B,WAAa/xB,EAAM,GACxBpC,KAAKi8B,WAAa75B,EAAM,GACpBpC,KAAKm0B,aAAen0B,KAAK4sB,OAAOgP,UAChC57B,KAAKm/B,kBAAkBn/B,KAAKm0B,WAAYn0B,KAAK4sB,OAAOgP,SAAU,GAE9D57B,KAAKm0B,aAAen0B,KAAK4sB,OAAOiP,QAChC77B,KAAKm/B,kBAAkBn/B,KAAKm0B,WAAYn0B,KAAK4sB,OAAOiP,OAAQ,GAGhE77B,KAAKm0B,aAAen0B,KAAK2d,KACzB3d,KAAKm/B,kBAAkBn/B,KAAKm0B,WAAYn0B,KAAK2d,IAAK,GAElD3d,KAAKi0B,aAAej0B,KAAKyd,KACzBzd,KAAKm/B,kBAAkBn/B,KAAKi0B,WAAYj0B,KAAKyd,IAAK,GAG1Dzd,KAAKw7B,aAAe,EACpBx7B,KAAKg9B,kBAAkB94B,GACvBlE,KAAKw7B,aAAe,EACpBx7B,KAAKg9B,kBAAkB94B,GACvBlE,KAAKyyB,cAAczyB,KAAK8pB,UACxB9pB,KAAKg8B,eAET9O,EAAOtW,UAAUmc,YAAc,SAAU7uB,GACrClE,KAAKu4B,YAAY,UAAWr0B,GAC5BlE,KAAK2yB,iBACL3yB,KAAKsxB,YAAYvtB,UAAUP,OAAOgmB,GAAW8C,oBAC3B,UAAdtsB,KAAK0I,OACL1I,KAAK4tB,gBAAiB,EACtB5tB,KAAKuxB,aAAaxtB,UAAUP,OAAOgmB,GAAW8C,qBAElDtsB,KAAK0yB,eACD1yB,KAAK8wB,aACL9wB,KAAKwyB,YAAYzuB,UAAUP,OAAO,sBAC9BxD,KAAKmxB,mBACLnxB,KAAKuvB,eAAexrB,UAAUP,OAAOgmB,GAAW0B,wBAGxD5oB,eAAakB,OAAO2O,SAAU,sBAAuBnS,KAAK8yB,eAC1DxwB,eAAakB,OAAO2O,SAAU,mBAAoBnS,KAAK+yB,cAE3D7F,EAAOtW,UAAUkc,cAAgB,SAAU+L,GACtB,cAAbA,EAAIn2B,MACJm2B,EAAI/6B,gBAER,IAAIu5B,EAEAA,GADa,cAAbwB,EAAIn2B,MACIw1B,EAAGW,EAAIjZ,QAAS8T,EAAGmF,EAAIhZ,UAGvBqY,EAAGW,EAAIC,eAAe,GAAGlZ,QAAS8T,EAAGmF,EAAIC,eAAe,GAAGjZ,QAEvE,IAAIkZ,GAAY/+B,KAAKi+B,aAAaZ,GAC9B2B,EAAYh/B,KAAK2+B,gBAAgBI,EAErC,IADAA,EAAYtc,KAAKK,MAAMic,GACL,UAAd/+B,KAAK0I,MAA0C,IAAtB1I,KAAKw7B,aAAoB,CAClD,IAAMx7B,KAAK4sB,OAAOzpB,UAAWnD,KAAK4sB,OAAOmR,iBAAmB,CACxD,GAAI/9B,KAAK4sB,OAAOzpB,QAAS,CACrB,GAAI48B,GAAkB//B,KAAKy7B,yBAAyBuD,EAAWh/B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,OACjGoD,GAAYgB,EAAgB,GAC5Bf,EAAYe,EAAgB,GAEhC//B,KAAKsyB,WAAayM,EAClB/+B,KAAKi0B,WAAa+K,EAEtBh/B,KAAKsxB,YAAYvtB,UAAUxB,IAAIinB,GAAW8C,oBAE9C,GAAkB,UAAdtsB,KAAK0I,KACL,GAA0B,IAAtB1I,KAAKw7B,aACLx7B,KAAKsxB,YAAYvtB,UAAUxB,IAAIinB,GAAW8C,oBACpCtsB,KAAK4sB,OAAOzpB,SAAWnD,KAAK4sB,OAAOmR,mBACjCgB,EAAY/+B,KAAKi8B,aACjB8C,EAAY/+B,KAAKi8B,WACjB+C,EAAYh/B,KAAKm0B,YAEjB4K,IAAc/+B,KAAK88B,gBACf98B,KAAK4sB,OAAOzpB,UAEZ67B,GADI58B,EAAQpC,KAAKy7B,yBAAyBuD,EAAWh/B,KAAK4sB,OAAO8O,SAAU17B,KAAK4sB,OAAO+O,SACrE,GAClBoD,EAAY38B,EAAM,IAEtBpC,KAAKsyB,WAAatyB,KAAK88B,cAAgBiC,EACvC/+B,KAAKi0B,WAAa+K,EAClBh/B,KAAKw7B,aAAe,QAI3B,IAA0B,IAAtBx7B,KAAKw7B,eACVx7B,KAAKuxB,aAAaxtB,UAAUxB,IAAIinB,GAAW8C,sBACrCtsB,KAAK4sB,OAAOzpB,SAAWnD,KAAK4sB,OAAOoR,iBACjCe,EAAY/+B,KAAKsyB,aACjByM,EAAY/+B,KAAKsyB,WACjB0M,EAAYh/B,KAAKi0B,YAEjB8K,IAAc/+B,KAAKy9B,iBAAe,CAClC,GAAIz9B,KAAK4sB,OAAOzpB,QAAS,CACrB,GAAIf,GAAQpC,KAAKy7B,yBAAyBuD,EAAWh/B,KAAK4sB,OAAOgP,SAAU57B,KAAK4sB,OAAOiP,OACvFmD,GAAY58B,EAAM,GAClB28B,EAAY38B,EAAM,GAEtBpC,KAAKi8B,WAAaj8B,KAAKy9B,cAAgBsB,EACvC/+B,KAAKm0B,WAAa6K,EAClBh/B,KAAKw7B,aAAe,EAK/Bx7B,KAAKk/B,mBAAmBF,KAG7Bh/B,KAAKwyB,YAAYvf,MAAMoa,WAAartB,KAAKwtB,eACvB,YAAdxtB,KAAK0I,OACL1I,KAAK8pB,SAAS7W,MAAMoa,WAAa,QAErCrtB,KAAKg9B,kBAAkB6B,IACnB7+B,KAAK8wB,YAAe9wB,KAAKquB,QAAQiB,WAChCtvB,KAAKwyB,YAAYzuB,UAAUC,SAASwlB,GAAWoC,kBAChD5rB,KAAKq4B,iBAETr4B,KAAKyyB,cAAczyB,KAAKwyB,aACN,YAAdxyB,KAAK0I,MACL1I,KAAKg8B,gBAGb9O,EAAOtW,UAAUopB,eAAiB,SAAU97B,GACnClE,KAAK0/B,gBAKN1/B,KAAK2tB,gBAAiB,GAJtB3tB,KAAK4yB,qBACL5yB,KAAK6yB,eAAe3uB,IAKxBlE,KAAKu4B,YAAY,UAAWr0B,GAC5BlE,KAAK0yB,eACLpwB,eAAakB,OAAO2O,SAAU,sBAAuBnS,KAAKw/B,kBAC1Dl9B,eAAakB,OAAO2O,SAAU,mBAAoBnS,KAAKggC,gBACvDhgC,KAAK0/B,iBAAkB,GAE3BxS,EAAOtW,UAAUsoB,mBAAqB,SAAUtC,GAC5C,GAAkB,UAAd58B,KAAK0I,MAIL,GAAIk0B,KAHc58B,KAAKyR,WAAkC,aAArBzR,KAAKoxB,YAAoD,IAAtBpxB,KAAKw7B,aACxEx7B,KAAKuwB,YAAY,GAAKvwB,KAAKuwB,YAAY,GAChB,IAAtBvwB,KAAKw7B,aAAqBx7B,KAAKuwB,YAAY,GAAKvwB,KAAKuwB,YAAY,IAElE,MAAO,OAIX,IAAIqM,IAAiB58B,KAAKuwB,YACtB,MAAO,EAGf,OAAO,IAEXrD,EAAOtW,UAAUif,eAAiB,SAAU7e,GACpChX,KAAKquB,QAAQiB,WAAatvB,KAAKwzB,aAC/BxzB,KAAKszB,eACDtc,IACAhX,KAAKwzB,WAAWrE,QAAQnY,GACxBhX,KAAKi2B,cAAgBjf,KAIjCkW,EAAOtW,UAAUmlB,YAAc,SAAU/kB,GACjChX,KAAKquB,QAAQiB,WAAatvB,KAAKwzB,aAAexzB,KAAKmxB,oBACnDnxB,KAAKszB,eACLtzB,KAAKwzB,WAAWkD,KAAK1f,GACrBhX,KAAKi2B,cAAgBjf,IAG7BkW,EAAOtW,UAAU8b,aAAe,WACxB1yB,KAAKquB,QAAQiB,WAAatvB,KAAKwzB,YAAsC,WAAxBxzB,KAAKquB,QAAQmB,SAAwBxvB,KAAKmxB,oBACvFnxB,KAAKszB,eACLtzB,KAAKwzB,WAAWoD,QAChB52B,KAAKi2B,kBAAgB5wB,KAG7B6nB,EAAOtW,UAAUqpB,QAAU,SAAU/7B,GACjC,OAAQA,EAAMyD,SACV,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACDzD,EAAMJ,iBACN9D,KAAKm4B,YAAYj0B,KAI7BgpB,EAAOtW,UAAUspB,cAAgB,SAAUha,GAClCA,GAWD5jB,eAAakB,OAAOxD,KAAKw3B,SAAU,wBAAyBx3B,KAAK43B,gBACjEt1B,eAAakB,OAAOxD,KAAKy3B,UAAW,wBAAyBz3B,KAAK43B,gBAClEt1B,eAAakB,OAAOxD,KAAKw3B,SAAU,uBAAwBx3B,KAAKk4B,oBAChE51B,eAAakB,OAAOxD,KAAKw3B,SAAU,sCAAuCx3B,KAAKs4B,iBAC/Eh2B,eAAakB,OAAOxD,KAAKy3B,UAAW,uBAAwBz3B,KAAKk4B,oBACjE51B,eAAakB,OAAOxD,KAAKy3B,UAAW,sCAAuCz3B,KAAKs4B,iBAChFh2B,eAAakB,OAAOxD,KAAKw3B,SAAU,WAAYx3B,KAAKmgC,gBACpD79B,eAAakB,OAAOxD,KAAKy3B,UAAW,WAAYz3B,KAAKmgC,kBAjBrD79B,eAAaC,IAAIvC,KAAKw3B,SAAU,wBAAyBx3B,KAAK43B,eAAgB53B,MAC9EsC,eAAaC,IAAIvC,KAAKy3B,UAAW,wBAAyBz3B,KAAK43B,eAAgB53B,MAC/EsC,eAAaC,IAAIvC,KAAKw3B,SAAU,uBAAwBx3B,KAAKk4B,mBAAoBl4B,MACjFsC,eAAaC,IAAIvC,KAAKw3B,SAAU,sCAAuCx3B,KAAKs4B,gBAAiBt4B,MAC7FsC,eAAaC,IAAIvC,KAAKy3B,UAAW,uBAAwBz3B,KAAKk4B,mBAAoBl4B,MAClFsC,eAAaC,IAAIvC,KAAKy3B,UAAW,sCAAuCz3B,KAAKs4B,gBAAiBt4B,MAC9FsC,eAAaC,IAAIvC,KAAKw3B,SAAU,WAAYx3B,KAAKmgC,eAAgBngC,MACjEsC,eAAaC,IAAIvC,KAAKy3B,UAAW,WAAYz3B,KAAKmgC,eAAgBngC,QAa1EktB,EAAOtW,UAAUwpB,kBAAoB,SAAUl8B,GAC3C,GAAIgN,GAAIuuB,CAGR,IAFAv7B,EAAMJ,iBACN9D,KAAK4yB,qBACa,UAAd5yB,KAAK0I,MAAoB1I,KAAK0tB,MAAQxpB,EAAM8S,SAAWhX,KAAK8pB,SAAU,CACtE,GAAI6V,OAAW,GACXC,MAAW,EACI,eAAf17B,EAAMwE,MAC+Bi3B,GAArCzuB,GAAMhN,EAAM0hB,QAAS1hB,EAAM2hB,UAAwB,GAAI+Z,EAAW1uB,EAAG,IAEjD,eAAfhN,EAAMwE,OAC8Di3B,GAAzEF,GAAMv7B,EAAM46B,eAAe,GAAGlZ,QAAS1hB,EAAM46B,eAAe,GAAGjZ,UAAwB,GAAI+Z,EAAWH,EAAG,IAEpF,eAArBz/B,KAAKoxB,aACLpxB,KAAK8/B,gBAAkBH,EAAW3/B,KAAK8pB,SAASiR,wBAAwB5H,KACxEnzB,KAAK6/B,iBAAmB7/B,KAAK8pB,SAASiR,wBAAwB7H,MAAQyM,IAGtE3/B,KAAK8/B,gBAAkBF,EAAW5/B,KAAK8pB,SAASiR,wBAAwB3H,IACxEpzB,KAAK6/B,iBAAmB7/B,KAAK8pB,SAASiR,wBAAwBmB,OAAS0D,GAE3E5/B,KAAKu/B,QAAUv/B,KAAKm0B,WAAan0B,KAAKi0B,WACtCj0B,KAAKyyB,cAAczyB,KAAK8pB,SACxB,IAAImV,GAAiBj/B,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAWoC,gBAC7DqT,IACAA,EAAel7B,UAAUP,OAAOgmB,GAAWoC,iBAE/CtpB,eAAaC,IAAI4P,SAAU,sBAAuBnS,KAAKw/B,iBAAkBx/B,MACzEsC,eAAaC,IAAI4P,SAAU,mBAAoBnS,KAAKggC,eAAgBhgC,QAG5EktB,EAAOtW,UAAUypB,aAAe,SAAUn8B,GACtC,GAAIlE,KAAK2tB,eAEL,YADA3tB,KAAK2tB,gBAAiB,EAG1BzpB,GAAMJ,iBACN9D,KAAK4yB,qBACL5yB,KAAK6yB,eAAe3uB,IAExBgpB,EAAOtW,UAAUvU,WAAa,WAC1BrC,KAAKsgC,SAAWtgC,KAAK69B,WAAW7G,KAAKh3B,MACrCyvB,OAAOjgB,iBAAiB,SAAUxP,KAAKsgC,UACnCtgC,KAAKmD,UAAYnD,KAAK4G,WACtBtE,eAAaC,IAAIvC,KAAKC,QAAS,QAASD,KAAKqgC,aAAcrgC,MACzC,UAAdA,KAAK0I,MAAoB1I,KAAK0tB,MAC9BprB,eAAaC,IAAIvC,KAAK8pB,SAAU,uBAAwB9pB,KAAKogC,kBAAmBpgC,MAEpFsC,eAAaC,IAAIvC,KAAK2qB,gBAAiB,UAAW3qB,KAAKigC,QAASjgC,MAChEsC,eAAaC,IAAIvC,KAAK2qB,gBAAiB,QAAS3qB,KAAKugC,MAAOvgC,MAC5DsC,eAAaC,IAAIvC,KAAKC,QAAS,WAAYD,KAAKmgC,eAAgBngC,MAChEsC,eAAaC,IAAIvC,KAAK2qB,gBAAiB,yCAA0C3qB,KAAKwgC,MAAOxgC,MAC7FA,KAAK+xB,oBAAmB,GACN,UAAd/xB,KAAK0I,MACL1I,KAAKoyB,qBAAoB,GAEzBpyB,KAAKmwB,aACLnwB,KAAKkgC,eAAc,GAEvBlgC,KAAKs1B,0BAAyB,GAC1Bt1B,KAAKkuB,QACL5rB,eAAaC,IAAIvC,KAAKqD,YAAa,QAASrD,KAAKygC,iBAAkBzgC,QAI/EktB,EAAOtW,UAAUrT,aAAe,WAC5BjB,eAAakB,OAAOxD,KAAKC,QAAS,QAASD,KAAKqgC,cAC9B,UAAdrgC,KAAK0I,MAAoB1I,KAAK0tB,MAC9BprB,eAAakB,OAAOxD,KAAK8pB,SAAU,uBAAwB9pB,KAAKogC,mBAEpE99B,eAAakB,OAAOxD,KAAK2qB,gBAAiB,UAAW3qB,KAAKigC,SAC1D39B,eAAakB,OAAOxD,KAAK2qB,gBAAiB,QAAS3qB,KAAKugC,OACxDj+B,eAAakB,OAAOxD,KAAKC,QAAS,WAAYD,KAAKmgC,gBACnD79B,eAAakB,OAAOxD,KAAK2qB,gBAAiB,yCAA0C3qB,KAAKwgC,OACzFxgC,KAAK+xB,oBAAmB,GACN,UAAd/xB,KAAK0I,MACL1I,KAAKoyB,qBAAoB,GAEzBpyB,KAAKmwB,aACLnwB,KAAKkgC,eAAc,GAEvBlgC,KAAKs1B,0BAAyB,GAC9BhzB,eAAakB,OAAOxD,KAAKC,QAAS,QAASD,KAAKygC,mBAEpDvT,EAAOtW,UAAU6pB,iBAAmB,WAChCzgC,KAAKwZ,eAAgBpX,MAASpC,KAAKmuB,iBAAkB,GACrDnuB,KAAK2M,YAETugB,EAAOtW,UAAU2pB,MAAQ,SAAUr8B,GAC/B,GAAsB,IAAlBA,EAAMyD,SAAiBzD,EAAM8S,OAAOjT,UAAUC,SAASwlB,GAAWK,gBAClE7pB,KAAK4yB,sBACA1uB,EAAM8S,OAAOjT,UAAUC,SAASwlB,GAAWoC,kBAAkB,CAC1D5rB,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAWoC,kBAC5C5rB,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAWoC,iBAAiB7nB,UAAUP,OAAOgmB,GAAWoC,iBAE7F1nB,EAAM8S,OAAOjT,UAAUxB,IAAIinB,GAAWoC,gBACtC,IAAI/f,GAAgB3H,EAAM8S,OAAOnL,aAC7BA,KAAkB7L,KAAKC,UACvB4L,EAAcpF,cAAc,IAAM+iB,GAAW4B,aAAarnB,UAAUxB,IAAIinB,GAAW4C,gBACjE,UAAdpsB,KAAK0I,MAAkC,aAAd1I,KAAK0I,MAC9BmD,EAAcpF,cAAc,IAAM+iB,GAAWM,UAAU/lB,UAAUxB,IAAIinB,GAAW6C,iBAGtE,UAAdrsB,KAAK0I,OACJxE,EAAM8S,uBAAwBjT,UAAUC,SAASwlB,GAAWK,cACzD7pB,KAAKw7B,aAAe,EAAIx7B,KAAKw7B,aAAe,GAEpDx7B,KAAKwyB,YAAYngB,QACjBrS,KAAKyyB,cAAczyB,KAAKwyB,aAGhCxyB,KAAK0yB,eACL1yB,KAAKu4B,YAAY,UAAWr0B,IAEhCgpB,EAAOtW,UAAU4pB,MAAQ,SAAUt8B,GAC1BxC,oBAAkBwC,KACA,cAAfA,EAAMwE,MAAuC,cAAfxE,EAAMwE,MAAuC,cAAfxE,EAAMwE,MACnD,gBAAfxE,EAAMwE,MAAyC,eAAfxE,EAAMwE,KACtC1I,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAWe,aAG9CvqB,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAWe,eAI7D2C,EAAOtW,UAAUupB,eAAiB,SAAUj8B,GACpCA,EAAMw8B,gBAAkB1gC,KAAKuxB,cAAgBrtB,EAAMw8B,gBAAkB1gC,KAAKsxB,aAC1EptB,EAAMw8B,gBAAkB1gC,KAAKC,SAAWiE,EAAMw8B,gBAAkB1gC,KAAKw3B,UAAYtzB,EAAMw8B,gBAAkB1gC,KAAKy3B,YAC9Gz3B,KAAKg2B,uBACLh2B,KAAK0yB,eACD1yB,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAWoC,kBAC5C5rB,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAWoC,iBAAiB7nB,UAAUP,OAAOgmB,GAAWoC,iBAEzF5rB,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAW4C,kBAC5CpsB,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAW4C,gBAAgBroB,UAAUP,OAAOgmB,GAAW4C,gBACrE,UAAdpsB,KAAK0I,MAAkC,aAAd1I,KAAK0I,OAC/B1I,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAW6C,iBAC5CrsB,KAAKC,QAAQwG,cAAc,IAAM+iB,GAAW6C,gBAAgBtoB,UAAUP,OAAOgmB,GAAW6C,iBAGhGrsB,KAAKgb,YAAY3I,QACjBrS,KAAKgb,YAAYuL,OACjBvmB,KAAK6tB,kBAAmB,IAGhCX,EAAOtW,UAAUknB,cAAgB,SAAU79B,GACnCA,EAAQuG,YACRvG,EAAQuG,WAAWm6B,YAAY1gC,IAGvCitB,EAAOtW,UAAUgqB,iBAAmB,SAAUl4B,EAAMmE,GAC5C7M,KAAKmxB,mBAAqBnxB,KAAK8xB,iBAC/B9xB,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAW2B,gBACjDnrB,KAAK89B,cAAc99B,KAAK8xB,gBACxB9xB,KAAK8xB,mBAAiBzsB,IAE1BrF,KAAK89B,cAAc99B,KAAKsxB,aACxBtxB,KAAKsxB,gBAAcjsB,GACN,YAATqD,IACa,UAATA,IACA1I,KAAK89B,cAAc99B,KAAKuxB,cACxBvxB,KAAKuxB,iBAAelsB,IAExBrF,KAAK89B,cAAc99B,KAAK8pB,UACxB9pB,KAAK8pB,aAAWzkB,IAEhBrF,KAAKquB,QAAQiB,YAAc5tB,oBAAkB1B,KAAKwzB,cAClDxzB,KAAKwzB,WAAWtN,UAChBlmB,KAAKuvB,mBAAiBlqB,GACtBrF,KAAKq2B,4BAA0BhxB,IAE/BrF,KAAK4sB,OAAOzpB,UACC,aAATuF,GAAgC,YAATA,EAClBhH,oBAAkB1B,KAAK8sB,iBACxB9sB,KAAK89B,cAAc99B,KAAK8sB,eACxB9sB,KAAK8sB,kBAAgBznB,IAIpB3D,oBAAkB1B,KAAK+sB,kBACxB/sB,KAAK89B,cAAc99B,KAAK+sB,gBACxB/sB,KAAK+sB,mBAAiB1nB,KAIlCrF,KAAKw7B,aAAe,EACpBx7B,KAAK6vB,yBACa,UAAd7vB,KAAK0I,MACL1I,KAAKswB,mBAETtwB,KAAK+vB,iBACD/vB,KAAK4sB,OAAOzpB,SACZnD,KAAKgwB,iBAEThwB,KAAK8vB,aACL9vB,KAAKiwB,iBACLjwB,KAAK+xB,oBAAmB,GACN,UAAd/xB,KAAK0I,MACL1I,KAAKoyB,qBAAoB,GAE7BpyB,KAAK2M,WACD3M,KAAKquB,QAAQiB,YACbtvB,KAAK6wB,gBACL7wB,KAAKs1B,0BAAyB,IAElCt1B,KAAKqzB,cACQ,YAATxmB,GACA7M,KAAK6gC,gBAGb3T,EAAOtW,UAAUkqB,UAAY,WAQzB,GAPK9gC,KAAKyR,WAA2B,UAAdzR,KAAK0I,OACxB1I,KAAKoC,OAASpC,KAAKm0B,WAAYn0B,KAAKi0B,aAExCj0B,KAAK6gC,eACD7gC,KAAKquB,QAAQiB,WACbtvB,KAAKwzB,WAAWrE,QAAQnvB,KAAKsxB,aAE7BtxB,KAAKmwB,YAAa,CAClB,GAAIwH,GAAa33B,KAAKyR,WAAkC,aAArBzR,KAAKoxB,WACxCrxB,cAAW43B,EAAa33B,KAAKy3B,UAAYz3B,KAAKw3B,UAAYla,aAAc,WAAYD,MAAO,aAC3Ftd,aAAW43B,EAAa33B,KAAKw3B,SAAWx3B,KAAKy3B,WAAana,aAAc,WAAYD,MAAO,eAGnG6P,EAAOtW,UAAUmqB,kBAAoB,WACjC/gC,KAAK4gC,iBAAiB5gC,KAAK0I,KAAM,SAErCwkB,EAAOtW,UAAUiqB,aAAe,WAC5B7gC,KAAKqwB,eACLrwB,KAAK2M,WACD3M,KAAKquB,QAAQiB,WACbtvB,KAAK61B,eAAe71B,KAAKi2B,eAEA,SAAzBj2B,KAAKsuB,MAAMqC,WACP3wB,KAAK44B,KACL54B,KAAK89B,cAAc99B,KAAK44B,IACxB54B,KAAK44B,OAAKvzB,GACVrF,KAAK4wB,eAGb5wB,KAAKghC,wBAET9T,EAAOtW,UAAUoqB,qBAAuB,WAChChhC,KAAK4sB,OAAOzpB,SACRzB,oBAAkB1B,KAAK8sB,gBAAgC,UAAd9sB,KAAK0I,MAC9C1I,KAAKgwB,iBAELtuB,oBAAkB1B,KAAK8sB,gBAAkBprB,oBAAkB1B,KAAK+sB,iBAAiC,UAAd/sB,KAAK0I,MACxF1I,KAAKgwB,iBAEThwB,KAAK0wB,cACL1wB,KAAK2M,aAGAjL,oBAAkB1B,KAAK8sB,gBACxB3Y,SAAOnU,KAAK8sB,eAEXprB,oBAAkB1B,KAAK+sB,iBACxB5Y,SAAOnU,KAAK+sB,kBAQxBG,EAAOtW,UAAU4P,eAAiB,WAC9B,GAAIC,IAAa,QACjB,OAAOzmB,MAAK0mB,aAAaD,IAQ7ByG,EAAOtW,UAAUsP,QAAU,WACvBrO,EAAOjB,UAAUsP,QAAQjlB,KAAKjB,MAC9BA,KAAKuD,eACLksB,OAAOtf,oBAAoB,SAAUnQ,KAAKsgC,UAC1C35B,eAAa3G,KAAK2qB,kBAAmBnB,GAAWkB,iBAChD1qB,KAAKsxB,YAAY1gB,gBAAgB,oBACf,UAAd5Q,KAAK0I,MACL1I,KAAKuxB,aAAa3gB,gBAAgB,oBAEtC5Q,KAAK2qB,gBAAgBnkB,WAAWqI,aAAa7O,KAAKC,QAASD,KAAK2qB,iBAChExW,SAAOnU,KAAK2qB,iBACR3qB,KAAKquB,QAAQiB,WACbtvB,KAAKwzB,WAAWtN,UAEpBlmB,KAAKC,QAAQ0S,UAAY,IAO7Bua,EAAOtW,UAAU+P,kBAAoB,SAAUC,EAASC,GAEpD,IAAK,GADDthB,GAAQvF,KACHiR,EAAK,EAAGC,EAAKC,OAAOC,KAAKwV,GAAU3V,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC9D,GAAIqK,GAAOpK,EAAGD,EACd,QAAQqK,GACJ,IAAK,WACDtb,KAAKovB,YAAYvI,EAAQvV,SACzB,MACJ,KAAK,QACD,GAAIsV,GAAWC,EAAS,CACpB,GAAIzkB,GAAQV,oBAAkBklB,EAAQxkB,OACnB,UAAdpC,KAAK0I,MAAoB1I,KAAKyd,IAAKzd,KAAK2d,KAAO3d,KAAKyd,IAAOmJ,EAAQxkB,KACxEpC,MAAKwZ,eAAgBpX,MAASA,IAAS,GAClCV,oBAAkBmlB,EAAQzkB,QAAUykB,EAAQzkB,MAAM2b,aAAe3b,EAAM2b,aACxE/d,KAAK2M,WACL3M,KAAK61B,eAAe71B,KAAKi2B,eACP,UAAdj2B,KAAK0I,OACDhH,oBAAkBklB,EAAQxkB,QAAUykB,EAAQzkB,MAAM,KAAOA,EAAM,GAC/DpC,KAAKw7B,aAAe,EAGpBx7B,KAAKw7B,aAAe,IAKpC,KACJ,KAAK,MACL,IAAK,OACL,IAAK,MACDx7B,KAAKihC,gBACL,MACJ,KAAK,UACIv/B,oBAAkBklB,EAAQyH,UAAa3sB,oBAAkBmlB,EAAQwH,UAClEruB,KAAKkhC,WAAW5lB,EAEpB,MACJ,KAAK,OACI5Z,oBAAkBmlB,KAAY1V,OAAOC,KAAKyV,GAAShmB,QAChDa,oBAAkBmlB,EAAQne,QAC9B1I,KAAK4gC,iBAAiB/Z,EAAQne,KAAM4S,GACpCtb,KAAKivB,YAET,MACJ,KAAK,YACGpI,EAAQpV,YAAcmV,EAAQnV,WAAkC,aAArBzR,KAAKoxB,cAChDpxB,KAAK0pB,IAAM7C,EAAQpV,UACnBzR,KAAK8gC,YAET,MACJ,KAAK,SACD9gC,KAAKghC,sBACL,MACJ,KAAK,cACDhhC,KAAK+gC,mBACL,MACJ,KAAK,QACIr/B,oBAAkB1B,KAAK2qB,gBAAgBlkB,cAAc,IAAM+iB,GAAWU,UACvE/V,SAAOnU,KAAK44B,IACZriB,MAAMK,UAAU8a,QAAQzwB,KAAKjB,KAAK2qB,gBAAgB5mB,UAAW,SAAUuM,GAC/DA,EAAUxO,MAAM,aAChByD,EAAMolB,gBAAgB5mB,UAAUP,OAAO8M,MAItB,SAAzBtQ,KAAKsuB,MAAMqC,YACX3wB,KAAK4wB,cACL5wB,KAAKivB,YAET,MACJ,KAAK,SACGjvB,KAAKmwB,aACLnwB,KAAK03B,aAET,MACJ,KAAK,cACG9Q,EAAQuJ,aACRnwB,KAAKowB,aACLpwB,KAAK69B,aACD79B,KAAKmD,UAAYnD,KAAK4G,UACtB5G,KAAKkgC,eAAc,IAInBlgC,KAAKw3B,UAAYx3B,KAAKy3B,YACtBz3B,KAAK2qB,gBAAgBgW,YAAY3gC,KAAKw3B,UACtCx3B,KAAK2qB,gBAAgBgW,YAAY3gC,KAAKy3B,WACtCz3B,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAW0C,mBACjDlsB,KAAKw3B,aAAWnyB,GAChBrF,KAAKy3B,cAAYpyB,GACjBrF,KAAK69B,aAGb,MACJ,KAAK,UACD79B,KAAKuR,YACL,MACJ,KAAK,WACDvR,KAAKmhC,aACL,MACJ,KAAK,eACDnhC,KAAK2M,WACL3M,KAAK69B,YACL,MACJ,KAAK,aACD79B,KAAK69B,YACL,MACJ,KAAK,QACD79B,KAAKya,gBAAgBmM,EAAQ5T,OAC7BhT,KAAKihC,iBACDjhC,KAAK4sB,QACL5sB,KAAKghC,0BAMzB9T,EAAOtW,UAAUuqB,YAAc,WACvBnhC,KAAK4G,UACL5G,KAAKuD,eACLvD,KAAK2qB,gBAAgB5mB,UAAUxB,IAAIinB,GAAW5iB,YAG9C5G,KAAKqC,aACLrC,KAAK2qB,gBAAgB5mB,UAAUP,OAAOgmB,GAAW5iB,YAGzDsmB,EAAOtW,UAAUqqB,eAAiB,WAC9B,GAAI17B,GAAQvF,IACZA,MAAK2M,WACL3M,KAAK61B,eAAe71B,KAAKi2B,eACpBv0B,oBAAkB1B,KAAK2qB,gBAAgBlkB,cAAc,IAAM+iB,GAAWU,SACnElqB,KAAK44B,KACLzkB,SAAOnU,KAAK44B,IACZriB,MAAMK,UAAU8a,QAAQzwB,KAAKjB,KAAK2qB,gBAAgB5mB,UAAW,SAAUuM,GAC/DA,EAAUxO,MAAM,aAChByD,EAAMolB,gBAAgB5mB,UAAUP,OAAO8M,MAK1B,SAAzBtQ,KAAKsuB,MAAMqC,YACX3wB,KAAK4wB,cACL5wB,KAAKivB,cAGb/B,EAAOtW,UAAUqY,UAAY,WACzBjvB,KAAK84B,OAAS,EACTp3B,oBAAkB1B,KAAKsuB,QAAmC,SAAzBtuB,KAAKsuB,MAAMqC,YAC7C3wB,KAAK44B,GAAG3lB,MAAM6lB,OAAU94B,KAAK84B,QAAU,EAAK,GAC5C94B,KAAKC,QAAQgT,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,IAE/C94B,KAAK8wB,YAAepvB,oBAAkB1B,KAAKsuB,QAAmC,SAAzBtuB,KAAKsuB,MAAMqC,YACjE3wB,KAAKC,QAAQgT,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,IAEpD94B,KAAKsxB,YAAYre,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,GAClC,UAAd94B,KAAK0I,OACL1I,KAAKuxB,aAAate,MAAM6lB,OAAU94B,KAAK84B,OAAS,EAAK,KAG7D5L,EAAOtW,UAAUsqB,WAAa,SAAUr0B,GACpC7M,KAAK4gC,iBAAiB5gC,KAAK0I,KAAMmE,IAErCqgB,EAAOtW,UAAUyc,YAAc,WAI3B,IAHA,GAAI+N,GACAC,EACAC,EAAQthC,KAAKorB,YAAYgP,iBACtBkH,GACHthC,KAAKorB,YAAYuV,YAAYW,GAC7BA,EAAQthC,KAAKorB,YAAYgP,gBAE7B,KAAK,GAAIx5B,GAAI,EAAGA,EAAIZ,KAAKuhC,WAAW1gC,OAAQD,IACxC,IAAKc,oBAAkB1B,KAAKuhC,WAAW3gC,GAAG04B,SAAW53B,oBAAkB1B,KAAKuhC,WAAW3gC,GAAGg9B,MAClF59B,KAAKuhC,WAAW3gC,GAAGg9B,IAAM59B,KAAKuhC,WAAW3gC,GAAG04B,MAAO,CAC/Ct5B,KAAKuhC,WAAW3gC,GAAG04B,MAAQt5B,KAAKyd,MAChCzd,KAAKuhC,WAAW3gC,GAAG04B,MAAQt5B,KAAKyd,KAEhCzd,KAAKuhC,WAAW3gC,GAAGg9B,IAAM59B,KAAK2d,MAC9B3d,KAAKuhC,WAAW3gC,GAAGg9B,IAAM59B,KAAK2d,IAElC,IAAI6jB,GAAmBxhC,KAAKo8B,oBAAoBp8B,KAAKuhC,WAAW3gC,GAAG04B,OAC/DmI,EAAczhC,KAAKo8B,oBAAoBp8B,KAAKuhC,WAAW3gC,GAAGg9B,KAC1D8D,EAAiB1hC,KAAKsO,cAAc,MACxCozB,GAAezuB,MAAM0uB,gBAAkB3hC,KAAKuhC,WAAW3gC,GAAGghC,MAC1DF,EAAezuB,MAAM4uB,OAAS,aAAe7hC,KAAKuhC,WAAW3gC,GAAGghC,MACvC,eAArB5hC,KAAKoxB,aACLiQ,EAAiB7X,GAAW6B,sBAGpB+V,EAFJphC,KAAKyR,UACD/P,oBAAkB1B,KAAKyxB,cACPzxB,KAAKo8B,oBAAoBp8B,KAAK2d,KAAO3d,KAAKo8B,oBAAoBp8B,KAAKuhC,WAAW3gC,GAAGg9B,KAGjF59B,KAAKo8B,oBAAoBp8B,KAAKyxB,aAAa5wB,OAASb,KAAKuhC,WAAW3gC,GAAGg9B,IAAM,GAIjF59B,KAAKo8B,oBAAoBp8B,KAAKuhC,WAAW3gC,GAAG04B,OAEhEoI,EAAezuB,MAAMD,MAAQyuB,EAAcD,EAAmB,KAC9DE,EAAezuB,MAAMkgB,KAAOiO,EAAgB,OAG5CC,EAAiB7X,GAAW8B,oBAC5B8V,EAAgBphC,KAAKo8B,oBAAoBp8B,KAAKuhC,WAAW3gC,GAAG04B,OAC5DoI,EAAezuB,MAAMujB,OAASiL,EAAcD,EAAmB,KAC/DE,EAAezuB,MAAMipB,OAASkF,EAAgB,MAElDM,EAAe39B,UAAUxB,IAAI8+B,GAC7BrhC,KAAKorB,YAAYtc,YAAY4yB,KAS7CxU,EAAOtW,UAAUsQ,cAAgB,WAC7B,MAAO,UAEXpQ,IACIqQ,WAAS,OACV+F,EAAOtW,UAAW,YAAS,IAC9BE,IACIqQ,WAAS,OACV+F,EAAOtW,UAAW,mBAAgB,IACrCE,IACIqQ,WAAS,IACV+F,EAAOtW,UAAW,WAAQ,IAC7BE,IACIqQ,WAAS,OACV+F,EAAOtW,UAAW,YAAS,IAC9BE,IACIqQ,WAAS,IACV+F,EAAOtW,UAAW,UAAO,IAC5BE,IACIqQ,WAAS,MACV+F,EAAOtW,UAAW,UAAO,IAC5BE,IACIqQ,YAAS,IACV+F,EAAOtW,UAAW,eAAY,IACjCE,IACIqQ,WAAS,YACV+F,EAAOtW,UAAW,WAAQ,IAC7BE,IACIgrB,kBAAiBzY,KAClB6D,EAAOtW,UAAW,iBAAc,IACnCE,IACIirB,aAAY7Y,KACbgE,EAAOtW,UAAW,YAAS,IAC9BE,IACIirB,aAAYzY,KACb4D,EAAOtW,UAAW,aAAU,IAC/BE,IACIqQ,YAAS,IACV+F,EAAOtW,UAAW,cAAW,IAChCE,IACIirB,aAAYxY,KACb2D,EAAOtW,UAAW,cAAW,IAChCE,IACIqQ,YAAS,IACV+F,EAAOtW,UAAW,kBAAe,IACpCE,IACIqQ,YAAS,IACV+F,EAAOtW,UAAW,sBAAmB,IACxCE,IACIqQ,WAAS,eACV+F,EAAOtW,UAAW,kBAAe,IACpCE,IACIqQ,WAAS,KACV+F,EAAOtW,UAAW,eAAY,IACjCE,IACIqQ,YAAS,IACV+F,EAAOtW,UAAW,0BAAuB,IAC5CE,IACIsQ,WACD8F,EAAOtW,UAAW,cAAW,IAChCE,IACIsQ,WACD8F,EAAOtW,UAAW,aAAU,IAC/BE,IACIsQ,WACD8F,EAAOtW,UAAW,cAAW,IAChCE,IACIsQ,WACD8F,EAAOtW,UAAW,qBAAkB,IACvCE,IACIsQ,WACD8F,EAAOtW,UAAW,oBAAiB,IACtCE,IACIsQ,WACD8F,EAAOtW,UAAW,oBAAiB,IACtCsW,EAASpW,IACLuQ,yBACD6F,IAEL5F,aC/2FErR,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB/E,OAAOkF,iBAChBC,uBAA2BC,QAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,MACpDL,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASM,KAAO1W,KAAK2W,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAajF,OAAO0F,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAYC,EAAQzN,EAAK0N,GAC7E,GAA2Hd,GAAvHe,EAAIC,UAAUtW,OAAQuW,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAO9F,OAAOkG,yBAAyBL,EAAQzN,GAAO0N,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQzN,EAAK0N,OACpH,KAAK,GAAIrW,GAAImW,EAAWlW,OAAS,EAAGD,GAAK,EAAGA,KAASuV,EAAIY,EAAWnW,MAAIwW,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQzN,EAAK6N,GAAKjB,EAAEa,EAAQzN,KAAS6N,EAChJ,OAAOF,GAAI,GAAKE,GAAKjG,OAAOqG,eAAeR,EAAQzN,EAAK6N,GAAIA,GAUrD4qB,IAEPC,MAAO,GAAIrgC,QAAO,mHAElBsgC,IAAK,mFACLC,SAAU,GAAIvgC,QAAO,2DACrBwgC,OAAQ,GAAIxgC,QAAO,YACnBygC,MAAO,GAAIzgC,QAAO,qBAClB0gC,WAAY,GAAI1gC,QAAO,kBAS3B,SAAW2gC,GAIPA,EAAYA,EAAqB,QAAI,GAAK,UAI1CA,EAAYA,EAAmB,MAAI,GAAK,SACzCA,gBAAgBA,kBAgBnB,IAAIC,IAA+B,SAAU3qB,GASzC,QAAS2qB,GAAcviC,EAAS6X,GAC5B,GAAIvS,GAAQsS,EAAO5W,KAAKjB,KAAM8X,EAAS7X,IAAYD,IA6CnD,IA5CAuF,EAAMk9B,aACNl9B,EAAMm9B,cACNn9B,EAAMo9B,aAAc,EACpBp9B,EAAMq9B,SAAW,WACjBr9B,EAAMs9B,YAAc,KACpBt9B,EAAMC,aAAe,KACrBD,EAAMu9B,YAAc,+DAEpBv9B,EAAMw9B,iBAMNx9B,EAAMy9B,iBACFJ,SAAU,0BACVK,MAAO,sCACPC,IAAK,4BACLC,KAAM,6BACNC,QAAS,qCACTC,WAAY,iCACZC,OAAQ,+BACRC,OAAQ,4BACRC,UAAW,4CACXC,UAAW,wCACXC,YAAa,4DACb/R,MAAO,4CACPhU,IAAK,kDACLF,IAAK,qDACLukB,MAAO,gCACP2B,IAAK,qCACLC,QAAS,wCACTC,QAAS,yCAEc,KAAhBt+B,EAAMu+B,QACbv+B,EAAMu+B,UAEVv+B,EAAM6T,KAAO,GAAIC,QAAK,gBAAiB9T,EAAMy9B,gBAAiBz9B,EAAM+T,QAChE/T,EAAM+T,QACN/T,EAAMw+B,aAEVC,eAAaC,GAAG,uBAAwB1+B,EAAM2+B,kBAAmB3+B,GACjEtF,EAA6B,gBAAZA,GAAuBkkC,SAAOlkC,EAASkS,UAAYlS,EAE/C,MAAjBsF,EAAMtF,QASV,MARIsF,GAAMtF,QAAQkP,aAAa,aAAc,IACzC5J,EAAM6+B,cAAgBC,YAAU9+B,EAAMu9B,YAAav9B,EAAMtF,SACzDsF,EAAM++B,mBACN/+B,EAAMlD,aAKHkD,EA/DX0Q,GAAUusB,EAAe3qB,GAiEzB0sB,EAAkB/B,EASlBA,EAAc5rB,UAAU4tB,SAAW,SAAU/nB,EAAMqnB,GAC3CrnB,IAEIzc,KAAK8jC,MAAMrtB,eAAegG,GAC1B7U,SAAO5H,KAAK8jC,MAAMrnB,GAAOqnB,MAGzB9jC,KAAK8jC,MAAMrnB,GAAQqnB,IAY/BtB,EAAc5rB,UAAU6tB,YAAc,SAAUhoB,EAAMqnB,GAClD,GAAKrnB,GAASqnB,EAGT,GAAI9jC,KAAK8jC,MAAMrnB,KAAUqnB,QACnB9jC,MAAK8jC,MAAMrnB,OAEjB,CAAA,GAAK/a,oBAAkB1B,KAAK8jC,MAAMrnB,IAASqnB,GAM5C,MALA,KAAK,GAAIljC,GAAI,EAAGA,EAAIkjC,EAAMjjC,OAAQD,UACvBZ,MAAK8jC,MAAMrnB,GAAMqnB,EAAMljC,QAPlCZ,MAAK8jC,UAsBbtB,EAAc5rB,UAAU8tB,SAAW,SAAUC,GACzC,GAAIb,GAAQ3yB,OAAOC,KAAKpR,KAAK8jC,MAC7B,IAAIa,GAAYb,EAAMjjC,OAGlB,MAFAb,MAAK4kC,cAAcD,IAEiB,IAA7Bb,EAAMz3B,QAAQs4B,IAEP,IAF2B3kC,KAAK0iC,WAAW7N,OAAO,SAAUgQ,GACtE,MAAOA,GAAKpoB,OAASkoB,IACtB9jC,MAGHb,MAAK0iC,aACL,KAAK,GAAIzxB,GAAK,EAAG6zB,EAAUhB,EAAO7yB,EAAK6zB,EAAQjkC,OAAQoQ,IAAM,CACzD,GAAI8zB,GAASD,EAAQ7zB,EACrBjR,MAAK4kC,cAAcG,GAEvB,MAAkC,KAA3B/kC,KAAK0iC,WAAW7hC,QAS/B2hC,EAAc5rB,UAAUouB,MAAQ,WAC5BhlC,KAAKC,QAAQ+kC,QACbhlC,KAAKilC,aASTzC,EAAc5rB,UAAUsuB,gBAAkB,SAAUzoB,GAEhD,MADAzc,MAAKwF,aAAgB2+B,SAAO,UAAY1nB,EAAO,KAAMzc,KAAKC,SACnDD,KAAKwF,cAQhBg9B,EAAc5rB,UAAUsP,QAAU,WAC9BlmB,KAAKglC,QACLhlC,KAAKuD,eACLvD,KAAK8jC,QAEL,KAAK,GAAI7yB,GAAK,EAAGk0B,EADFd,YAAU,IAAMrkC,KAAKolC,WAAa,MAAQplC,KAAKqlC,WAAYrlC,KAAKC,SACvCgR,EAAKk0B,EAAWtkC,OAAQoQ,IAAM,CAClE,GAAIhR,GAAUklC,EAAWl0B,EACzBkD,UAAOlU,GAEX4X,EAAOjB,UAAUsP,QAAQjlB,KAAKjB,MAC9BgkC,eAAasB,IAAI,uBAAwBtlC,KAAKkkC,oBASlD1B,EAAc5rB,UAAU+P,kBAAoB,SAAUC,EAASC,GAC3D,IAAK,GAAI5V,GAAK,EAAGC,EAAKC,OAAOC,KAAKwV,GAAU3V,EAAKC,EAAGrQ,OAAQoQ,IAExD,OADWC,EAAGD,IAEV,IAAK,SACDjR,KAAK+jC,eASrBvB,EAAc5rB,UAAUmtB,WAAa,WACjC,IAAK,GAAI9yB,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKgjC,iBAAkB/xB,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC3E,GAAI1H,GAAM2H,EAAGD,EACbjR,MAAKoZ,KAAK4N,UAAUhnB,KAAKsZ,OACzB,IAAIlX,GAAQpC,KAAKoZ,KAAKG,YAAYhQ,EAClCvJ,MAAK+iC,cAAcx5B,GAAOnH,IAOlCogC,EAAc5rB,UAAUsQ,cAAgB,WACpC,MAAO,iBAOXsb,EAAc5rB,UAAUstB,kBAAoB,SAAUr3B,GAClD7M,KAAKsZ,OAASzM,EAAKyM,OACnBtZ,KAAK+jC,cAOTvB,EAAc5rB,UAAUuY,QAAU,WAC9BnvB,KAAKuD,eACLvD,KAAKokC,cAAgBC,YAAUrkC,KAAK8iC,YAAa9iC,KAAKC,SACtDD,KAAKqC,cAETmgC,EAAc5rB,UAAUquB,UAAY,WAChCjlC,KAAK0iC,cACL1iC,KAAKyiC,YAEL,KAAK,GAAIxxB,GAAK,EAAGs0B,EADFlB,YAAUrkC,KAAK8iC,YAAa9iC,KAAKC,SACRgR,EAAKs0B,EAAW1kC,OAAQoQ,IAAM,CAClE,GACIiD,GADUqxB,EAAWt0B,EAEzBiD,GAAMtD,gBAAgB,gBACtBsD,EAAMnQ,UAAUP,OAAOxD,KAAKolC,YACxBlxB,EAAMuI,KAAK5b,OAAS,IACpBb,KAAKklC,gBAAgBhxB,EAAMuI,MAC3Bzc,KAAKwlC,gBAAgBtxB,EAAMuI,MAC3Bzc,KAAKylC,YAAYvxB,EAAMuI,OAE3BvI,EAAMnQ,UAAUP,OAAOxD,KAAKqlC,cAGpC7C,EAAc5rB,UAAU0tB,iBAAmB,WAMvC,IAAK,GALDoB,IAAY,WAAY,iBAAkB,QAAS,cAAe,YAAa,YAAa,UAAW,SACvG,UAAW,oBAAqB,OAAQ,kBAAmB,MAAO,MAAO,QAAS,UAAW,yBAC7F,yBAA0B,yBAA0B,qBAAsB,yBAA0B,sBACpG,sBAAuB,kBACvBC,GAAiB,SAAU,QAAS,MAAO,OAAQ,SAAU,OACxD10B,EAAK,EAAGC,EAAMlR,KAAmB,cAAEiR,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAI9D,IAAK,GAHDiD,GAAQhD,EAAGD,GAEX20B,KACKnG,EAAK,EAAGoG,EAAaH,EAAUjG,EAAKoG,EAAWhlC,OAAQ4+B,IAAM,CAClE,GAAIqG,GAAOD,EAAWpG,EACtB,IAAiC,OAA7BvrB,EAAMnD,aAAa+0B,GACnB,OAAQA,GACJ,IAAK,WACD9lC,KAAK+lC,QAAQ7xB,EAAO0xB,EAASE,EAAM5xB,EAAM0uB,SACzC,MACJ,KAAK,kBACDkD,EAAO5xB,EAAMnD,aAAa+0B,GAC1B9lC,KAAK+lC,QAAQ7xB,EAAO0xB,EAASE,GAAM,EACnC,MACJ,KAAK,QAC0C,IAAvCH,EAAct5B,QAAQ6H,EAAMxL,OAC5B1I,KAAK+lC,QAAQ7xB,EAAO0xB,EAAS1xB,EAAMxL,MAAM,EAE7C,MACJ,KAAK,cACL,IAAK,QACD1I,KAAK+lC,QAAQ7xB,EAAO0xB,EAASE,EAAME,KAAKC,MAAM/xB,EAAMnD,aAAa+0B,IACjE,MACJ,KAAK,UAEG,GAAIt1B,GAAK0D,EAAMnD,aAAa+0B,EAC5B9lC,MAAK+lC,QAAQ7xB,EAAO0xB,EAASE,EAAMt1B,EAEvC,MACJ,SAC2C,SAAnC0D,EAAMnD,aAAa,YACnB/Q,KAAKkmC,eAAehyB,EAAO0xB,EAASE,EAAM5xB,EAAMnD,aAAa+0B,IAG7D9lC,KAAK+lC,QAAQ7xB,EAAO0xB,EAASE,EAAM5xB,EAAMnD,aAAa+0B,KAMtC,IAAhC30B,OAAOC,KAAKw0B,GAAS/kC,QACrBb,KAAKwkC,SAAStwB,EAAMuI,KAAMmpB,KAItCpD,EAAc5rB,UAAUsvB,eAAiB,SAAUhyB,EAAOiyB,EAASC,EAAUhkC,GACzE,GAAI8jC,GAAiBE,EAASzlC,MAAM,KAChC0lC,GAAa,WAAY,aAAc,QAAS,YAAa,YAAa,QAAS,QAAS,WAC5FC,EAAgBJ,EAAeA,EAAerlC,OAAS,GACvD0lC,EAAiBL,EAAeA,EAAerlC,OAAS,EAC5D,KAA0C,IAAtCwlC,EAAUh6B,QAAQi6B,GAClB,OAAQA,GACJ,IAAK,WACDtmC,KAAK+lC,QAAQ7xB,EAAOiyB,EAAS,WAAY/jC,EACzC,MACJ,KAAK,aACDpC,KAAK+lC,QAAQ7xB,EAAOiyB,EAAS,aAAc/jC,EAC3C,MACJ,KAAK,QACDpC,KAAK+lC,QAAQ7xB,EAAOiyB,EAAS,MAAO/jC,OAI3C,KAA2C,IAAvCikC,EAAUh6B,QAAQk6B,GACvB,OAAQA,GACJ,IAAK,YACDvmC,KAAK+lC,QAAQ7xB,EAAOiyB,EAAS,YAAa/jC,EAC1C,MACJ,KAAK,YACDpC,KAAK+lC,QAAQ7xB,EAAOiyB,EAAS,YAAa/jC,EAC1C,MACJ,KAAK,QAEG,GAAIokC,GAAWtyB,EAAMnD,aAAa,sBAC9B01B,EAAWvyB,EAAMnD,aAAa,qBAClC/Q,MAAK+lC,QAAQ7xB,EAAOiyB,EAAS,SAAUK,EAAUC,GAErD,MACJ,KAAK,UAEG,GAAIj2B,GAAK0D,EAAMnD,aAAaq1B,GAAUzlC,MAAM,IAC5CX,MAAK+lC,QAAQ7xB,EAAOiyB,EAAS,UAAW31B,EAAGA,EAAG3P,OAAS,GAE3D,MACJ,KAAK,QACDb,KAAK+lC,QAAQ7xB,EAAOiyB,EAAS,QAAS/jC,KAKtDogC,EAAc5rB,UAAUmvB,QAAU,SAAU7xB,EAAOiyB,EAASC,EAAUhkC,GAClE,GAEIskC,GAFAC,EAAUzyB,EAAMnD,aAAa,QAAUq1B,EAAW,YAClDQ,EAAoB1yB,EAAMnD,aAAa,YAAcq1B,EAErDpmC,MAAK8jC,MAAM5vB,EAAMuI,OAAsB,mBAAb2pB,GAA8C,WAAbA,IAC3DpmC,KAAKklC,gBAAgBhxB,EAAMuI,MAC3BiqB,EAAgB1mC,KAAK6mC,gBAAgB7mC,KAAK8jC,MAAM5vB,EAAMuI,MAAM2pB,GAAWA,IAEvEO,EACAvkC,GAASA,EAAOukC,GAEXC,EACLxkC,GAASA,EAAOwkC,GAEXF,IACLtkC,GAASA,EAAOskC,IAEpBP,EAAQC,GAAYhkC,GAGxBogC,EAAc5rB,UAAUvU,WAAa,WACjC,IAAK,GAAI4O,GAAK,EAAGC,EAAMlR,KAAmB,cAAEiR,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC9D,GAAIiD,GAAQhD,EAAGD,EACXszB,GAAgBuC,YAAY5yB,GAC5B5R,eAAaC,IAAI2R,EAAO,QAASlU,KAAK+mC,aAAc/mC,MAE7B,WAAlBkU,EAAMvP,QACXrC,eAAaC,IAAI2R,EAAO,SAAUlU,KAAK0f,cAAe1f,OAGtDsC,eAAaC,IAAI2R,EAAO,WAAYlU,KAAKqf,gBAAiBrf,MAC1DsC,eAAaC,IAAI2R,EAAO,QAASlU,KAAKuf,aAAcvf,OAG5DsC,eAAaC,IAAIvC,KAAKC,QAAS,SAAUD,KAAKgnC,cAAehnC,MAC7DsC,eAAaC,IAAIvC,KAAKC,QAAS,QAASD,KAAK4D,aAAc5D,OAG/DwiC,EAAc5rB,UAAUrT,aAAe,WACnC,IAAK,GAAI0N,GAAK,EAAGC,EAAMlR,KAAmB,cAAEiR,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC9D,GAAIiD,GAAQhD,EAAGD,EACf3O,gBAAa2kC,YAAY/yB,GAE7B5R,eAAakB,OAAOxD,KAAKC,QAAS,SAAUD,KAAKgnC,eACjD1kC,eAAakB,OAAOxD,KAAKC,QAAS,QAASD,KAAK4D,eAGpD4+B,EAAc5rB,UAAUyI,gBAAkB,SAAUxb,GAChD7D,KAAKoG,QAAQ,WAAYvC,EAEzB,IAAI5D,GAAU4D,EAAEmT,MACZhX,MAAK8jC,MAAM7jC,EAAQwc,QACfzc,KAAK8jC,MAAM7jC,EAAQwc,MAAMzc,KAAK4iC,WAAa3iC,EAAQmC,MAAMvB,OAAS,EAClEb,KAAK0kC,SAASzkC,EAAQwc,OAEyB,IAA1Czc,KAAKyiC,UAAUp2B,QAAQpM,EAAQwc,OACpCzc,KAAKyiC,UAAUrhC,KAAKnB,EAAQwc,QAKxC+lB,EAAc5rB,UAAU2I,aAAe,SAAU1b,GAC7C7D,KAAKoG,QAAQ,QAASvC,EACtB,IAAI5D,GAAU4D,EAAEmT,OAEZkwB,GAAe,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,MACpD,IAAZrjC,EAAEogB,OAAiBjkB,KAAK8jC,MAAM7jC,EAAQwc,SAAUzc,KAAK8jC,MAAM7jC,EAAQwc,OAAUzc,KAAK8jC,MAAM7jC,EAAQwc,MAAMzc,KAAK4iC,cAGjE,IAA1C5iC,KAAKyiC,UAAUp2B,QAAQpM,EAAQwc,OAAgBzc,KAAK8jC,MAAM7jC,EAAQwc,QAA2C,IAAlCyqB,EAAY76B,QAAQxI,EAAEogB,QACjGjkB,KAAK0kC,SAASzkC,EAAQwc,OAI9B+lB,EAAc5rB,UAAUmwB,aAAe,SAAUljC,GAC7C7D,KAAKoG,QAAQ,QAASvC,EACtB,IAAI5D,GAAU4D,EAAEmT,MAEK,YAAjB/W,EAAQyI,KACR1I,KAAK0kC,SAASzkC,EAAQwc,MAE0B,OAA3Cxc,EAAQ8Q,aAAa,oBAE1B/Q,KAAK2iC,aAAc,IAI3BH,EAAc5rB,UAAU8I,cAAgB,SAAU7b,GAC9C7D,KAAKoG,QAAQ,SAAUvC,EACvB,IAAI5D,GAAU4D,EAAEmT,MAChBhX,MAAK0kC,SAASzkC,EAAQwc,OAG1B+lB,EAAc5rB,UAAUowB,cAAgB,SAAUnjC,GAC9C7D,KAAKoG,QAAQ,SAAUvC,GAGlB7D,KAAK2iC,aAAgB3iC,KAAK0kC,WAI3B1kC,KAAK2iC,aAAc,EAHnB9+B,EAAEC,kBAOV0+B,EAAc5rB,UAAUhT,aAAe,WACnC5D,KAAKilC,aAGTzC,EAAc5rB,UAAUguB,cAAgB,SAAUnoB,GAC9C,GAAKzc,KAAK8jC,MAAMrnB,GAAhB,CAGA,GAAIqnB,GAAQ3yB,OAAOC,KAAKpR,KAAK8jC,MAAMrnB,IAC/B0qB,GAAa,EACbC,GAAqB,EACrBC,EAAQvD,EAAMz3B,QAAQ,kBACtBi7B,EAAOxD,EAAMz3B,QAAQ,SAQzB,IAPArM,KAAKklC,gBAAgBzoB,IACP,IAAV6qB,IACAH,GAAa,IAEF,IAAXE,IACAD,GAAqB,IAEpBD,GAAeA,GAAcC,EAAlC,EACmB,IAAXC,GACAvD,EAAM17B,OAAOi/B,EAAO,IAEV,IAAVC,GACAxD,EAAM17B,OAAQk/B,EAAO,EAAI,GAE7BtnC,KAAKwlC,gBAAgB/oB,EACrB,KAAK,GAAIxL,GAAK,EAAGs2B,EAAUzD,EAAO7yB,EAAKs2B,EAAQ1mC,OAAQoQ,IAAM,CACzD,GAAI60B,GAAOyB,EAAQt2B,GACfu2B,EAAexnC,KAAK6mC,gBAAgB7mC,KAAK8jC,MAAMrnB,GAAMqpB,GAAOA,GAC5D2B,GAAchrB,KAAMA,EAAMkqB,QAASa,GACnC5hC,GACA+T,UAAW8C,EACXxc,QAASD,KAAKwF,aACdmhC,QAASa,EAEb,KAAKxnC,KAAK0nC,QAAQjrB,EAAMqpB,KAAU9lC,KAAKwF,aAAazB,UAAUC,SAAShE,KAAK2nC,QAAS,CACjF3nC,KAAK4nC,iBAAiBnrB,GACtBzc,KAAK0iC,WAAWthC,KAAKqmC,GAErBznC,KAAKwF,aAAa2J,aAAa,eAAgB,QAC/CnP,KAAKwF,aAAa2J,aAAa,mBAAoBnP,KAAKwF,aAAagL,GAAK,SAC1ExQ,KAAKwF,aAAazB,UAAUxB,IAAIvC,KAAKolC,YACrCplC,KAAKwF,aAAazB,UAAUP,OAAOxD,KAAKqlC,YACnCrlC,KAAK6iC,YAIN7iC,KAAK6nC,YAAYJ,GAHjBznC,KAAK8nC,mBAAmBrrB,EAAMgrB,EAAUd,QAAS3mC,KAAKwF,cAK1DI,EAAUmiC,aAAe/nC,KAAK6iC,YAC9Bj9B,EAAUoiC,OAAS,UACnBhoC,KAAKwF,aAAazB,UAAUxB,IAAIvC,KAAKolC,YACrCplC,KAAKwF,aAAazB,UAAUP,OAAOxD,KAAKqlC,YACxCrlC,KAAKioC,yBAAyBxrB,EAAM7W,GACpC5F,KAAKoG,QAAQ,qBAAsBR,GAEtB,aAATkgC,GACA9lC,KAAKwF,aAAa2J,aAAa,gBAAiB,OAEpD,OAGAnP,KAAKylC,YAAYhpB,GACjB7W,EAAUoiC,OAAS,UACnBhoC,KAAKoG,QAAQ,qBAAsBR,OASnD48B,EAAc5rB,UAAUqxB,yBAA2B,SAAUxrB,EAAMyrB,GAC1DloC,KAAK8jC,MAAMrnB,GAAMzc,KAAK4iC,WAAc5iC,KAAKwF,aAAapD,MAAMvB,QAAWa,oBAAkB1B,KAAK6iC,eAC/F7iC,KAAK6iC,YAAYlwB,UAAY3S,KAAKwF,aAAapD,MAC/CpC,KAAK6iC,YAAY1zB,aAAa,eAAgB,SAC9C+4B,EAAMF,OAAS,GACfhoC,KAAKylC,YAAYhpB,KAIzB+lB,EAAc5rB,UAAU8wB,QAAU,SAAUjrB,EAAMqpB,GAC9C,GAAIqC,GAASnoC,KAAK8jC,MAAMrnB,GAAMqpB,GAC1BsC,EAASD,YAAkB5xB,QAA8B,gBAAd4xB,GAAO,GAAmBA,EAAO,GAAKA,EACjFE,EAAcroC,KAAK8jC,MAAMrnB,GAAMqpB,GAC/Bj5B,GAASzK,MAAOpC,KAAKwF,aAAapD,MAAOgmC,MAAOA,EAAOnoC,QAASD,KAAKwF,aAAcnC,YAAarD,KAAKC,QAEzG,OADAD,MAAKoG,QAAQ,kBAAmByG,IAC3BA,EAAKu7B,OAAkB,aAATtC,IAGfuC,GAAyC,kBAAnBA,GAAY,GACzBA,EAAY,GACXpnC,KAAKjB,MAAQC,QAASD,KAAKwF,aAAcpD,MAAOpC,KAAKwF,aAAapD,QAEvEmiC,EAAgBuC,YAAY9mC,KAAKwF,cACzB,aAATsgC,GAGGzB,YAAU,eAAiB5nB,EAAO,aAAczc,KAAKC,SAASY,OAAS,EAGvE0jC,EAAgB+D,eAAexC,GAAMj5B,KAIpD21B,EAAc5rB,UAAUiwB,gBAAkB,SAAU0B,EAAWzC,GAC3D,GAAIa,GAAU3mC,KAAKwF,aAAauL,aAAa,QAAU+0B,EAAO,YAC1D9lC,KAAKwF,aAAauL,aAAa,QAAU+0B,EAAO,YAC/CyC,YAAqBhyB,QAAiC,gBAAjBgyB,GAAU,GAAmBA,EAAU,GAC7B,IAA3Cp3B,OAAOC,KAAKpR,KAAK+iC,eAAeliC,OAAgBb,KAAK+iC,cAAc+C,GAAQ9lC,KAAKgjC,gBAAgB8C,GACrG0C,EAAU7B,EAAQ7kC,MAAM,UAC5B,KAAKJ,oBAAkB8mC,GACnB,IAAK,GAAI5nC,GAAI,EAAGA,EAAI4nC,EAAQ3nC,OAAQD,IAAK,CACrC,GAAIwB,GAAQmmC,YAAqBhyB,OAAQgyB,EAAU3nC,GAAK2nC,CACxD5B,GAAUA,EAAQllC,QAAQ+mC,EAAQ5nC,GAAIwB,GAG9C,MAAOukC,IAGXnE,EAAc5rB,UAAUkxB,mBAAqB,SAAUrrB,EAAMkqB,EAASzyB,GAClE,GAAI6zB,GAAez5B,gBAActO,KAAK+nC,cAClCz3B,UAAWtQ,KAAKolC,WAChBzyB,UAAWg0B,EACX3yB,OAASy0B,IAAKhsB,IAUlB,IAPIzc,KAAK0oC,cAAgBnG,cAAYoG,UACjCZ,EAAahkC,UAAUP,OAAOxD,KAAKolC,YACnC2C,EAAahkC,UAAUxB,IAAI,aAC3BwlC,EAAez5B,gBAActO,KAAK4oC,gBAAkBt4B,UAAWtQ,KAAKolC,WAAYzyB,UAAWo1B,EAAac,aAE5Gd,EAAav3B,GAAKxQ,KAAKwF,aAAaiX,KAAO,QAEvCzc,KAAKC,QAAQwG,cAAc,qBAAuByN,EAAM1D,GAAK,MAC7DxQ,KAAKC,QAAQwG,cAAc,qBAAuByN,EAAM1D,GAAK,MAAM1B,YAAYi5B,OAE9E,KAAmD,IAA/C7zB,EAAM6E,aAAa,wBAAkC,CAE1D,GAAI+vB,GAAc50B,EAAMnD,aAAa,uBACpBozB,UAAO,IAAM2E,EAAa9oC,KAAKC,SACrC6O,YAAYi5B,OAEM,OAAxB/nC,KAAK+oC,gBAEV/oC,KAAK+oC,gBAAgB9nC,KAAKjB,KAAMA,KAAKwF,aAAcuiC,GAGnD/nC,KAAKwF,aAAagB,WAAWqI,aAAak5B,EAAc/nC,KAAKwF,aAAawjC,YAE9EjB,GAAa90B,MAAMg2B,QAAU,QAC7BjpC,KAAKwlC,gBAAgB/oB,GACrBzc,KAAKyiC,UAAUrhC,KAAKqb,GACpBzc,KAAKkpC,cAAczsB,IAGvB+lB,EAAc5rB,UAAU4uB,gBAAkB,SAAU/oB,GAKhD,MAJAzc,MAAK6iC,YAAcsB,SAAOnkC,KAAK+nC,aAAe,IAAM/nC,KAAKolC,WAAYplC,KAAKwF,aAAaqG,eAClF7L,KAAK6iC,cACN7iC,KAAK6iC,YAAcsB,SAAOnkC,KAAK+nC,aAAe,IAAM/nC,KAAKolC,WAAa,SAAW3oB,EAAO,KAAMzc,KAAKC,UAEhGD,KAAK6iC,aAGhBL,EAAc5rB,UAAUgxB,iBAAmB,SAAUnrB,GACjD,IAAK,GAAI7b,GAAI,EAAGA,EAAIZ,KAAK0iC,WAAW7hC,OAAQD,IAC7BZ,KAAK0iC,WAAW9hC,GAClB6b,OAASA,GACdzc,KAAK0iC,WAAWt6B,OAAOxH,EAAG,IAKtC4hC,EAAc5rB,UAAUixB,YAAc,SAAUJ,GAC5CznC,KAAK6iC,YAAY5vB,MAAMg2B,QAAU,QACjCjpC,KAAK6iC,YAAYlwB,UAAY80B,EAAUd,QACvC3mC,KAAKkpC,cAAczB,EAAUhrB,OAGjC+lB,EAAc5rB,UAAU6uB,YAAc,SAAUhpB,GACxCzc,KAAK6iC,cACL7iC,KAAK6iC,YAAY5vB,MAAMg2B,QAAU,OACjCjpC,KAAK4nC,iBAAiBnrB,GACtBzc,KAAKwF,aAAazB,UAAUxB,IAAIvC,KAAKqlC,YACrCrlC,KAAKwF,aAAazB,UAAUP,OAAOxD,KAAKolC,YACxCplC,KAAKwF,aAAa2J,aAAa,eAAgB,WAIvDqzB,EAAc5rB,UAAUsyB,cAAgB,SAAUzsB,GACzCzc,KAAK8jC,MAAMrnB,GAAMzc,KAAK4iC,WAAc5iC,KAAKwF,aAAapD,MAAMvB,QAAWa,oBAAkB1B,KAAK6iC,eAC/F7iC,KAAK6iC,YAAYlwB,UAAY3S,KAAKwF,aAAapD,MAC/CpC,KAAK6iC,YAAY1zB,aAAa,eAAgB,SAC9CnP,KAAKylC,YAAYhpB,KAIzB+lB,EAAcsE,YAAc,SAAU5yB,GAClC,GAAIi1B,GAAYj1B,EAAMnD,aAAa,OACnC,OAAOo4B,KAA4B,aAAdA,GAA0C,UAAdA,GAAuC,WAAdA,GAE9E,IAAI5E,EA8HJ,OA5HA/B,GAAc8F,gBACV1F,SAAU,SAAUwG,GAChB,MAAQzuB,OAAM0uB,KAAKpD,MAAMmD,EAAOhnC,QAAqDgnC,EAAOhnC,MAAM2b,WAAWld,OAAS,GAA3E8Z,MAAM,GAAI0uB,MAAKD,EAAOhnC,OAAOknC,YAE5ErG,MAAO,SAAUmG,GACb,MAAOpH,IAAMC,MAAMzhB,KAAK4oB,EAAOhnC,QAEnC8gC,IAAK,SAAUkG,GACX,MAAOpH,IAAME,IAAI1hB,KAAK4oB,EAAOhnC,QAEjCghC,QAAS,SAAUgG,GACf,MAAOpH,IAAMG,SAAS3hB,KAAK4oB,EAAOhnC,QAEtCuhC,IAAK,SAAUyF,GACX,MAAOpH,IAAMK,MAAM7hB,KAAK4oB,EAAOhnC,QAEnCihC,WAAY,SAAU+F,GAClB,MAAOpH,IAAMM,WAAW9hB,KAAK4oB,EAAOhnC,QAExCkhC,OAAQ,SAAU8F,GACd,OAAQzuB,MAAM+C,OAAO0rB,EAAOhnC,UAA0C,IAA/BgnC,EAAOhnC,MAAMiK,QAAQ,MAEhEk3B,OAAQ,SAAU6F,GACd,MAAOpH,IAAMI,OAAO5hB,KAAK4oB,EAAOhnC,QAEpCohC,UAAW,SAAU4F,GACjB,MAAOA,GAAOhnC,MAAMvB,QAAUuoC,EAAOhB,OAEzC3E,UAAW,SAAU2F,GACjB,MAAOA,GAAOhnC,MAAMvB,QAAUuoC,EAAOhB,OAEzC1E,YAAa,SAAU0F,GACnB,GAAIhB,GAAQgB,EAAOhB,KACnB,OAAOgB,GAAOhnC,MAAMvB,QAAUunC,EAAM,IAAMgB,EAAOhnC,MAAMvB,QAAUunC,EAAM,IAE3EzW,MAAO,SAAUyX,GACb,GAAIhB,GAAQgB,EAAOhB,KACnB,QAAQztB,MAAM+C,OAAO0rB,EAAOhnC,SAAWsb,OAAO0rB,EAAOhnC,QAAUgmC,EAAM,IAAM1qB,OAAO0rB,EAAOhnC,QAAUgmC,EAAM,IAE7GjF,KAAM,SAAUiG,GACZ,OAAQzuB,MAAM,GAAI0uB,MAAKD,EAAOhnC,OAAOknC,YAEzC3rB,IAAK,SAAUyrB,GACX,MAAKzuB,OAAM+C,OAAO0rB,EAAOhnC,QAKlB,GAAIinC,MAAKD,EAAOhnC,OAAOknC,WAAa,GAAID,MAAKrD,KAAKC,MAAMD,KAAKuD,UAAUH,EAAOhB,SAASkB,WAHlFF,EAAOhnC,OAASgnC,EAAOhB,OAKvC3qB,IAAK,SAAU2rB,GACX,GAAKzuB,MAAM+C,OAAO0rB,EAAOhnC,QAIpB,CAAA,IAAqC,IAAhCgnC,QAAc/8B,QAAQ,KAAa,CACzC,GAAIm9B,GAAQJ,QAAc3nC,QAAQ,KAAM,GACxC,OAAO4f,YAAWmoB,IAASJ,EAAOhB,MAIlC,MAAO,IAAIiB,MAAKD,EAAOhnC,OAAOknC,WAAa,GAAID,MAAKrD,KAAKC,MAAMD,KAAKuD,UAAUH,EAAOhB,SAASkB,UAR9F,OAAQF,EAAOhnC,OAASgnC,EAAOhB,OAWvCpG,MAAO,SAAUoH,GACb,MAAO,IAAIxnC,QAAOwnC,EAAOhB,OAAO5nB,KAAK4oB,EAAOhnC,QAEhDyhC,QAAS,SAAUuF,GACf,GAAIK,GAAYL,EAAO/lC,YAAYoD,cAAc,IAAM2iC,EAAOhB,MAE9D,OADAgB,GAAOhB,MAAQqB,EAAUrnC,MAClBgnC,EAAOhB,QAAUgB,EAAOhnC,QAGvC0U,IACIqQ,WAAS,KACVqb,EAAc5rB,UAAW,aAAU,IACtCE,IACIqQ,WAAS,aACVqb,EAAc5rB,UAAW,aAAU,IACtCE,IACIqQ,cACDqb,EAAc5rB,UAAW,YAAS,IACrCE,IACIqQ,WAAS,YACVqb,EAAc5rB,UAAW,iBAAc,IAC1CE,IACIqQ,WAAS,YACVqb,EAAc5rB,UAAW,iBAAc,IAC1CE,IACIqQ,WAAS,UACVqb,EAAc5rB,UAAW,mBAAgB,IAC5CE,IACIqQ,WAAS,QACVqb,EAAc5rB,UAAW,qBAAkB,IAC9CE,IACIqQ,WAASob,cAAYmH,QACtBlH,EAAc5rB,UAAW,kBAAe,IAC3CE,IACIsQ,WACDob,EAAc5rB,UAAW,eAAY,IACxCE,IACIsQ,WACDob,EAAc5rB,UAAW,YAAS,IACrCE,IACIsQ,WACDob,EAAc5rB,UAAW,YAAS,IACrCE,IACIsQ,WACDob,EAAc5rB,UAAW,aAAU,IACtCE,IACIsQ,WACDob,EAAc5rB,UAAW,aAAU,IACtCE,IACIsQ,WACDob,EAAc5rB,UAAW,sBAAmB,IAC/CE,IACIsQ,WACDob,EAAc5rB,UAAW,yBAAsB,IAClDE,IACIsQ,WACDob,EAAc5rB,UAAW,sBAAmB,IAC/C4rB,EAAgB+B,EAAkBztB,IAC9BuQ,yBACDmb,IAELmH,QCj1BE1zB,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB/E,OAAOkF,iBAChBC,uBAA2BC,QAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,MACpDL,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASM,KAAO1W,KAAK2W,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAajF,OAAO0F,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAYC,EAAQzN,EAAK0N,GAC7E,GAA2Hd,GAAvHe,EAAIC,UAAUtW,OAAQuW,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAO9F,OAAOkG,yBAAyBL,EAAQzN,GAAO0N,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQzN,EAAK0N,OACpH,KAAK,GAAIrW,GAAImW,EAAWlW,OAAS,EAAGD,GAAK,EAAGA,KAASuV,EAAIY,EAAWnW,MAAIwW,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQzN,EAAK6N,GAAKjB,EAAEa,EAAQzN,KAAS6N,EAChJ,OAAOF,GAAI,GAAKE,GAAKjG,OAAOqG,eAAeR,EAAQzN,EAAK6N,GAAIA,GAc5DwyB,GAAO,qBACPC,GAAS,gBAOTC,GAAc,oBACdC,GAAc,oBAEdC,GAAa,mBACbC,GAAa,oBAEbC,GAAmB,yBACnBC,GAAc,wBAGdC,GAAiB,mBACjBC,GAAgB,iBAQhBC,GAAe,mBAGftiB,IAAe,QAAS,QAAS,SAKjCuiB,GAA2B,SAAU1yB,GAErC,QAAS0yB,KACL,MAAkB,QAAX1yB,GAAmBA,EAAOsR,MAAMnpB,KAAMmX,YAAcnX,KAW/D,MAbAiW,IAAUs0B,EAAW1yB,GAIrBf,IACIqQ,WAAS,KACVojB,EAAU3zB,UAAW,WAAQ,IAChCE,IACIqQ,WAAS,OACVojB,EAAU3zB,UAAW,WAAQ,IAChCE,IACIqQ,WAAS,KACVojB,EAAU3zB,UAAW,WAAQ,IACzB2zB,GACTnhB,iBAEEohB,GAA8B,SAAU3yB,GAExC,QAAS2yB,KACL,MAAkB,QAAX3yB,GAAmBA,EAAOsR,MAAMnpB,KAAMmX,YAAcnX,KAW/D,MAbAiW,IAAUu0B,EAAc3yB,GAIxBf,IACIqQ,WAAS,cACVqjB,EAAa5zB,UAAW,aAAU,IACrCE,IACIqQ,WAAS,WACVqjB,EAAa5zB,UAAW,aAAU,IACrCE,IACIqQ,WAAS,UACVqjB,EAAa5zB,UAAW,YAAS,IAC7B4zB,GACTphB,iBAEEqhB,GAA+B,SAAU5yB,GAEzC,QAAS4yB,KACL,MAAkB,QAAX5yB,GAAmBA,EAAOsR,MAAMnpB,KAAMmX,YAAcnX,KAiB/D,MAnBAiW,IAAUw0B,EAAe5yB,GAIzBf,IACIqQ,WAAS,KACVsjB,EAAc7zB,UAAW,cAAW,IACvCE,IACIqQ,WAAS,KACVsjB,EAAc7zB,UAAW,gBAAa,IACzCE,IACIqQ,WAAS,IACVsjB,EAAc7zB,UAAW,gBAAa,IACzCE,IACIqQ,WAAS,IACVsjB,EAAc7zB,UAAW,iBAAc,IAC1CE,IACIqQ,WAAS,MACVsjB,EAAc7zB,UAAW,sBAAmB,IACxC6zB,GACTrhB,iBAcEshB,GAA0B,SAAU7yB,GASpC,QAAS6yB,GAAS5yB,EAAS7X,GACvB,GAAIsF,GAAQsS,EAAO5W,KAAKjB,KAAM8X,EAAS7X,IAAYD,IAiCnD,OAhCAuF,GAAMolC,aAAgBC,OAAQ,KAAMC,UAAU,EAAOn3B,UAAU,GAC/DnO,EAAMulC,qBACNvlC,EAAMwlC,gBACNxlC,EAAM2oB,QAAS,EACf3oB,EAAMylC,UAAW,EACjBzlC,EAAM0lC,cACN1lC,EAAM2lC,kBACN3lC,EAAMqqB,SAAW,IACjBrqB,EAAM4lC,YAAc,IACpB5lC,EAAM6lC,2BAA4B,EAClC7lC,EAAM6uB,OAAS,EACf7uB,EAAM8lC,oBAAsB,EAC5B9lC,EAAM+lC,MAAO,EACb/lC,EAAMgmC,iBACNhmC,EAAMimC,aAAe,cACrBjmC,EAAMkmC,eACNlmC,EAAMmmC,WAAa,EACnBnmC,EAAMomC,wBAAyB,EAC/BpmC,EAAMqmC,YAAc,EAMpBrmC,EAAMsmC,YAMNtmC,EAAMumC,aACNvmC,EAAMwmC,gBAAkBj0B,EACjBvS,EAitGX,MA3vGA0Q,IAAUy0B,EAAU7yB,GAoDpB6yB,EAAS9zB,UAAU+P,kBAAoB,SAAUC,EAASC,GACtD,IAAK,GAAI5V,GAAK,EAAGC,EAAKC,OAAOC,KAAKwV,GAAU3V,EAAKC,EAAGrQ,OAAQoQ,IAExD,OADWC,EAAGD,IAEV,IAAK,oBACDjR,KAAKgsC,cAAchsC,KAAKisC,mBACxBjsC,KAAKksC,UACL,MACJ,KAAK,UACDlsC,KAAKmsC,kBACL,MACJ,KAAK,WACDnsC,KAAKosC,sBACL,MACJ,KAAK,YACDpsC,KAAKqsC,SACLrsC,KAAKssC,kBACL,MACJ,KAAK,UACDtsC,KAAKwO,QAAQ+9B,OAAS7qC,oBAAkB1B,KAAKwO,QAAQ+9B,QAAU,GAAKvsC,KAAKwO,QAAQ+9B,OACjFvsC,KAAKwO,QAAQvK,MAAQvC,oBAAkB1B,KAAKwO,QAAQvK,OAAS,GAAKjE,KAAKwO,QAAQvK,MAC/EjE,KAAKwO,QAAQg+B,OAAS9qC,oBAAkB1B,KAAKwO,QAAQg+B,QAAU,GAAKxsC,KAAKwO,QAAQg+B,OACjFxsC,KAAKysC,uBACL,MACJ,KAAK,WACDzsC,KAAK0sC,mBACL1sC,KAAK2sC,gBACL,MACJ,KAAK,iBACD3sC,KAAK+Z,0BACL/Z,KAAKqc,0BACLrc,KAAK4sC,qBAAoB,EACzB,MACJ,KAAK,QACD5sC,KAAK6sC,oBACL,MACJ,KAAK,kBACD7sC,KAAK8sC,2BACL,MACJ,KAAK,WACD9sC,KAAKksC,UACL,MACJ,KAAK,cACL,IAAK,cACL,IAAK,aAGL,IAAK,mBACDlsC,KAAKksC,UACL,MACJ,KAAK,SACDlsC,KAAKoZ,KAAK4N,UAAUhnB,KAAKsZ,QACzBtZ,KAAK+sC,oBACL/sC,KAAKgtC,aAAex0B,WAAS,gBAAiBxY,KAAKoZ,KACnD,MACJ,KAAK,WACDpZ,KAAKovB,YAAYvI,EAAQvV,YAKzCo5B,EAAS9zB,UAAUm2B,kBAAoB,WAC/BrrC,oBAAkB1B,KAAKitC,YACc,gBAAzBjtC,MAAKwO,iBACbxO,KAAKktC,aAAax8B,UAAqC,cAAxB1Q,KAAKwO,QAAQ+9B,OACxCvsC,KAAKmtC,eAAe,UAAYntC,KAAKwO,QAAQ+9B,OACjDvsC,KAAKktC,aAAa/9B,aAAa,QAASnP,KAAKktC,aAAax8B,WACtD1Q,KAAKotC,gBAAkB1rC,oBAAkB1B,KAAKotC,cAAc3mC,cAAc,mBAC1EzG,KAAKotC,cAAc3mC,cAAc,gBAAiBkM,UAAY3S,KAAKmtC,eAAe,mBAG1FntC,KAAKqtC,mBAGb3C,EAAS9zB,UAAU02B,YAAc,SAAUtlC,GAEvC,IAAK,GADDoD,GACK6F,EAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKgtC,cAAe/7B,EAAKC,EAAGrQ,OAAQoQ,IAAM,CACxE,GAAI1H,GAAM2H,EAAGD,EACTjR,MAAKgtC,aAAazjC,KAASvB,IAC3BoD,EAAW7B,GAGnB,MAAO6B,IAEXs/B,EAAS9zB,UAAUy2B,eAAiB,WAGhC,GAAIrtC,KAAK6rC,SAAShrC,OAAS,IAAMa,oBAAkB1B,KAAKotC,cAAc3mC,cAAc,oBAChF,IAAK,GAAI7F,GAAI,EAAGA,EAAIZ,KAAK6rC,SAAShrC,OAAQD,IAC5BZ,KAAK6rC,SAASjrC,GAAG6F,cAAc,kBACjCkM,UAAY3S,KAAKmtC,eAAentC,KAAKstC,YAAYttC,KAAK8rC,UAAUlrC,GAAGonC,SAC3EhoC,KAAK8rC,UAAUlrC,GAAGonC,OAAShoC,KAAKmtC,eAAentC,KAAKstC,YAAYttC,KAAK8rC,UAAUlrC,GAAGonC,SAC9EhoC,KAAK6rC,SAASjrC,GAAGmD,UAAUC,SAASomC,KACpCpqC,KAAK6rC,SAASjrC,GAAG6F,cAAc,YAAY0I,aAAa,QAASnP,KAAKmtC,eAAe,WAErFntC,KAAK6rC,SAASjrC,GAAG6F,cAAc,qBAC/BzG,KAAK6rC,SAASjrC,GAAG6F,cAAc,YAAY0I,aAAa,QAASnP,KAAKmtC,eAAe,WAErFntC,KAAK6rC,SAASjrC,GAAG6F,cAAc,uBAC/BzG,KAAK6rC,SAASjrC,GAAG6F,cAAc,YAAY0I,aAAa,QAASnP,KAAKmtC,eAAe,WAErFntC,KAAK6rC,SAASjrC,GAAG6F,cAAc,uBAC/BzG,KAAK6rC,SAASjrC,GAAG6F,cAAc,YAAY0I,aAAa,QAASnP,KAAKmtC,eAAe,UAEpFntC,KAAKutC,aACNvtC,KAAKwtC,aAAa98B,UAAqC,WAAxB1Q,KAAKwO,QAAQg+B,OACxCxsC,KAAKmtC,eAAe,UAAYntC,KAAKwO,QAAQg+B,OACjDxsC,KAAKwtC,aAAar+B,aAAa,QAASnP,KAAKmtC,eAAe,WAC5DntC,KAAK2D,YAAY+M,UAAoC,UAAvB1Q,KAAKwO,QAAQvK,MACvCjE,KAAKmtC,eAAe,SAAWntC,KAAKwO,QAAQvK,MAChDjE,KAAK2D,YAAYwL,aAAa,QAASnP,KAAKmtC,eAAe,YAK3EzC,EAAS9zB,UAAU01B,iBAAmB,WAC9BtsC,KAAKytC,aACLt5B,SAAOnU,KAAKytC,YACZztC,KAAKytC,WAAa,KAClBztC,KAAK6rC,YACL7rC,KAAK0tC,eAAe1tC,KAAK8rC,WACrB9rC,KAAK2tC,gBACL3tC,KAAK4tC,sBACL5tC,KAAK6tC,sBACL7tC,KAAK8tC,6BAIjBpD,EAAS9zB,UAAUsB,UAAY,WAC3BlY,KAAKiZ,YAAe80B,OAAQ,YAAaC,MAAO,QAASC,OAAQ,SAC7DC,cAAe,qBAAsBC,mBAAoB,yBACzDC,mBAAoB,yBAA0BC,gBAAiB,2BAC/DC,oBAAqB,wBAAyBC,qBAAsB,6BACpEC,sBAAuB,4BAA6BC,qBAAsB,wBAAyBC,WAAY,YAC/GC,qBAAsB,kBAAmBC,MAAO,QAASprC,OAAQ,SAAUqrC,OAAQ,SAAUC,OAAQ,cACrGC,YAAa,qBAAsBC,MAAO,QAASC,OAAQ,SAAUC,MAAO,QAC5EC,iBAAkB,uBAAwBC,qBAAsB,yBAA0BC,WAAY,cACtGC,KAAM,QAEVtvC,KAAKoZ,KAAO,GAAIC,QAAK,WAAYrZ,KAAKiZ,WAAYjZ,KAAKsZ,QACvDtZ,KAAKgtC,aAAex0B,WAAS,gBAAiBxY,KAAKoZ,MACnDpZ,KAAKuvC,eACLvvC,KAAK+Z,0BACL/Z,KAAK4sC,qBAAoB,EACzB,IAAIr0B,GAAaC,WAAS,gBAAiBxY,KAAKC,QAEhD,IAA6B,iBAAzBD,KAAKC,QAAQ0E,QAA4B,CACzC,GAAIa,GAAexF,KAAKsO,cAAc,SAAW0F,OAAStL,KAAM,UAC5DQ,EAAQ,CACZ,KAAKA,EAAOA,EAAQlJ,KAAKC,QAAQF,WAAWc,OAAQqI,IAChD1D,EAAa2J,aAAanP,KAAKC,QAAQF,WAAWmJ,GAAO2P,SAAU7Y,KAAKC,QAAQF,WAAWmJ,GAAO4P,WAClGtT,EAAamN,UAAY3S,KAAKC,QAAQ0S,SAErCnN,GAAauT,aAAa,SAC3BvT,EAAa2J,aAAa,OAAQ,eAEtCnP,KAAKC,QAAQ6O,YAAYtJ,GACzBxF,KAAKC,QAAUuF,EACfmH,WAAS,gBAAiB4L,EAAYvY,KAAKC,SAG3CsY,EAAW,GAAGi3B,uBACT9tC,oBAAkB6W,EAAW,GAAGk3B,MAAMhzB,OAGjC/a,oBAAkB6W,EAAW,GAAGk3B,MAAMj/B,KAAO9O,oBAAkB6W,EAAW,GAAGk3B,MAAMhzB,MACzFzc,KAAKC,QAAQkP,aAAa,OAAQoJ,EAAW,GAAGk3B,MAAMj/B,IAGtDxQ,KAAKC,QAAQkP,aAAa,OAAQ,eANlCnP,KAAKC,QAAQkP,aAAa,OAAQoJ,EAAW,GAAGk3B,MAAMhzB,OAS1D/a,oBAAkB1B,KAAKC,QAAQ8Q,aAAa,UAC5C/Q,KAAKC,QAAQkP,aAAa,OAAQnP,KAAKC,QAAQ8Q,aAAa,OAE3D/Q,KAAKC,QAAQ8Y,aAAa,SAC3B/Y,KAAKC,QAAQkP,aAAa,OAAQ,QAEtCnP,KAAK8sC,4BACL9sC,KAAK0vC,YACDC,MAAO,SAEP3vC,KAAKC,QAAQ8Y,aAAa,cAC1B/Y,KAAK4vB,SAAW5vB,KAAKC,QAAQ8Q,aAAa,aAE9C/Q,KAAK4vC,YAAcpoC,UAAQuc,KAAKtH,KAChCzc,KAAKwrC,aAAexrC,KAAKC,QAAQ8Q,aAAa,SAElD25B,EAAS9zB,UAAU24B,aAAe,WAC9B,GAAIn6B,GAAYf,UAAQrU,KAAKC,QAAS,OACtC,KAAKyB,oBAAkB0T,GACnB,KAAOA,GAAaA,IAAcjD,SAAS09B,gBAAiBz6B,EAAYA,EAAUvJ,cACpD,SAAtBuJ,EAAUzQ,UACV3E,KAAKkuB,QAAS,EACdluB,KAAKqD,YAAc+R,EACnBA,EAAUjG,aAAa,UAAW,uBAClCiG,EAAUjG,aAAa,WAAY,yBAKnDu7B,EAAS9zB,UAAU4P,eAAiB,WAChC,MAAOxmB,MAAK0mB,cAAc,eAO9BgkB,EAAS9zB,UAAUsQ,cAAgB,WAC/B,MAAO,YAEXwjB,EAAS9zB,UAAUk2B,0BAA4B,WACvC9sC,KAAK8vC,iBACL9vC,KAAKC,QAAQkP,aAAa,YAAa,QACvCnP,KAAKC,QAAQkP,aAAa,kBAAmB,UAG7CnP,KAAKC,QAAQ2Q,gBAAgB,aAC7B5Q,KAAKC,QAAQ2Q,gBAAgB,qBASrC85B,EAAS9zB,UAAUyD,OAAS,WACxBra,KAAK+vC,qBACL/vC,KAAKgwC,mBACLhwC,KAAKqc,0BACLrc,KAAKqC,aACLrC,KAAKosC,uBACLpsC,KAAKgsC,cAAchsC,KAAKisC,mBACxBjsC,KAAKqsC,SACLrsC,KAAK6sC,qBACL7sC,KAAKmsC,mBACLnsC,KAAKovB,eAETsb,EAAS9zB,UAAUm5B,mBAAqB,WACpC/vC,KAAKktC,aAAeltC,KAAKsO,cAAc,UAAYgC,UAAW,cAAe0D,OAAStL,KAAQ,YAC9F1I,KAAKktC,aAAa/9B,aAAa,WAAYnP,KAAK4vB,UACX,gBAAzB5vB,MAAKwO,gBACbxO,KAAKktC,aAAa/5B,YAAuC,cAAxBnT,KAAKwO,QAAQ+9B,OAC1CvsC,KAAKmtC,eAAe,UAAYntC,KAAKwO,QAAQ+9B,OACjDvsC,KAAKktC,aAAa/9B,aAAa,QAASnP,KAAKktC,aAAax8B,YAG1D1Q,KAAKktC,aAAap+B,YAAY9O,KAAKwO,QAAQ+9B,QAE/CvsC,KAAKC,QAAQkP,aAAa,aAAc,aAE5Cu7B,EAAS9zB,UAAUi3B,oBAAsB,WACrC7tC,KAAKC,QAAQkP,aAAa,WAAY,MACtCnP,KAAK2tC,cAAgB3tC,KAAKsO,cAAc,OAASgC,UA1ZpC,qBA2ZbtQ,KAAKwtC,aAAextC,KAAKsO,cAAc,UAAYgC,UA1ZtC,iDA2ZT0D,OAAStL,KAAQ,SAAUsQ,SAAYhZ,KAAKmrC,eAChDnrC,KAAK2D,YAAc3D,KAAKsO,cAAc,UAAYgC,UA3ZtC,sCA4ZR0D,OAAStL,KAAQ,SAAUsQ,SAAYhZ,KAAKmrC,eAChDnrC,KAAK2tC,cAAc7+B,YAAY9O,KAAK2D,aACpC3D,KAAK2tC,cAAc7+B,YAAY9O,KAAKwtC,cACpCxtC,KAAKysC,wBACLzsC,KAAKotC,cAAct+B,YAAY9O,KAAK2tC,eACpC3tC,KAAKktC,aAAa3mB,OACbvmB,KAAKiwC,gBACNjwC,KAAKwtC,aAAan7B,QAEtBrS,KAAKkwC,0BAGTxF,EAAS9zB,UAAUu5B,6BAA+B,SAAUlwC,GACpDA,IAAYD,KAAKkuB,SACjBluB,KAAKktC,aAAa3mB,OAClBvmB,KAAK2tC,cAAgB1tC,EACrBD,KAAKwtC,aAAextC,KAAK2tC,cAAclnC,cAAc,sBACrDzG,KAAK2D,YAAc3D,KAAK2tC,cAAclnC,cAAc,qBACpDzG,KAAKwtC,aAAan7B,QAClBrS,KAAKowC,2BACLpwC,KAAKkwC,yBACLlwC,KAAK8tC,4BAGbpD,EAAS9zB,UAAUs5B,uBAAyB,WACxC5tC,eAAaC,IAAIvC,KAAKwtC,aAAc,QAASxtC,KAAKqwC,kBAAmBrwC,MACrEsC,eAAaC,IAAIvC,KAAK2D,YAAa,QAAS3D,KAAKswC,iBAAkBtwC,OAEvE0qC,EAAS9zB,UAAUw5B,yBAA2B,WAC1C9tC,eAAakB,OAAOxD,KAAKwtC,aAAc,QAASxtC,KAAKqwC,mBACrD/tC,eAAakB,OAAOxD,KAAK2D,YAAa,QAAS3D,KAAKswC,mBAExD5F,EAAS9zB,UAAUg3B,oBAAsB,WACjC5tC,KAAK2tC,gBACL3tC,KAAKowC,2BACLj8B,SAAOnU,KAAK2tC,eACZ3tC,KAAK2tC,cAAgB,OAG7BjD,EAAS9zB,UAAU61B,sBAAwB,WAUvC,GATqC,gBAAzBzsC,MAAKwO,gBACbxO,KAAKktC,aAAa/5B,YAAuC,cAAxBnT,KAAKwO,QAAQ+9B,OAC1CvsC,KAAKmtC,eAAe,UAAYntC,KAAKwO,QAAQ+9B,OACjDvsC,KAAKktC,aAAa/9B,aAAa,QAASnP,KAAKktC,aAAa/5B,eAG1DnT,KAAKktC,aAAav6B,UAAY,GAC9B3S,KAAKktC,aAAap+B,YAAY9O,KAAKwO,QAAQ+9B,SAE3CvsC,KAAKwtC,aAAc,CACnB,GAAI+C,GAAa7uC,oBAAkB1B,KAAKwO,QAAQg+B,QAAU,SAAWxsC,KAAKwO,QAAQg+B,MAClFxsC,MAAKwO,QAAQg+B,OAAS+D,EACe,gBAAzBvwC,MAAKwO,gBACbxO,KAAKwtC,aAAar6B,YAAuC,WAAxBnT,KAAKwO,QAAQg+B,OAC1CxsC,KAAKmtC,eAAe,UAAYntC,KAAKwO,QAAQg+B,OACjDxsC,KAAKwtC,aAAar+B,aAAa,QAASnP,KAAKwtC,aAAar6B,eAG1DnT,KAAKwtC,aAAa76B,UAAY,GAC9B3S,KAAKwtC,aAAa1+B,YAAY9O,KAAKwO,QAAQg+B,SAGnD,GAAIxsC,KAAK2D,YAAa,CAClB,GAAI6sC,GAAY9uC,oBAAkB1B,KAAKwO,QAAQvK,OAAS,QAAUjE,KAAKwO,QAAQvK,KAC/EjE,MAAKwO,QAAQvK,MAAQusC,EACe,gBAAxBxwC,MAAKwO,eACbxO,KAAK2D,YAAYwP,YAAsC,UAAvBnT,KAAKwO,QAAQvK,MACzCjE,KAAKmtC,eAAe,SAAWntC,KAAKwO,QAAQvK,MAChDjE,KAAK2D,YAAYwL,aAAa,QAASnP,KAAK2D,YAAYwP,eAGxDnT,KAAK2D,YAAYgP,UAAY,GAC7B3S,KAAK2D,YAAYmL,YAAY9O,KAAKwO,QAAQvK,UAItDymC,EAAS9zB,UAAUo5B,iBAAmB,WAClChwC,KAAKC,QAAQkP,aAAa,WAAY,KACtC,IAAIgN,GAAenc,KAAKsO,cAAc,QAAUgC,UAlfpC,iBAmfZtQ,MAAKC,QAAQ4L,cAAcgD,aAAasN,EAAcnc,KAAKC,SAC3DD,KAAKywC,gBAAkBzwC,KAAKsO,cAAc,OAASgC,UAlfxC,uBAmfXtQ,KAAKC,QAAQ4L,cAAcgD,aAAa7O,KAAKywC,gBAAiBzwC,KAAKC,SACnEkc,EAAarN,YAAY9O,KAAKC,SAC9BD,KAAKywC,gBAAgB3hC,YAAY9O,KAAKktC,cACtCltC,KAAKywC,gBAAgB3hC,YAAYqN,GACjCnc,KAAKotC,cAAgBptC,KAAKsO,cAAc,OAASgC,UA1fnC,+BA2fdtQ,KAAKywC,gBAAgB5kC,cAAcgD,aAAa7O,KAAKotC,cAAeptC,KAAKywC,iBACzEzwC,KAAKotC,cAAct+B,YAAY9O,KAAKywC,iBACpCzwC,KAAK0wC,eAEThG,EAAS9zB,UAAUi2B,mBAAqB,WACpC,GAAI7sC,KAAK2wC,MAAM9vC,OAAQ,CACnB,GAAIb,KAAK4wC,mBAAqB5wC,KAAK8rC,UAAUjrC,OAEzC,WADAb,MAAK0tC,eAAe1tC,KAAK8rC,UAG7B,IAAIpqC,oBAAkB1B,KAAK2wC,MAAM,GAAGrB,MAChC,MAEJtvC,MAAKiwC,gBAAiB,CACtB,IAAIU,MAAWxV,MAAMl6B,KAAKjB,KAAK2wC,OAC3B7E,IACC9rC,MAAK6qC,WACN7qC,KAAK6wC,YACLF,GAASA,EAAM,IAEnB,KAAK,GAAI1/B,GAAK,EAAG6/B,EAAUH,EAAO1/B,EAAK6/B,EAAQjwC,OAAQoQ,IAAM,CACzD,GAAI4zB,GAAOiM,EAAQ7/B,GACf8/B,GACAt0B,KAAMooB,EAAKpoB,KAAO,IAAMooB,EAAKn8B,KAAK/H,MAAM,KAAKkkC,EAAKn8B,KAAK/H,MAAM,KAAKE,OAAS,GAC3EmwC,QAAS,GACT1B,KAAMzK,EAAKyK,KACXtH,OAAQhoC,KAAKmtC,eAAe,wBAC5BzkC,KAAMm8B,EAAKn8B,KACXuoC,oBAAsBC,QAAS,GAAIC,QAAS,IAC5CC,WAAY,IAEhBtF,GAAU1qC,KAAK2vC,GACf/wC,KAAK8rC,UAAU1qC,KAAK2vC,GAExB/wC,KAAK0tC,eAAe5B,GACf9rC,KAAKutC,aAAcvtC,KAAKytC,YAAeztC,KAAK2tC,eAAmB3tC,KAAKkuB,SAAUluB,KAAKqxC,gBAAkBrxC,KAAKsxC,cAC3GtxC,KAAK6tC,sBAET7tC,KAAK8tC,0BACD9tC,KAAKuxC,mBACLvxC,KAAKo0B,MAAQp0B,KAAK8rC,UAAUjrC,OAAS,GAEzCb,KAAKiwC,gBAAiB,IAG9BvF,EAAS9zB,UAAUk3B,wBAA0B,WACzC,GAAI9tC,KAAK2tC,cAAe,CACpB,GAAI6D,GAAWxxC,KAAKotC,cAAcr4B,iBAAiB,uBAAwBlU,OACvEb,KAAKotC,cAAcr4B,iBAAiB,2CAA2ClU,OAC/Eb,KAAKotC,cAAcr4B,iBAAiB,QAAUq1B,IAAgBvpC,OAC9Db,KAAKotC,cAAcr4B,iBAAiB,0BAA6BlU,MACjE2wC,GAAW,GAAKA,IAAaxxC,KAAKotC,cAAcr4B,iBAAiB,MAAMlU,OACvEb,KAAKwtC,aAAar+B,aAAa,WAAY,YAG3CnP,KAAKwtC,aAAa58B,gBAAgB,cAI9C85B,EAAS9zB,UAAU85B,YAAc,WAC7B,GAAIe,GAAezxC,KAAKywC,gBAAgBhqC,cAAc,eACtD,IAAIzG,KAAK0xC,SAAU,CACf1xC,KAAK2xC,gBAA8C,gBAAnB3xC,eAA+BA,KAAK0xC,SAChEvN,SAAOnkC,KAAK0xC,SAAUv/B,SAG1B,KAFA,GAAIlS,GAAUD,KAAKC,QACf2xC,GAAiB,EACd3xC,EAAQuG,aACXvG,EAAUA,EAAQuG,cACFxG,KAAK2xC,kBACjBC,GAAiB,EACZH,EAIDA,EAAa9+B,UAAY3S,KAAKmtC,eAAe,iBAH7CntC,KAAK6xC,uBAOZD,GAAkBH,GACnBjuC,SAAOiuC,OAGL/vC,qBAAkB1B,KAAK+rC,sBAAsD1mC,KAAlCrF,KAAK+rC,gBAAgB2F,WACtE1xC,KAAK6xC,qBACL7xC,KAAK2xC,gBAAkB3xC,KAAKotC,cAC5BptC,KAAKwZ,eAAgBk4B,SAAU1xC,KAAKotC,gBAAiB,GAEzDptC,MAAK8xC,kBAETpH,EAAS9zB,UAAU+1B,eAAiB,WAChC,GAAI3sC,KAAK0xC,SACL1xC,KAAK0wC,kBAEJ,CACD1wC,KAAK2xC,gBAAkB,IACvB,IAAIF,GAAezxC,KAAKywC,gBAAgBhqC,cAAc,eAClDgrC,IACAjuC,SAAOiuC,KAInB/G,EAAS9zB,UAAUi7B,mBAAqB,WACpC,GAAIE,GAAe/xC,KAAKsO,cAAc,QAAUgC,UA/lBxC,eAgmBRyhC,GAAap/B,UAAY3S,KAAKmtC,eAAe,iBAC7CntC,KAAKywC,gBAAgB3hC,YAAYijC,IAErCrH,EAAS9zB,UAAUmD,wBAA0B,WACzC,IAAKrY,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI6L,GAAM5L,EAAGD,EACT+W,IAAY3b,QAAQyQ,GAAO,GAC3B9c,KAAKC,QAAQkP,aAAa2N,EAAK9c,KAAKqb,eAAeyB,MAKnE4tB,EAAS9zB,UAAUyF,wBAA0B,WACzC,IAAK3a,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI6L,GAAM5L,EAAGD,EACb,IAAI+W,GAAY3b,QAAQyQ,IAAQ,EAC5B,GAAY,UAARA,EAAiB,CACjB,GAAI0L,GAAsBxoB,KAAKqb,eAAeyB,GAAKrb,QAAQ,OAAQ,KAAM+I,MAC9C,MAAvBge,GACAvc,YAAUjM,KAAKotC,eAAgB5kB,EAAmB7nB,MAAM,UAG3D,IAAY,UAARmc,EAAiB,CACtB,GAAIk1B,GAAchyC,KAAKotC,cAAcr8B,aAAa+L,EAClDk1B,GAAetwC,oBAAkBswC,GAC7BhyC,KAAKqb,eAAeyB,GADyBk1B,EAAchyC,KAAKqb,eAAeyB,GAEnF9c,KAAKotC,cAAcj+B,aAAa2N,EAAKk1B,OAGrChyC,MAAKotC,cAAcj+B,aAAa2N,EAAK9c,KAAKqb,eAAeyB,MAM7E4tB,EAAS9zB,UAAUw1B,qBAAuB,WACtC,GAAIpsC,KAAK6qC,WAAa7qC,KAAKC,QAAQ8Y,aAAa,YAAa,CACzD,GAAIk5B,GAAU9/B,SAAS+/B,gBAAgB,WACvCD,GAAQ7vC,MAAQ,WAChBpC,KAAKC,QAAQkyC,iBAAiBF,OAExBjyC,MAAK6qC,UACX7qC,KAAKC,QAAQ2Q,gBAAgB,aAGrC85B,EAAS9zB,UAAUw7B,gBAAkB,SAAUrB,GACvC/wC,KAAKutC,YACDvtC,KAAKuxC,iBAELvxC,KAAKqyC,eAAetB,GAGpB/wC,KAAKwsC,OAAOuE,GAEhB/wC,KAAK4tC,uBAEC5tC,KAAK2tC,eACX3tC,KAAK6tC,sBAET7tC,KAAK8tC,2BAETpD,EAAS9zB,UAAUy7B,eAAiB,SAAUtB,GAC1C,GAAI/wC,KAAK8rC,UAAUjrC,OAASkwC,EAASlwC,QAAW,GACiC,MAA7Eb,KAAK8rC,UAAW9rC,KAAK8rC,UAAUjrC,OAASkwC,EAASlwC,OAAS,GAAIuwC,WAAoB,GAChFpxC,KAAKo0B,KACP,IAAIke,IAAoBtyC,KAAKsxC,YACa,iBAA/BtxC,MAAK8rC,UAAU9rC,KAAKo0B,QAC3Bp0B,KAAK2rC,wBAAyB,EAC9B3rC,KAAKwsC,OAAOxsC,KAAK8rC,UAAU9rC,KAAKo0B,OAAQke,GACM,MAA1CtyC,KAAK8rC,UAAU9rC,KAAKo0B,OAAOgd,YAC3BpxC,KAAKqyC,eAAetB,MAItB/wC,KAAKo0B,QAInBsW,EAAS9zB,UAAUwY,YAAc,SAAUC,GACvC,GAAIpT,GAAuBjc,KAAKsR,QAC3B5P,qBAAkB1B,KAAKsR,WAA+B,KAAlBtR,KAAKsR,WAC1C2K,EAAwBjc,KAAKsR,SAAS7P,QAAQ,OAAQ,KAAM+I,QAE3D9I,oBAAkB1B,KAAKsR,WAAsC,KAAzB2K,GACrChQ,YAAUjM,KAAKotC,eAAgBnxB,EAAqBtb,MAAMsb,EAAqB5P,QAAQ,MAAQ,EAAI,IAAM,KAE7G,IAAIkmC,GAAqBljB,CACpB3tB,qBAAkB2tB,KACnBkjB,EAAsBljB,EAAY5tB,QAAQ,OAAQ,KAAM+I,QAEvD9I,oBAAkB2tB,IAAuC,KAAvBkjB,GACnC5rC,eAAa3G,KAAKotC,eAAgBmF,EAAmB5xC,MAAM,OAGnE+pC,EAAS9zB,UAAUvU,WAAa,WAC5BC,eAAaC,IAAIvC,KAAKktC,aAAc,QAASltC,KAAKwyC,kBAAmBxyC,MACrEsC,eAAaC,IAAIvC,KAAKC,QAAS,SAAUD,KAAKyyC,cAAezyC,MAC7DsC,eAAaC,IAAI4P,SAAU,QAASnS,KAAK0yC,YAAa1yC,MACtDA,KAAK2yC,eAAiB,GAAIC,kBAAe5yC,KAAKotC,eAC1CyF,UAAW7yC,KAAK8yC,iBAAiB9b,KAAKh3B,MACtC0vC,WAAY1vC,KAAK0vC,WACjBnS,UAAW,YAEXv9B,KAAKkuB,QACL5rB,eAAaC,IAAIvC,KAAKqD,YAAa,QAASrD,KAAK+yC,UAAW/yC,OAGpE0qC,EAAS9zB,UAAUo8B,aAAe,WAC9B1wC,eAAakB,OAAOxD,KAAKktC,aAAc,QAASltC,KAAKwyC,mBACrDlwC,eAAakB,OAAOxD,KAAKC,QAAS,SAAUD,KAAKyyC,eACjDnwC,eAAakB,OAAO2O,SAAU,QAASnS,KAAK0yC,aACxC1yC,KAAKkuB,QACL5rB,eAAakB,OAAOxD,KAAKqD,YAAa,QAASrD,KAAK+yC,WAEpD/yC,KAAK2yC,gBACL3yC,KAAK2yC,eAAezsB,WAG5BwkB,EAAS9zB,UAAUm8B,UAAY,WAC3B/yC,KAAKksC,YAETxB,EAAS9zB,UAAUk8B,iBAAmB,SAAUjvC,GAC5C,GAAIovC,GAAgBpvC,EAAEmT,MACtB,QAAQnT,EAAEya,QACN,IAAK,QACD,GAAIza,EAAEmT,SAAWhX,KAAK2D,YAClB3D,KAAKswC,uBAEJ,IAAIzsC,EAAEmT,SAAWhX,KAAKwtC,aACvBxtC,KAAKqwC,wBAEJ,IAAIxsC,EAAEmT,SAAWhX,KAAKktC,aACvBltC,KAAKwyC,wBAEJ,IAAIS,EAAclvC,UAAUC,SAASsmC,KAClC4I,EAAWlzC,KAAKmzC,mBAAmB,KAAMtvC,IACpCuvC,KAAKhC,WAAa,IAC3B8B,EAASE,KAAKpL,OAAShoC,KAAKmtC,eAAe,eAC3CntC,KAAKqzC,YAAYH,GAAU,OAE1B,IAAID,EAAclvC,UAAUC,SA/sB7B,mBAgtBAhE,KAAKszC,aAAatzC,KAAKmzC,mBAAmB,KAAMtvC,GAAIA,OAEnD,IAAIovC,EAAclvC,UAAUC,SAASimC,IAAa,CACnD,GAAIiJ,GAAWlzC,KAAKmzC,mBAAmB,KAAMtvC,EAC7C,IAAKnC,oBAAkBwxC,GAKlB,CACD,GAAIl8B,GAASnT,EAAEmT,OAAOnL,cAClBklC,EAAW/wC,KAAK8rC,UAAU9rC,KAAK6rC,SAASx/B,QAAQ2K,GACpDhX,MAAKkvC,MAAM6B,OAPXmC,GAASE,KAAKhC,WAAa,IAC3B8B,EAASE,KAAKpL,OAAShoC,KAAKmtC,eAAe,wBAC3CntC,KAAKuzC,YAAYL,EAASE,UAS9BpzC,MAAKwzC,YAAY3vC,GACZovC,EAAclvC,UAAUC,SAASgmC,KAClChqC,KAAKktC,aAAa76B,OAG1BxO,GAAEC,iBACFD,EAAEsc,oBAIduqB,EAAS9zB,UAAUu8B,mBAAqB,SAAUM,EAAU5vC,GACxD,GAAIktC,GACA2C,CACJ,IAAIhyC,oBAAkB+xC,GAAW,CAC7B,GAAIz8B,GAASnT,EAAEmT,OAAOnL,aACtBklC,GAAW/wC,KAAK8rC,UAAU9rC,KAAK6rC,SAASx/B,QAAQ2K,QAGhD+5B,GAAW0C,CAEf,KAAK,GAAI7yC,GAAI,EAAGA,EAAIZ,KAAKkrC,eAAerqC,OAAQD,IACxCZ,KAAKkrC,eAAetqC,GAAGwyC,KAAK32B,OAASs0B,EAASt0B,OAC9Ci3B,EAAiB1zC,KAAKkrC,eAAetqC,GAG7C,OAAO8yC,IAEXhJ,EAAS9zB,UAAU87B,YAAc,WACzB1yC,KAAKotC,eAAiBptC,KAAKytC,YAAcztC,KAAKytC,WAAWhnC,cAAc,yBACvE0L,SAASC,cAAcmU,OACvBvmB,KAAKytC,WAAWhnC,cAAc,uBAAoB1C,UAAUP,OAjwBrD,wBAowBfknC,EAAS9zB,UAAU47B,kBAAoB,WACnCxyC,KAAKC,QAAQ0zC,SAEjBjJ,EAAS9zB,UAAUy5B,kBAAoB,WAC/BrwC,KAAKuxC,iBACLvxC,KAAKqyC,eAAeryC,KAAK8rC,WAGzB9rC,KAAKwsC,OAAOxsC,KAAK8rC,YAGzBpB,EAAS9zB,UAAU05B,iBAAmB,WAClCtwC,KAAKksC,WAEDlsC,KAAKuxC,mBACLvxC,KAAKo0B,OAAS,GAElBp0B,KAAKqrC,oBAAsB,GAE/BX,EAAS9zB,UAAUk7B,eAAiB,WAC5B9xC,KAAK2xC,kBACLrvC,eAAaC,IAAIvC,KAAK2xC,gBAAiB,OAAQ3xC,KAAK4zC,YAAa5zC,MACjEsC,eAAaC,IAAIvC,KAAK2xC,gBAAiB,WAAY3xC,KAAK6zC,UAAW7zC,MACnEsC,eAAaC,IAAIvC,KAAK2xC,gBAAiB,YAAa3xC,KAAK8zC,YAAa9zC,MACtEsC,eAAaC,IAAIvC,KAAK2xC,gBAAiB,QAAS3xC,KAAK+zC,YAAa/zC,MAClEsC,eAAaC,IAAIvC,KAAK2xC,gBAAiB,YAAa3xC,KAAKg0C,YAAah0C,QAG9E0qC,EAAS9zB,UAAU81B,iBAAmB,WAC9B1sC,KAAK2xC,kBACLrvC,eAAakB,OAAOxD,KAAK2xC,gBAAiB,OAAQ3xC,KAAK4zC,aACvDtxC,eAAakB,OAAOxD,KAAK2xC,gBAAiB,WAAY3xC,KAAK6zC,WAC3DvxC,eAAakB,OAAOxD,KAAK2xC,gBAAiB,YAAa3xC,KAAK8zC,aAC5DxxC,eAAakB,OAAOxD,KAAK2xC,gBAAiB,YAAa3xC,KAAKg0C,eAGpEtJ,EAAS9zB,UAAUo9B,YAAc,SAAUnwC,GAClC7D,KAAKmD,UAGVnD,KAAK2xC,gBAAgB5tC,UAAUxB,IAxzBtB,uBAyzBTvC,KAAK4rC,YAAc5rC,KAAK4rC,YAAc,EACtC/nC,EAAEC,iBACFD,EAAEsc,oBAENuqB,EAAS9zB,UAAUk9B,YAAc,WACxB9zC,KAAKmD,UAGVnD,KAAK4rC,YAAc5rC,KAAK4rC,YAAc,EACjC5rC,KAAK4rC,aACN5rC,KAAK2xC,gBAAgB5tC,UAAUP,OAn0B1B,yBAs0BbknC,EAAS9zB,UAAUi9B,UAAY,SAAUhwC,GAChC7D,KAAKmD,UAGc,YAApBnD,KAAKi0C,aACLpwC,EAAEqwC,aAAaD,WAAaj0C,KAAKi0C,WAAW1nC,eAEhD1I,EAAEC,iBACFD,EAAEsc,oBAGNuqB,EAAS9zB,UAAUg9B,YAAc,SAAU/vC,GACvC7D,KAAK4rC,YAAc,EACnB5rC,KAAK2xC,gBAAgB5tC,UAAUP,OAn1BtB,uBAo1BTxD,KAAKyyC,cAAc5uC,GACnBA,EAAEC,iBACFD,EAAEsc,mBAGNuqB,EAAS9zB,UAAUm9B,YAAc,SAAU7vC,GACvC,GAAIiwC,GAAOjwC,EAAMkwC,cAAcC,KAC/B,IAAoB,IAAhBF,EAAKtzC,OAAT,CAGA,GAAIyzC,MAAenZ,MAAMl6B,KAAKkzC,GAAM,EACZ,UAAnBG,EAAUC,MAAoBD,EAAU5rC,KAAK5G,MAAM,YACpD9B,KAAKw0C,oBAAoBtwC,GAAQowC,EAAUG,cAAc,GAAO,KAGxE/J,EAAS9zB,UAAU89B,iBAAmB,SAAUxrC,GAM5C,IAAK,GALD27B,MACA8P,EAAY30C,KAAK6rC,SAAS3iC,GAC1B0rC,EAAW50C,KAAK60C,eAChBC,GAAgBH,EAAU5jC,aAAa,oBACvC1M,EAAa,EACRzD,EAAI,EAAGA,EAAIsI,EAAOtI,IACvByD,IAAgBrE,KAAK6rC,SAASjrC,GAAGmQ,aAAa,mBAElD,KAAK,GAAIhQ,GAAIsD,EAAYtD,EAAKsD,EAAaywC,EAAe/zC,IACtD8jC,EAAKzjC,KAAKwzC,EAAS7zC,GAEvB,OAAO8jC,IAEX6F,EAAS9zB,UAAU48B,YAAc,SAAU3mC,GACvC,GAAK7M,KAAKmD,QAAV,CAGA,GAAI4xC,GAAkBloC,EAAKmK,OAAOnL,cAC9B3C,EAAQlJ,KAAK6rC,SAASx/B,QAAQ0oC,GAC9BJ,EAAY30C,KAAK6rC,SAAS3iC,GAC1B8rC,EAAah1C,KAAKi1C,eAClBlE,EAAWiE,EAAah1C,KAAK00C,iBAAiBxrC,GAASlJ,KAAKk1C,gBAAgBl1C,KAAK8rC,UAAU5iC,GAC/F,KAAIxH,oBAAkBqvC,GAAtB,CAGA,GAAIlkC,EAAKmK,OAAOjT,UAAUC,SAASgmC,MAAgBgL,EAAY,CAE3D,GADAjE,EAAS,GAAGK,WAAa,KACpB1vC,oBAAkBizC,GAAY,CAC/B,GAAIQ,GAAgBR,EAAUluC,cAAc,IAAMujC,GAClDoL,kBAAgBp+B,OAAQm+B,EAAeniC,MAAO,SAC9CqiC,cAAYF,GAEZn1C,KAAKuxC,kBAELvxC,KAAKs1C,mBAEHX,EAAU5wC,UAAUC,SAx3BjB,qBAy3BLhE,KAAKu1C,qBAAoB,OAGvBlhC,WAAQxH,EAAKmK,OAAQ,oBAC3BhX,KAAKwD,OAAOutC,GAAU,GAAO,GAAO,EAAMlkC,EAE9C7M,MAAKC,QAAQmC,MAAQ,GACrBpC,KAAK8tC,6BAETpD,EAAS9zB,UAAU4+B,gBAAkB,SAAUpC,EAAMqC,GACjD,GAAIvsC,EACJ,IAAIusC,EAKA,YAJKz1C,KAAKsxC,eACNpoC,EAAQlJ,KAAK8rC,UAAUz/B,QAAQ+mC,GAC/BpzC,KAAK8rC,UAAU1jC,OAAOc,EAAO,IAIrC,IAAI6rC,GAAkB/0C,KAAK01C,aAAatC,EACpC1xC,qBAAkBqzC,KAGtB5gC,SAAO4gC,GACP7rC,EAAQlJ,KAAK6rC,SAASx/B,QAAQ0oC,GAC9B/0C,KAAK6rC,SAASzjC,OAAOc,EAAO,GAC5BlJ,KAAK8rC,UAAU1jC,OAAOc,EAAO,GACA,IAAzBlJ,KAAK6rC,SAAShrC,QAAiBa,oBAAkB1B,KAAKytC,cACtDt5B,SAAOnU,KAAKytC,YACZztC,KAAKytC,WAAa,KAClBztC,KAAK4tC,uBAEL5tC,KAAKuxC,kBAEDroC,GAASlJ,KAAKo0B,SACZp0B,KAAKo0B,QAInBsW,EAAS9zB,UAAU++B,mBAAqB,SAAUvC,EAAMxtC,EAAWgwC,EAAgBC,GAC/E,GAAItwC,GAAQvF,KACRurC,EAAgB6H,EAChB0C,EAAO,GAAIC,QAAK/1C,KAAKg2C,cAAcC,UAAW,QAAQ,EAAM,KAChEH,GAAKI,WAAY,CACjB,IAAIC,GAAW,GAAIC,SACnBN,GAAKO,WAAa,SAAUxyC,GACxB+B,EAAU0wC,eAAiBR,EAAKS,YAC3BX,EAWDrwC,EAAMixC,sBAAsB5wC,EAAWuwC,EAAU5K,EAAe6H,GAVhE7tC,EAAMa,QAAQ,WAAYR,EAAW,SAAUA,GACvCA,EAAUipC,OACVhrC,EAAEgrC,QAAS,EAGXtpC,EAAMixC,sBAAsB5wC,EAAWuwC,EAAU5K,EAAe6H,MAQhF0C,EAAKW,OAAS,SAAU5yC,GAEpB,MADA0B,GAAMmxC,gBAAgB7yC,EAAG0nC,EAAesK,OAI5CC,EAAKa,QAAU,SAAU9yC,GAErB,MADA0B,GAAMqxC,aAAa/yC,EAAG0nC,EAAesK,OAGzCC,EAAKe,KAAKV,IAEdzL,EAAS9zB,UAAU4/B,sBAAwB,SAAU5wC,EAAWuwC,EAAU5K,EAAe6H,GAErF,GAAI32B,GAAOzc,KAAKC,QAAQ8Q,aAAa,QACjC4jC,EAAY30C,KAAK01C,aAAatC,EAClC,MAAK1xC,oBAAkBizC,IAAgBjzC,oBAAkBizC,EAAUluC,cAAc,IAAMsjC,MAClFroC,oBAAkBizC,EAAUluC,cAAc,IAAMqjC,MAAgB,CACjE,GAAIqL,GAAgBR,EAAUluC,cAAc,IAAMsjC,IAC9C4K,EAAUluC,cAAc,IAAMsjC,IAC9B4K,EAAUluC,cAAc,IAAMqjC,GAClCsL,kBAAgBp+B,OAAQm+B,EAAeniC,MAAO,SAC9CqiC,cAAYF,GAEZvvC,EAAUkxC,cAAgBp1C,oBAAkB6pC,EAAcyF,UAAsC,KAA1BzF,EAAcyF,QACpFmF,EAASY,OAAOt6B,EAAM8uB,EAAcyF,QAASzF,EAAc9uB,MAG3D05B,EAASY,OAAOt6B,EAAM8uB,EAAc9uB,MAExCzc,KAAKg3C,eAAeb,EAAUvwC,EAAUqxC,iBAG5CvM,EAAS9zB,UAAUogC,eAAiB,SAAUb,EAAUe,GACpD,GAAIA,EAAWr2C,OAAS,GAAKq2C,EAAW,GASpC,IAAK,GAAIt2C,GAAI,EAAGA,EAAIs2C,EAAWr2C,OAAQD,KARzB,SAAUA,GACpB,GAAIikC,GAAOqS,EAAWt2C,GAElBwB,EAAQ+O,OAAOC,KAAKyzB,GAAMrH,IAAI,SAAU35B,GACxC,MAAOghC,GAAKhhC,IAEhBsyC,GAASY,OAAO5lC,OAAOC,KAAKyzB,GAAM,GAAIziC,IAG9BxB,IAKpB8pC,EAAS9zB,UAAUugC,mBAAqB,SAAUC,EAASd,GACvD,GAAIA,EAAez1C,OAAS,GAAKy1C,EAAe,GAS5C,IAAK,GAAI11C,GAAI,EAAGA,EAAI01C,EAAez1C,OAAQD,KAR7B,SAAUA,GACpB,GAAIikC,GAAOyR,EAAe11C,GAEtBwB,EAAQ+O,OAAOC,KAAKyzB,GAAMrH,IAAI,SAAU35B,GACxC,MAAOghC,GAAKhhC,IAEhBuzC,GAAQC,iBAAiBlmC,OAAOC,KAAKyzB,GAAM,GAAIziC,IAGvCxB,IAIpB8pC,EAAS9zB,UAAU8/B,gBAAkB,SAAU7yC,EAAG8sC,EAAO8E,GACrD,GAAI6B,GAAWzzC,GAAKA,EAAEshB,cAAgBnlB,KAAKu3C,YAAY1zC,GAAK,KACxDmkC,EAASnkC,EAAEmT,MACf,IAA0B,IAAtBgxB,EAAOwP,YAAoBxP,EAAOA,QAAU,KAAOA,EAAOA,QAAU,IAAK,CACzE,GAAIn7B,IACAhJ,EAAGA,EAAGyzC,SAAUA,EAAU/4B,UAAW,SAAU60B,KAAMpzC,KAAKy3C,aAAa9G,EAAO3wC,KAAKmtC,eAAe,yBAA0B,KAEhIntC,MAAKoG,QAAQ,UAAWyG,GACxB7M,KAAKw1C,gBAAgB7E,EAAO8E,EAC5B,IAAIvsC,GAAQlJ,KAAK8qC,kBAAkBz+B,QAAQskC,EAC3C3wC,MAAK8qC,kBAAkB1iC,OAAOc,EAAO,GACrClJ,KAAKoG,QAAQ,UAAYuqC,MAAO3wC,KAAK8qC,wBAGrC9qC,MAAK42C,aAAa/yC,EAAG8sC,EAAO8E,IAGpC/K,EAAS9zB,UAAUggC,aAAe,SAAU/yC,EAAG8sC,EAAO8E,GAClD,GACI5oC,IACAhJ,EAAGA,EAAGyzC,SAFKzzC,GAAKA,EAAEshB,cAAgBnlB,KAAKu3C,YAAY1zC,GAAK,KAE9B0a,UAAW,SAAU60B,KAAMpzC,KAAKy3C,aAAa9G,EAAO3wC,KAAKmtC,eAAe,wBAAyB,KAE/H,KAAKsI,EAAgB,CACjB,GAAIvsC,GAAQlJ,KAAK8rC,UAAUz/B,QAAQskC,GAC/B+G,EAAc13C,KAAK6rC,SAAS3iC,EAChC,IAAIwuC,EAAa,CACbA,EAAY3zC,UAAUP,OAAO4mC,IAC7BsN,EAAY3zC,UAAUxB,IAAI8nC,GAC1B,IAAIsN,GAAgBD,EAAYjxC,cAAc,IAAMojC,GAChD8N,KACAA,EAAc5zC,UAAUP,OAAO4mC,IAC/BuN,EAAc5zC,UAAUxB,IAAI8nC,KAGpCrqC,KAAK8tC,0BAET9tC,KAAKoG,QAAQ,UAAWyG,EACxB,IAAI8nC,GAAY30C,KAAK01C,aAAa/E,EAElC,KAAKjvC,oBAAkBizC,KAAejzC,oBAAkBizC,EAAUluC,cAAc,IAAMsjC,KAAe,CACjG,GAAIoL,GAAgBR,EAAUluC,cAAc,IAAMsjC,GAClD6N,eAAYzC,GACZhhC,SAAOwgC,EAAUluC,cAAc,sBAIvCikC,EAAS9zB,UAAUihC,mBAAqB,SAAU3zC,GAC9ClE,KAAK83C,eACL,IAAIzD,GAAQr0C,KAAK6qC,SACb3mC,EAAMgwC,aAAaG,OAASnwC,EAAMgwC,aAAaG,MAAM,GAEzD,IAD2Br0C,KAAK+3C,qBAAqB1D,GAmBrD,IAAK,GADD2D,GAASh4C,KACJY,EAAI,EAAGA,EAAIyzC,EAAMxzC,OAAQD,KAfpB,SAAUA,GACpB,GAAIuzC,GAAOE,EAAMzzC,GAAGq3C,kBACpB,IAAI9D,EAAK+D,OAAQ,CACb,GAAIC,KACJ,GAAO/E,KAAK,SAAUgF,GAClB,GAAIC,GAAOlE,EAAKmE,QAChBH,GAAQ/2C,MAAOi3C,KAAQA,EAAMjF,KAAQgF,MAEzCJ,EAAOxD,oBAAoBtwC,EAAOi0C,GAAS,OAEtChE,GAAKoE,aACVP,EAAOQ,iBAAiBrE,EAAMjwC,IAK1BtD,IAIhB8pC,EAAS9zB,UAAUmhC,qBAAuB,SAAU1D,GAChD,IAAK,GAAIzzC,GAAI,EAAGyzC,GAASzzC,EAAIyzC,EAAMxzC,OAAQD,IAEvC,GADWyzC,EAAMzzC,GAAGq3C,mBACXM,YACL,OAAO,CAGf,QAAO,GAIX7N,EAAS9zB,UAAU4hC,iBAAmB,SAAUrE,EAAMjwC,GAElD,GAAIiwC,EAAK+D,OACLl4C,KAAK83C,aAAa12C,KAAK+yC,OAEtB,IAAIA,EAAKoE,YAAa,CACvB,GAAIE,GAAkBtE,EAAKuE,cAC3B14C,MAAK24C,sBAAsBF,EAAiBv0C,KAIpDwmC,EAAS9zB,UAAU+hC,sBAAwB,SAAUF,EAAiBv0C,GAClE,GAAIqB,GAAQvF,IACZy4C,GAAgBG,YAAY,SAAUC,GAClC,IAAK,GAAIj4C,GAAI,EAAGA,EAAIi4C,EAAQh4C,OAAQD,IAChC2E,EAAMizC,iBAAiBK,EAAQj4C,GAAIsD,EAEvCqB,GAAMuzC,iBAAiB50C,GACnB20C,EAAQh4C,QACR0E,EAAMozC,sBAAsBF,MAIxC/N,EAAS9zB,UAAUkiC,iBAAmB,SAAU50C,GAgB5C,IAAK,GAfDqB,GAAQvF,KACR2wC,KAaAoI,EAAS/4C,KACJY,EAAI,EAAGA,EAAIZ,KAAK83C,aAAaj3C,OAAQD,KAbhC,SAAUA,GACpBm4C,EAAOjB,aAAal3C,GAAGwyC,KAAK,SAAUgF,GAClC,GAAI7yC,EAAMuyC,aAAaj3C,OAAQ,CAC3B,GAAIw3C,GAAO9yC,EAAMuyC,aAAal3C,GAAG03C,QACjC3H,GAAMvvC,MAAOi3C,KAAQA,EAAMjF,KAAQgF,IAC/Bx3C,IAAM2E,EAAMuyC,aAAaj3C,OAAS,IAClC0E,EAAMuyC,gBACNvyC,EAAMivC,oBAAoBtwC,EAAOysC,GAAO,QAO5C/vC,IAGhB8pC,EAAS9zB,UAAU67B,cAAgB,SAAU5lC,GACzC,GAAK7M,KAAKmD,QAAV,CAGA,GAAI61C,EAEJ,IAAkB,SAAdnsC,EAAKnE,KACL,GAAI1I,KAAK8vC,gBACL9vC,KAAK63C,mBAAmBhrC,OAEvB,CACD,GAAI8jC,GAAQ3wC,KAAKi5C,cAAgBpsC,EAAKqnC,aAAavD,KAC1B,UAArB3wC,KAAK4vC,aAA+C,SAArB5vC,KAAK4vC,aAA+C,WAArB5vC,KAAK4vC,cACnE5vC,KAAKC,QAAQ0wC,MAAQA,GAErBA,EAAM9vC,OAAS,IACfm4C,EAAch5C,KAAK6qC,SAAW7qC,KAAKk5C,aAAavI,IAAUA,EAAM,IAChE3wC,KAAKw0C,oBAAoB3nC,EAAMmsC,QAKvCA,MAAiB7d,MAAMl6B,KAAK4L,EAAKmK,OAAO25B,OACxC3wC,KAAKw0C,oBAAoB3nC,EAAMmsC,KAIvCtO,EAAS9zB,UAAUuiC,UAAY,SAAU/F,GACrC,MAAO,IAAIgG,SAAQ,SAAUC,EAASC,GAClC,GAAIC,GAAa,GAAIC,WACrBD,GAAWE,cAAcrG,GACzBmG,EAAWG,OAAS,WAAc,MAAOL,GAAQE,EAAW9mC,SAC5D8mC,EAAWI,QAAU,SAAUC,GAAS,MAAON,GAAOM,OAK9DlP,EAAS9zB,UAAU49B,oBAAsB,SAAU3nC,EAAMmsC,EAAaa,EAAWC,GAC7E,GAAIv0C,GAAQvF,IACZA,MAAK+qC,eACL,IAAInlC,IACA1B,MAAO2I,EACPgiC,QAAQ,EACR/C,aACAiO,YAAY,EACZC,qBACAC,iBAAkB,GAClBC,YAAY,EACZ5D,eAAgB,KAChBW,eAAgB,KAGpB,IAAI+B,EAAYn4C,OAAS,EAGrB,MAFA+E,GAAUs0C,YAAa,MACvBl6C,MAAKoG,QAAQ,WAAYR,EAG7B5F,MAAKsrC,MAAO,CACZ,IAAIyF,KACC/wC,MAAK6qC,WACN7qC,KAAK6wC,WAAU,GACfmI,GAAeA,EAAY,IAE/B,KAAK,GAAIp4C,GAAI,EAAGA,EAAIo4C,EAAYn4C,OAAQD,IAAK,CACzC,GAAIwyC,GAAOyG,EAAYb,EAAYp4C,GAAGwyC,KAAO4F,EAAYp4C,EACzDZ,MAAKm6C,yBAAyBttC,EAAMmsC,EAAa5F,EAAMxyC,EAAGmwC,EAAU8I,EAAWC,GAEnFl0C,EAAUkmC,UAAYiF,EAClB/wC,KAAKisC,kBAAkB5/B,QAAQ,MAAQ,IACvCrM,KAAKgrC,UAAW,GAEfhrC,KAAKgrC,WACN+F,EAAW/wC,KAAKo6C,eAAerJ,IAEnC/wC,KAAKoG,QAAQ,WAAYR,EAAW,SAAUA,GAC1CL,EAAM80C,sBAAsBz0C,EAAWmrC,MAG/CrG,EAAS9zB,UAAUujC,yBAA2B,SAAUttC,EAExDmsC,EAAa5F,EAAMxyC,EAAGmwC,EAAU8I,EAAWC,GACvC,GAGIQ,IACA79B,KAJWo9B,EAAYb,EAAYp4C,GAAGy3C,KAAKt2C,UAAU,EAAGi3C,EAAYp4C,GAAGy3C,KAAKx3C,QAAUi5C,EACtFS,cAAYnH,EAAK32B,KAAK1a,UAAU,EAAGqxC,EAAK32B,KAAK6E,YAAY,OAAS,IAAMthB,KAAKw6C,YAAYpH,EAAK32B,MAC9Fzc,KAAK8vC,gBAAkBkJ,EAAYp4C,GAAG65C,mBAAqBrH,EAAK32B,KAGhEu0B,QAASoC,EACT9D,KAAM8D,EAAK9D,KACXtH,OAAQhoC,KAAKmtC,eAAe,wBAC5BzkC,KAAM1I,KAAKw6C,YAAYpH,EAAK32B,MAC5Bw0B,mBAAoBjxC,KAAK06C,kBAAkBtH,EAAK9D,MAChD8B,WAAY,IACZ5gC,GAAI+pC,cAAYnH,EAAK32B,KAAK1a,UAAU,EAAGqxC,EAAK32B,KAAK6E,YAAY,OAAS,IAAMthB,KAAKw6C,YAAYpH,EAAK32B,MAGlGq9B,KACAQ,EAAYK,WAAa,SAE7BL,EAAYtS,OAAoD,KAA3CsS,EAAYrJ,mBAAmBC,QAAiBlxC,KAAKmtC,eAAe,sBAC1C,KAA3CmN,EAAYrJ,mBAAmBE,QAAiBnxC,KAAKmtC,eAAe,sBAAwBmN,EAAYtS,OAC7D,KAA3CsS,EAAYrJ,mBAAmBC,SAA6D,KAA3CoJ,EAAYrJ,mBAAmBE,UAChFmJ,EAAYlJ,WAAa,KAE7BL,EAAS3vC,KAAKk5C,IAElB5P,EAAS9zB,UAAUyjC,sBAAwB,SAAUz0C,EAAWmrC,GAC5D,IAAKnrC,EAAUipC,OAAQ,CAInB,GAFA7uC,KAAKurC,cAAgBvrC,KAAKurC,cAAcqP,OAAO7J,GAC/C/wC,KAAKmrC,YAAcnrC,KAAKorC,0BAA4B,KAAO,IACvDprC,KAAKsxC,aAAc,CACnB,GAAI1rC,EAAUm0C,YAAcn0C,EAAUo0C,kBAAkBn5C,OAAS,EAAG,CAChE,IAAK,GAAIE,GAAI,EAAGA,EAAI6E,EAAUo0C,kBAAkBn5C,OAAQE,IACpD,IAAK,GAAIiE,GAAI,EAAGA,EAAI+rC,EAASlwC,OAAQmE,IAC7BY,EAAUo0C,kBAAkBj5C,GAAGyP,KAAOugC,EAAS/rC,GAAGwL,KAClD5K,EAAUo0C,kBAAkBj5C,GAAGiwC,QAAUD,EAAS/rC,GAAGgsC,QAIjE,IAAI6J,GAAY76C,KAAKgrC,SAAWplC,EAAUo0C,kBACtCh6C,KAAKo6C,eAAex0C,EAAUo0C,kBAClCh6C,MAAK86C,qBAAqBD,GAC1B76C,KAAK8rC,UAAY+O,EACZ76C,KAAKkuB,SAAUluB,KAAKqxC,eACrBrxC,KAAKoyC,gBAAgByI,OAIzB76C,MAAK0tC,eAAeqD,GAAU,GAC9B/wC,KAAK8rC,UAAY9rC,KAAK8rC,UAAU8O,OAAO7J,GAClC/wC,KAAKkuB,SAAUluB,KAAKqxC,eACrBrxC,KAAKoyC,gBAAgBrB,EAGxBrvC,qBAAkBkE,EAAUq0C,mBAAoD,KAA/Br0C,EAAUq0C,mBAC5Dj6C,KAAKi6C,iBAAmBr0C,EAAUq0C,sBAItCj6C,MAAK8rC,UAAY9rC,KAAK8rC,UAAU8O,OAAO7J,GACnC/wC,KAAKutC,YACLvtC,KAAKwsC,OAAOxsC,KAAK8rC,WAAW,EAGpC9rC,MAAK+6C,sBACL/6C,KAAK2rC,wBAAyB,IAGtCjB,EAAS9zB,UAAUy6B,YAAc,WAC7B,GAAI2J,IAAkB,CAItB,OAHIh7C,MAAKkuB,SAAYxsB,oBAAkB1B,KAAKg2C,cAAciF,UAA2C,KAA/Bj7C,KAAKg2C,cAAciF,UACrFD,GAAkB,GAEfA,GAEXtQ,EAAS9zB,UAAUq+B,aAAe,WAC9B,GAAIA,IAAe,CAKnB,QAJIj1C,KAAKkuB,SAAYxsB,oBAAkB1B,KAAKg2C,cAAciF,UAA2C,KAA/Bj7C,KAAKg2C,cAAciF,UACjFv5C,oBAAkB1B,KAAKg2C,cAAcC,YAA+C,KAAjCj2C,KAAKg2C,cAAcC,YAC1EhB,GAAe,GAEZA,GAEXvK,EAAS9zB,UAAUi6B,UAAY,SAAUqK,GAChCx5C,oBAAkB1B,KAAKytC,cACxBt5B,SAAOnU,KAAKytC,YACZztC,KAAKytC,WAAa,MAEG,SAArBztC,KAAK4vC,aAA2BsL,IAChCl7C,KAAKC,QAAQmC,MAAQ,IAEzBpC,KAAK6rC,YACL7rC,KAAK8rC,aACL9rC,KAAK4tC,uBAETlD,EAAS9zB,UAAUkkC,qBAAuB,SAAUhP,GAChD,GAEIqP,GAFAC,EAAoBp7C,KAAKsO,cAAc,OAASkC,GAAI,iBACpD6qC,GAAS,CAEb,IAAIr7C,KAAKytC,WAAY,CACjB,IAAK,GAAI7sC,GAAI,EAAGA,EAAIZ,KAAKytC,WAAW14B,iBAAiB,MAAMlU,OAAQD,IAAK,CACpE,GAAI+zC,GAAY30C,KAAKytC,WAAW14B,iBAAiB,MAAMnU,EACvDw6C,GAAkBtsC,YAAY6lC,EAAUj8B,WAAU,IAGtD,IAAK,GAAIzH,GAAK,EAAGqqC,EADjBH,EAAcn7C,KAAKytC,WAAW14B,iBAAiB,MACD9D,EAAKqqC,EAAcz6C,OAAQoQ,IAAM,CAC3E,GAAIkjC,GAAOmH,EAAcrqC,EACzBkD,UAAOggC,GAEXn0C,KAAK4tC,qBACL,IAAI2N,MAAapgB,MAAMl6B,KAAKm6C,EAAkB1+B,WAC9CvI,UAAOnU,KAAKytC,YACZztC,KAAKytC,WAAa,KAClBztC,KAAK6rC,YACL7rC,KAAKw7C,gBACL,KAAK,GAAItyC,GAAQ,EAAGA,EAAQ4iC,EAAUjrC,OAAQqI,IAAS,CACnD,IAAK,GAAInI,GAAI,EAAGA,EAAIf,KAAK8rC,UAAUjrC,OAAQE,IACnCf,KAAK8rC,UAAU/qC,GAAG0b,OAASqvB,EAAU5iC,GAAOuT,OAC5Czc,KAAKytC,WAAW3+B,YAAYysC,EAAQx6C,IACpCuB,eAAaC,IAAIg5C,EAAQx6C,GAAG0F,cAAc,YAAa,QAASzG,KAAKwzC,YAAaxzC,MAClFA,KAAK6rC,SAASzqC,KAAKm6C,EAAQx6C,IAC3Bs6C,EAAQnyC,EAGZmyC,KAAUnyC,GACVlJ,KAAK0tC,gBAAgB5B,EAAU5iC,UAKvClJ,MAAK0tC,eAAe5B,IAG5BpB,EAAS9zB,UAAU6kC,QAAU,SAAUC,GACnC,OAASA,GAAO,QAAQl7B,KAAKk7B,IAEjChR,EAAS9zB,UAAUwjC,eAAiB,SAAUzJ,GAC1C,GAAIgL,GAAYhL,CAChB,KAAK3wC,KAAKy7C,QAAQz7C,KAAKisC,mBAAoB,CAGvC,IAAK,GAFDA,MAEKh7B,EAAK,EAAG2qC,EADA57C,KAAKisC,kBAAkBtrC,MAAM,KACFsQ,EAAK2qC,EAAa/6C,OAAQoQ,IAAM,CACxE,GAAI4qC,GAAYD,EAAa3qC,EAC7Bg7B,GAAkB7qC,KAAKy6C,EAAUrxC,OAAOsxC,qBAE5C,IAAK,GAAIl7C,GAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,KACgD,IAA1EqrC,EAAkB5/B,SAAS,IAAMskC,EAAM/vC,GAAG8H,MAAMozC,uBAChDnL,EAAM/vC,GAAGonC,OAAShoC,KAAKmtC,eAAe,mBACtCwD,EAAM/vC,GAAGwwC,WAAa,KAIlC,MAAOuK,IAEXjR,EAAS9zB,UAAU8jC,kBAAoB,SAAUqB,GAC7C,GAAIC,GAAe,GACfC,EAAe,EAYnB,OAXIF,GAAW/7C,KAAKk8C,YAChBF,EAAeh8C,KAAKmtC,eAAe,sBAE9B4O,EAAW/7C,KAAKm8C,YACrBF,EAAej8C,KAAKmtC,eAAe,uBAGnC6O,EAAe,GACfC,EAAe,KAEE/K,QAAS8K,EAAc7K,QAAS8K,IAGzDvR,EAAS9zB,UAAUwlC,cAAgB,SAAUrL,GAEzC,IAAK,GADDsL,IAAY,EACPz7C,EAAI,EAAGA,EAAIZ,KAAK2wC,MAAM9vC,OAAQD,IAC/BZ,KAAK2wC,MAAM/vC,GAAG6b,OAASs0B,EAASt0B,KAAK0e,MAAM,EAAG4V,EAASt0B,KAAK6E,YAAY,OAASthB,KAAK2wC,MAAM/vC,GAAG8H,OAASqoC,EAASroC,OACjH2zC,GAAY,EAGpB,OAAOA,IAEX3R,EAAS9zB,UAAU0lC,qBAAuB,SAAUvL,GAChD/wC,KAAKw7C,gBACL,KAAK,GAAIvqC,GAAK,EAAGsrC,EAAaxL,EAAU9/B,EAAKsrC,EAAW17C,OAAQoQ,IAAM,CAClE,GAAIurC,GAAWD,EAAWtrC,GACtBwrC,EAAcz8C,KAAKsO,cAAc,MAAQgC,UAAWs5B,GAAM51B,OAAS0oC,iBAAkBF,EAAS//B,OAClGzc,MAAK28C,iBAAmB38C,KAAK48C,iBAAiB58C,KAAKitC,SACnD,IAAI4P,GAAiB78C,KAAK28C,iBAAiBH,EAAUx8C,KAAM,WAAYA,KAAKC,QAAQuQ,GAAK,WAAYxQ,KAAK88C,iBAAkB,KAAML,EAClI,IAAII,EAAgB,CAChB,GAAIE,MAAkB5hB,MAAMl6B,KAAK47C,EACjC9F,UAAOgG,EAAcN,GAEzB,GAAIvzC,GAAQ6nC,EAAS1kC,QAAQmwC,GACzB52C,GACA3F,QAASw8C,EACThJ,SAAU+I,EACVtzC,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAcI,IAE9BQ,GACA/8C,QAASw8C,EACThJ,SAAU+I,EACVtzC,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAcI,GAElCx8C,MAAKoG,QAAQ,YAAaR,GAC1B5F,KAAKoG,QAAQ,oBAAqB42C,GAClCh9C,KAAKytC,WAAW3+B,YAAY2tC,GAC5Bz8C,KAAK6rC,SAASzqC,KAAKq7C,GAEvBz8C,KAAKi9C,wBAETvS,EAAS9zB,UAAU4kC,eAAiB,WAC5B95C,oBAAkB1B,KAAKytC,cACvBztC,KAAKytC,WAAaztC,KAAKsO,cAAc,MAAQgC,UAt7CvC,mBAu7CNtQ,KAAKotC,cAAct+B,YAAY9O,KAAKytC,cAI5C/C,EAAS9zB,UAAUsmC,aAAe,SAAUnM,EAAUJ,GAClD,GAAI9E,GAAW7rC,KAAKsO,cAAc,MAAQgC,UAAWs5B,IACrDiC,GAAS18B,aAAa,mBAAoB4hC,EAASlwC,OAAS,GAG5D,KAAK,GADDs8C,GADAC,EAAgBp9C,KAAKsO,cAAc,QAAUgC,UAz6CpC,qBA26CJW,EAAK,EAAGosC,EAAatM,EAAU9/B,EAAKosC,EAAWx8C,OAAQoQ,IAAM,CAClE,GAAIurC,GAAWa,EAAWpsC,GACtBqsC,EAAct9C,KAAKsO,cAAc,QAAUgC,UA57C3C,eA67CJgtC,GAAY3qC,UAAY3S,KAAKu9C,gBAAgBf,EAAS//B,KACtD,IAAI+gC,GAAcx9C,KAAKsO,cAAc,QAAUgC,UA77C3C,gBA87CAmtC,EAAWz9C,KAAKw6C,YAAYgC,EAAS//B,KAKzC,IAJA+gC,EAAY7qC,UAAY,IAAM8qC,EACzBA,GACDD,EAAYz5C,UAAUxB,IAAI,YAEzBvC,KAAKyR,UAIL,CACD,GAAIisC,GAAe19C,KAAKsO,cAAc,QAAUgC,UAt7C5C,mBAu7CJotC,GAAa5uC,YAAY0uC,GACzBE,EAAa5uC,YAAYwuC,GACzBF,EAActuC,YAAY4uC,OAP1BN,GAActuC,YAAYwuC,GAC1BF,EAActuC,YAAY0uC,EAQ9Bx9C,MAAK29C,aAAaL,GAClBH,EAAgBn9C,KAAK49C,qBAAqBpB,EAAU3Q,GAExDA,EAAS/8B,YAAYsuC,GACrBp9C,KAAK69C,kBAAkB9M,EAAUlF,EACjC,IAAI3iC,GAAQlJ,KAAKytC,WAAW14B,iBAAiB,MAAMlU,OAC/Ci9C,EAAU99C,KAAKsO,cAAc,OAcjC,IAbIu9B,EAAS9nC,UAAUC,SAz7CZ,mBA07CP85C,EAAQ/5C,UAAUxB,IAAIsnC,IACtBiU,EAAQ/5C,UAAUxB,IA37CX,kBA47CPu7C,EAAQptC,UAAYqgC,EAASlwC,OAAS,EAAIb,KAAKmtC,eAAe,wBAA0BgQ,IAGxFW,EAAQ/5C,UAAUxB,IAAIwuC,EAASlwC,OAAS,EA97ClC,qBA3BF,eA09CJi9C,EAAQptC,UAAYqgC,EAASlwC,OAAS,EAAIb,KAAKmtC,eAAe,cAAgB,KAAO4D,EAASlwC,OAAS,MACjGb,KAAKmtC,eAAe,QAAU,KAChCntC,KAAK+9C,YAAY/9C,KAAKg+C,YAAYjN,IAAa/wC,KAAK+9C,YAAYhN,EAAS,GAAGzB,MAChFtvC,KAAKi+C,gBAAgBlN,IAEzBqM,EAActuC,YAAYgvC,GACtBp8C,oBAAkBmqC,EAASplC,cAAc,aAAc,CACvD,GAAIy3C,GAAcl+C,KAAKsO,cAAc,QAAUgC,UAAW,UAAW0D,OAASgF,SAAYhZ,KAAKmrC,cAEtE,UAArBnrC,KAAK4vC,aACLsO,EAAYn6C,UAAUxB,IAAI,UAE9B27C,EAAY/uC,aAAa,QAASnP,KAAKmtC,eAAe,WACtDtB,EAAS/8B,YAAYsuC,GACrBvR,EAAS/8B,YAAYovC,GACrB57C,eAAaC,IAAI27C,EAAa,QAASl+C,KAAKwzC,YAAaxzC,MACzDk+C,EAAYn6C,UAAUxB,IAAIunC,IAE9B,GAAIlkC,IACA3F,QAAS4rC,EACT4H,SAAUzzC,KAAKm+C,cAAcpN,EAAUlF,GACvC3iC,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAcp8C,KAAKm+C,cAAcpN,EAAUlF,KAE3DmR,GACA/8C,QAAS4rC,EACT4H,SAAUzzC,KAAKm+C,cAAcpN,EAAUlF,GACvC3iC,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAcp8C,KAAKm+C,cAAcpN,EAAUlF,IAE/D7rC,MAAKoG,QAAQ,YAAaR,GAC1B5F,KAAKoG,QAAQ,oBAAqB42C,GAClCh9C,KAAKytC,WAAW3+B,YAAY+8B,GAC5B7rC,KAAK6rC,SAASzqC,KAAKyqC,IAEvBnB,EAAS9zB,UAAUgnC,qBAAuB,SAAUpB,EAAU3Q,GAC1D,GAAIsR,GAAgBX,EAASxU,OACzBiJ,EAAqBjxC,KAAK06C,kBAAkB8B,EAASlN,KACtB,MAA/B2B,EAAmBC,SAAiD,KAA/BD,EAAmBE,UACxDnxC,KAAKo+C,gBAAgBvS,GACrBsR,EAA+C,KAA/BlM,EAAmBC,QAAiBlxC,KAAKmtC,eAAe,sBACrC,KAA/B8D,EAAmBE,QAAiBnxC,KAAKmtC,eAAe,sBAAwBgQ,EAExF,IAAIkB,GAAwBr+C,KAAKo6C,eAAep6C,KAAKk1C,gBAAgBsH,IAAW,GAAGxU,MAKnF,OAJIqW,KAA0Br+C,KAAKmtC,eAAe,qBAC9CntC,KAAKo+C,gBAAgBvS,GACrBsR,EAAgBkB,GAEblB,GAEXzS,EAAS9zB,UAAUwnC,gBAAkB,SAAUvS,GAC3CA,EAAS9nC,UAAUxB,IAn/CR,mBAq/CfmoC,EAAS9zB,UAAUqnC,gBAAkB,SAAUlN,GAC3C,GAAIvrC,GAAexF,KAAKC,QAAQyY,WAAU,EAC1ClT,GAAazB,UAAUxB,IAx/CZ,sBAy/CX,KAAK,GAAI0O,GAAK,EAAGqtC,EAAavN,EAAU9/B,EAAKqtC,EAAWz9C,OAAQoQ,IAC7CqtC,EAAWrtC,GACjBiD,MAAQ1O,CAErBA,GAAa2J,aAAa,OAAQnP,KAAKwrC,cACvCxrC,KAAKotC,cAAc3mC,cAAc,kBAAqBqI,YAAYtJ,GACzC,SAArBxF,KAAK4vC,aAA+C,SAArB5vC,KAAK4vC,cACpC5vC,KAAKC,QAAQmC,MAAQ,KAG7BsoC,EAAS9zB,UAAUonC,YAAc,SAAUjN,GAEvC,IAAK,GADDgL,GAAW,EACN9qC,EAAK,EAAGstC,EAAaxN,EAAU9/B,EAAKstC,EAAW19C,OAAQoQ,IAE5D8qC,GADWwC,EAAWttC,GACLq+B,IAErB,OAAOyM,IAEXrR,EAAS9zB,UAAUunC,cAAgB,SAAUpN,EAAUlF,GAanD,IAAK,GAZDp5B,IACAgK,KAAM,GACNu0B,QAAS,GACT1B,KAAM,EACNtH,OAAQ,GACRt/B,KAAM,GACNuoC,oBAAsBC,QAAS,GAAIC,QAAS,IAC5CC,WAAY,IACZoN,KAAM3S,GAEN4S,KACA/1C,EAAO,GACFuI,EAAK,EAAGytC,EAAa3N,EAAU9/B,EAAKytC,EAAW79C,OAAQoQ,IAAM,CAClE,GAAIurC,GAAWkC,EAAWztC,EAC1BwtC,GAAUr9C,KAAKo7C,EAAS//B,MACxB/T,EAAO8zC,EAAS9zC,KAMpB,MAJA+J,GAAOgK,KAAOgiC,EAAUE,KAAK,MAC7BlsC,EAAO68B,KAAOtvC,KAAKg+C,YAAYjN,GAC/Bt+B,EAAO/J,KAAOA,EACd+J,EAAOu1B,OAAShoC,KAAK4+C,oBAAoB7N,EAAUlF,GAC5Cp5B,GAEXi4B,EAAS9zB,UAAUgoC,oBAAsB,SAAU7N,EAAUlF,GAGzD,IAAK,GADDsR,GADAzV,GAAU,EAELz2B,EAAK,EAAG4tC,EAAa9N,EAAU9/B,EAAK4tC,EAAWh+C,OAAQoQ,IAAM,CAClE,GAAIurC,GAAWqC,EAAW5tC,EAC1BksC,GAAgBX,EAASxU,MACzB,IAAIiJ,GAAqBjxC,KAAK06C,kBAAkB8B,EAASlN,KACtB,MAA/B2B,EAAmBC,SAAiD,KAA/BD,EAAmBE,UACxDzJ,GAAU,EACVyV,EAA+C,KAA/BlM,EAAmBC,QAAiBlxC,KAAKmtC,eAAe,sBACrC,KAA/B8D,EAAmBE,QAAiBnxC,KAAKmtC,eAAe,sBAAwBgQ,EAExF,IAAIkB,GAAwBr+C,KAAKo6C,eAAep6C,KAAKk1C,gBAAgBsH,IAAW,GAAGxU,MAC/EqW,KAA0Br+C,KAAKmtC,eAAe,qBAC9CzF,GAAU,EACVyV,EAAgBkB,GAYxB,MATK3W,GAKDyV,EAAgBn9C,KAAKmtC,eAAe,cAAgB,KAAO4D,EAASlwC,OAAS,MACvEb,KAAKmtC,eAAe,QAAU,KAChCntC,KAAK+9C,YAAY/9C,KAAKg+C,YAAYjN,KANtClF,EAAS9nC,UAAUxB,IArjDZ,kBAsjDP46C,EAAgBpM,EAASlwC,OAAS,EAAIb,KAAKmtC,eAAe,wBAA0BgQ,GAOjFA,GAGXzS,EAAS9zB,UAAUkoC,mBAAqB,SAAU/N,EAAUJ,GACxD3wC,KAAKw7C,gBACL,IAAI3P,GAAW7rC,KAAKsO,cAAc,MAAQgC,UAAWs5B,IACrDiC,GAAS18B,aAAa,mBAAoB4hC,EAASlwC,OAAS,IAC5Db,KAAK69C,kBAAkB9M,EAAUlF,EACjC,IAAIp5B,GAASzS,KAAKm+C,cAAcpN,EAAUlF,EAC1CA,GAAS18B,aAAa,iBAAkBsD,EAAOgK,MAC/Czc,KAAK28C,iBAAmB38C,KAAK48C,iBAAiB58C,KAAKitC,SACnD,IAAI4P,GAAiB78C,KAAK28C,iBAAiBlqC,EAAQzS,KAAM,WAAYA,KAAKC,QAAQuQ,GAAK,WAAYxQ,KAAK88C,iBAAkB,KAAMjR,EAChI,IAAIgR,EAAgB,CAChB,GAAIE,MAAkB5hB,MAAMl6B,KAAK47C,EACjC9F,UAAOgG,EAAclR,GAEzB,GAAI3iC,GAAQlJ,KAAKytC,WAAW14B,iBAAiB,MAAMlU,MAC9CgrC,GAAS9nC,UAAUC,SA9kDb,mBA+kDPhE,KAAKi+C,gBAAgBlN,EAEzB,IAAInrC,IACA3F,QAAS4rC,EACT4H,SAAUhhC,EACVvJ,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAc3pC,IAE9BuqC,GACA/8C,QAAS4rC,EACT4H,SAAUhhC,EACVvJ,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAc3pC,GAElCzS,MAAKoG,QAAQ,YAAaR,GAC1B5F,KAAKoG,QAAQ,oBAAqB42C,GAClCh9C,KAAKytC,WAAW3+B,YAAY+8B,GAC5B7rC,KAAK6rC,SAASzqC,KAAKyqC,GACnB7rC,KAAKi9C,wBASTvS,EAAS9zB,UAAU82B,eAAiB,SAAUqD,EAAUgO,GAGpD,GADA/+C,KAAKw7C,iBACiB,KAAlBx7C,KAAKitC,UAAoBvrC,oBAAkB1B,KAAKitC,UAS/C,GAAIjtC,KAAKi1C,eACVj1C,KAAKotC,cAAcrpC,UAAUxB,IAznDvB,iBA0nDNvC,KAAKk9C,aAAanM,EAAU/wC,KAAKC,QAAQ0wC,WAGzC,KAAK,GAAI1/B,GAAK,EAAG+tC,EAAajO,EAAU9/B,EAAK+tC,EAAWn+C,OAAQoQ,IAAM,CAClE,GAAIurC,GAAWwC,EAAW/tC,GACtB0jC,EAAY30C,KAAKsO,cAAc,MAC/BgC,UAAWs5B,GACX51B,OAAS0oC,iBAAkBF,EAAS//B,KAAMwiC,mBAAoB,OAE9DC,EAAgBl/C,KAAKsO,cAAc,QAAUgC,UA9oD5C,qBA+oDD6uC,EAAcn/C,KAAKsO,cAAc,QAAUgC,UA9pD/C,cA8pDqE0D,OAASqJ,MAASm/B,EAAS//B,OAChG0iC,GAAYxsC,UAAY3S,KAAKu9C,gBAAgBf,EAAS//B,KACtD,IAAI2iC,GAAgBp/C,KAAKsO,cAAc,QAAUgC,UA/pDjD,gBAgqDImtC,EAAWz9C,KAAKw6C,YAAYgC,EAAS//B,KAKzC,IAJA2iC,EAAczsC,UAAY,IAAM8qC,EAC3BA,GACD2B,EAAcr7C,UAAUxB,IAAI,YAE3BvC,KAAKyR,UAIL,CACD,GAAIisC,GAAe19C,KAAKsO,cAAc,QAAUgC,UAxpDhD,mBAypDAotC,GAAa5uC,YAAYswC,GACzB1B,EAAa5uC,YAAYqwC,GACzBD,EAAcpwC,YAAY4uC,OAP1BwB,GAAcpwC,YAAYqwC,GAC1BD,EAAcpwC,YAAYswC,EAQ9B,IAAIrD,GAAW/7C,KAAKsO,cAAc,QAAUgC,UA9qD5C,eA+qDAyrC,GAASppC,UAAY3S,KAAK+9C,YAAYvB,EAASlN,MAC/C4P,EAAcpwC,YAAYitC,EAC1B,IAAIpE,GAAgB33C,KAAKsO,cAAc,QAAUgC,UAAWu5B,IAC5DqV,GAAcpwC,YAAY6oC,GAC1BA,EAAchlC,UAAY6pC,EAASxU,OACnC2M,EAAU7lC,YAAYowC,EACtB,IAAIhB,GAAcl+C,KAAKsO,cAAc,QAAUgC,UAAW,WACtD0D,OAASgF,SAAYhZ,KAAKmrC,cAEL,UAArBnrC,KAAK4vC,aACLsO,EAAYn6C,UAAUxB,IAAI,UAE9B27C,EAAY/uC,aAAa,QAASnP,KAAKmtC,eAAe,WACtDwH,EAAU7lC,YAAYovC,GACtB57C,eAAaC,IAAI27C,EAAa,QAASl+C,KAAKwzC,YAAaxzC,MAC7B,MAAxBw8C,EAASpL,YACTuG,EAAc5zC,UAAUxB,IAAI6nC,IAC5B8T,EAAYn6C,UAAUxB,IAAIwnC,IAC1BmU,EAAY/uC,aAAa,QAASnP,KAAKmtC,eAAe,YAEzB,MAAxBqP,EAASpL,aACduG,EAAc5zC,UAAUP,OAAO4mC,IAC/BuN,EAAc5zC,UAAUxB,IAvrDrB,uBAyrDHvC,KAAKutC,YAAsC,MAAxBiP,EAASpL,YAAqD,KAA/BpxC,KAAKg2C,cAAciF,UACrEtD,EAAchlC,UAAY,IAEzBurC,EAAYn6C,UAAUC,SAAS+lC,KAChCmU,EAAYn6C,UAAUxB,IAAIunC,GAE9B,IAAI5gC,GAAQ6nC,EAAS1kC,QAAQmwC,GACzB52C,GACA3F,QAAS00C,EACTlB,SAAU+I,EACVtzC,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAcI,IAE9BQ,GACA/8C,QAAS00C,EACTlB,SAAU+I,EACVtzC,MAAOA,EACPmzC,UAAWr8C,KAAKo8C,cAAcI,GAElCx8C,MAAKoG,QAAQ,YAAaR,GAC1B5F,KAAKoG,QAAQ,oBAAqB42C,GAClCh9C,KAAKytC,WAAW3+B,YAAY6lC,GAC5B30C,KAAK6rC,SAASzqC,KAAKuzC,GACnB30C,KAAK29C,aAAawB,EAClB,IAAIE,GAAwBr/C,KAAKsrC,IAC7BtrC,MAAKo8C,cAAcI,KACnBx8C,KAAKsrC,MAAO,EACZtrC,KAAKu1C,qBAAoB,GACzBv1C,KAAKsrC,KAAO+T,OA3FhBr/C,MAAKi1C,gBACLj1C,KAAKotC,cAAcrpC,UAAUxB,IAjnD3B,iBAknDFvC,KAAK8+C,mBAAmB/N,EAAU/wC,KAAKC,QAAQ0wC,QAG/C3wC,KAAKs8C,qBAAqBvL,IA2FtCrG,EAAS9zB,UAAU0oC,cAAgB,SAAUC,GACzC,GAAIn7B,GAAOm7B,EAAYpsC,WACvBosC,GAAYC,QAAQC,KAAOr7B,EAAK+W,MAAM/W,EAAKvjB,OAAS,KAExD6pC,EAAS9zB,UAAUinC,kBAAoB,SAAU9M,EAAUlF,GACvD,IAAK,GAAI56B,GAAK,EAAGyuC,EAAa3O,EAAU9/B,EAAKyuC,EAAW7+C,OAAQoQ,IAC7CyuC,EAAWzuC,GACjButC,KAAO3S,GAGxBnB,EAAS9zB,UAAU+mC,aAAe,SAAUlhC,GACxC,GAAI8iC,GAAc9iC,CACO,UAArBzc,KAAK4vC,aAA0B2P,EAAYnhB,YAAcmhB,EAAYI,YACrE3/C,KAAKs/C,cAAcC,GAGdA,EAAYnhB,YAAc,EAAImhB,EAAYI,aAC/C3/C,KAAKs/C,cAAcC,IAG3B7U,EAAS9zB,UAAU4jC,YAAc,SAAU/9B,GACvC,GAAIo/B,GACA3yC,EAAQuT,EAAK6E,YAAY,IAI7B,OAHIpY,IAAS,IACT2yC,EAAYp/B,EAAK1a,UAAUmH,EAAQ,IAEhC2yC,GAAwB,IAEnCnR,EAAS9zB,UAAU2mC,gBAAkB,SAAU9gC,GAC3C,GAAI/T,GAAO1I,KAAKw6C,YAAY/9B,EAE5B,OAAO/T,GADK+T,EAAK9b,MAAM,IAAM+H,GACT,IAExBgiC,EAAS9zB,UAAUgpC,qBAAuB,WAOtC,GANI5/C,KAAK2qC,YAAYC,QACjB5qC,KAAKC,QAAQkP,aAAa,SAAUnP,KAAK2qC,YAAYC,QAErD5qC,KAAK2qC,YAAYj3B,UACjB1T,KAAKC,QAAQkP,aAAa,WAAY,YAEtCnP,KAAK2qC,YAAYE,SAAU,CAC3B,GAAIoH,GAAU9/B,SAAS+/B,gBAAgB,WACvClyC,MAAKC,QAAQkyC,iBAAiBF,KAGtCvH,EAAS9zB,UAAUipC,eAAiB,SAAUlP,GAG1C,IAAK,GAFDmP,MAEKl/C,EAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IACzBZ,KAAK01C,aAAa/E,EAAM/vC,IACrBmD,UAAUC,SAASomC,KACvB0V,EAAY1+C,KAAKuvC,EAAM/vC,GAG/B,OAAOk/C,IAEXpV,EAAS9zB,UAAU6gC,aAAe,SAAU9G,EAAO3I,EAAQoJ,EAAY2O,GAMnE,OALuB,KAAnBA,IAA6BA,GAAiB,GACjC,KAAX/X,GAAiBtmC,oBAAkBsmC,IAA6B,KAAfoJ,GAAqB1vC,oBAAkB0vC,KAC1FT,EAAM3I,OAASA,EACf2I,EAAMS,WAAaA,GAEnB2O,EAAgB,CAChB,GAAI1mB,GAAKr5B,KAAK01C,aAAa/E,EACtBjvC,qBAAkB23B,IACd33B,oBAAkB23B,EAAG5yB,cAAc,IAAMojC,MAA0B,KAAX7B,GAAiBtmC,oBAAkBsmC,KAC5F3O,EAAG5yB,cAAc,IAAMojC,IAAQ12B,YAAc60B,GAIzD,MAAO2I,IAEXjG,EAAS9zB,UAAU8+B,aAAe,SAAU/E,GAExC,IAAK,GADDznC,GACKtI,EAAI,EAAGA,EAAIZ,KAAK8rC,UAAUjrC,OAAQD,IAClCc,oBAAkBivC,KAAajvC,oBAAkB1B,KAAK8rC,UAAUlrC,GAAG4P,KACnE9O,oBAAkBivC,EAAMngC,IACYxQ,KAAK8rC,UAAUlrC,GAAG6b,OAASk0B,EAAMl0B,KADrCzc,KAAK8rC,UAAUlrC,GAAG6b,OAASk0B,EAAMl0B,MAClEzc,KAAK8rC,UAAUlrC,GAAG4P,KAAOmgC,EAAMngC,MAC/BtH,EAAQtI,EAGhB,OAAOZ,MAAK6rC,SAAS3iC,IAEzBwhC,EAAS9zB,UAAUopC,kBAAoB,SAAUrL,GAC7C,GAAIsL,GAAqBjgD,KAAKsO,cAAc,QAAUgC,UAAW45B,KAC7DgW,EAAclgD,KAAKsO,cAAc,eAAiBgC,UAAW65B,GAAan2B,OAAS5R,MAAO,IAAKub,IAAK,SACpGwiC,EAA0BngD,KAAKsO,cAAc,QAAUgC,UA3yDtC,yBA4yDrB4vC,GAAY/wC,aAAa,QAAS,YAClC,IAAIixC,GAAkBpgD,KAAKsO,cAAc,QAAUgC,UAvzDpC,uBAwzDf8vC,GAAgBjtC,YAAc,KAC9BgtC,EAAwBrxC,YAAYoxC,GACpCD,EAAmBnxC,YAAYqxC,GAC/BF,EAAmBnxC,YAAYsxC,GAC/BzL,EAAUluC,cAAc,qBAAsBqI,YAAYmxC,IAG9DvV,EAAS9zB,UAAUypC,kBAAoB,SAAUx8C,EAAGw1B,GAChD,IAAK1e,MAAM8H,KAAKK,MAAOjf,EAAEy8C,OAASz8C,EAAE08C,MAAS,QAAU7+C,oBAAkB23B,EAAG5yB,cAAc,IAAM0jC,KAC5F,GAAKzoC,oBAAkB1B,KAAKi6C,mBAA+C,KAA1Bj6C,KAAKi6C,iBAOlDj6C,KAAKwgD,oBAAoBnnB,EAAI5W,KAAKK,MAAOjf,EAAEy8C,OAASz8C,EAAE08C,MAAS,KAAKxiC,WAAa,SAPN,CAC3E,GAAI3b,GAASqgB,KAAKK,MAAOjf,EAAEy8C,OAASz8C,EAAE08C,MAAS,KAAQ78B,SAAS1jB,KAAKi6C,iBAAkB,GACzE,KAAV73C,GAAyB,MAAVA,GACfpC,KAAKwgD,oBAAoBnnB,EAAI5W,KAAKK,MAAOjf,EAAEy8C,OAASz8C,EAAE08C,MAAS,KAAKxiC,WAAa,OAQjG2sB,EAAS9zB,UAAU4pC,oBAAsB,SAAUnnB,EAAIonB,GACnDpnB,EAAG5yB,cAAc,IAAM0jC,IAAah7B,aAAa,QAAS,SAAWsxC,GACrEpnB,EAAG5yB,cAAc,wBAAwB0M,YAAcstC,GAE3D/V,EAAS9zB,UAAU8pC,iBAAmB,SAAU78C,EAAG8sC,EAAOgQ,EAAUvJ,GAChE,GAAI/d,GAAKr5B,KAAK01C,aAAa/E,EAC3B,KAAIjvC,oBAAkB23B,IAASsnB,EAA/B,CAGA,GAAKj/C,oBAAkB23B,GAoBnBr5B,KAAK4gD,oBAAoBjQ,EAAO9sC,EAAGuzC,OApBX,CAEC,MAArBzG,EAAMS,YACNpxC,KAAK4gD,oBAAoBjQ,EAAO9sC,EAAGuzC,EAAS/d,GAE1CA,EAAGtkB,iBAAiB,IAAMm1B,IAAkBrpC,OAAS,IAAMw4B,EAAG5yB,cAAc,IAAMojC,MACpFxQ,EAAG5yB,cAAc,IAAMojC,IAAQ9lC,UAAUxB,IA11DjC,qBA21DRvC,KAAKggD,kBAAkB3mB,GACvBr5B,KAAK6gD,yBAAyBxnB,EA51DtB,qBA61DRA,EAAG5yB,cAAc,IAAMojC,IAAQ9lC,UAAUP,OAAO6mC,KAEpDrqC,KAAKqgD,kBAAkBx8C,EAAGw1B,EAC1B,IAAI/kB,GAAU+kB,EAAG5yB,cAAc,IAAMqjC,GAChCpoC,qBAAkB4S,KACnBA,EAAQvQ,UAAUxB,IAAIynC,GAl2Dd,qBAm2DR11B,EAAQnF,aAAa,QAASnP,KAAKmtC,eAAe,UAClD74B,EAAQvQ,UAAUP,OAAOsmC,KAMjC,GAAIj9B,IAAShJ,EAAGA,EAAG0a,UAAW,SAAU60B,KAAMpzC,KAAKy3C,aAAa9G,EAAO3wC,KAAKmtC,eAAe,cAAe,KAC1GntC,MAAKoG,QAAQ,WAAYyG,KAG7B69B,EAAS9zB,UAAUgqC,oBAAsB,SAAUjQ,EAAO9sC,EAAGuzC,EAAS/d,GAClE,GAAI9zB,GAAQvF,IACZ,IAAyB,MAArB2wC,EAAMS,WAAoB,CAC1B,GAAIxrC,IACA1B,MAAOL,EACPktC,SAAUJ,EACV9B,QAAQ,EACRoI,kBAEJj3C,MAAKoG,QAAQ,YAAaR,EAAW,SAAUA,GAC3C,GAAIA,EAAUipC,QAEV,GADA8B,EAAMS,WAAa,KACd1vC,oBAAkB23B,GAAK,CACxB,GAAI8b,GAAgB9b,EAAG5yB,cAAc,IAAMujC,GACtCtoC,qBAAkByzC,KACnByC,cAAYzC,GACZhhC,SAAOklB,EAAG5yB,cAAc,0BAI/B,CACD2wC,EAAQlB,WAAY,EACpBkB,EAAQb,YAAY3H,OACpB,IAAIuH,GAAW,GAAIC,SACnB,IAAyB,MAArBzF,EAAMS,WAAoB,CAC1B,GAAIrM,GAASx/B,EAAMtF,QAAQ8Q,aAAa,OACxColC,GAASY,OAAOhS,EAAQ4L,EAAMl0B,MAC9B05B,EAASY,OAAO,mBAAoBpG,EAAMl0B,MAC1ClX,EAAMyxC,eAAeb,EAAUvwC,EAAUqxC,eACzC,IAAInB,GAAO,GAAIC,QAAKxwC,EAAMywC,cAAcC,UAAW,QAAQ,EAAM,KACjEH,GAAKI,WAAY,EACjBJ,EAAKW,OAAS,SAAU5yC,GAEpB,MADA0B,GAAMu7C,mBAAmBj9C,EAAG8sC,OAGhCmF,EAAKe,KAAKV,SAM9BzL,EAAS9zB,UAAUkqC,mBAAqB,SAAUj9C,EAAGuvC,GACjD,GAAIuB,GAAY30C,KAAK01C,aAAatC,EAClC,KAAIuB,EAAUluC,cAAc,IAAMwjC,MAAevoC,oBAAkBizC,EAAUluC,cAAc,IAAMujC,KAAjG,CAGAhqC,KAAKy3C,aAAarE,EAAMpzC,KAAKmtC,eAAe,oBAAqB,KACjEntC,KAAK+gD,mBAAmBl9C,EAAGuvC,EAAMuB,EACjC,IAAIQ,GAAgBR,EAAUluC,cAAc,IAAMqjC,GAC7CpoC,qBAAkBizC,KACnBiD,cAAYzC,GACPzzC,oBAAkBizC,EAAUluC,cAAc,qBAC3C0N,SAAOwgC,EAAUluC,cAAc,oBAGvC,IACIoG,IAAS3I,MAAOL,EAAGyzC,SADDzzC,GAAKA,EAAEshB,cAAgBnlB,KAAKu3C,YAAY1zC,GAAK,KACjB0a,UAAW,SAAU60B,KAAMA,EAC7EpzC,MAAKoG,QAAQ,UAAWyG,KAE5B69B,EAAS9zB,UAAUmqC,mBAAqB,SAAUl9C,EAAGuvC,EAAMuB,GACvD,GAAIpvC,GAAQvF,IACZA,MAAK6gD,yBAAyBlM,EAAWtK,IACzCrqC,KAAKghD,kBAAkBrM,EAAW,WAC7BjzC,oBAAkBizC,EAAUluC,cAAc,oBAC3CkuC,EAAUluC,cAAc,kBAAkB1C,UAAUxB,IAAI8nC,GAE5D,IAAI4W,GAAatM,EAAUluC,cAAc,IAAMujC,GAC3CtoC,qBAAkBu/C,KAGtBA,EAAWl9C,UAAUP,OAAOwmC,GAp7DZ,qBAq7DhBiX,EAAWl9C,UAAUxB,IAAIunC,IACzBmX,EAAW9xC,aAAa,QAASnP,KAAKmtC,eAAe,WACrDntC,KAAKkhD,YAAclhD,KAAKsO,cAAc,QAAUgC,UAAW,4BAA6B0D,OAASgF,SAAYhZ,KAAKmrC,eAClH8V,EAAWp1C,cAAcgD,aAAa7O,KAAKkhD,YAAaD,GACxDjhD,KAAKkhD,YAAY/xC,aAAa,QAASnP,KAAKmtC,eAAe,UACxCwH,EAAUluC,cAAc,IAAMwjC,IAEpCz6B,iBAAiB,QAAS,SAAU3L,GAC7C0B,EAAM47C,mBAAmBt9C,EAAGuvC,EAAMuB,GAAW,KAC9C,KAEPjK,EAAS9zB,UAAUuqC,mBAAqB,SAAUt9C,EAAGuvC,EAAMuB,EAAWkB,GAClEzC,EAAKhC,WAAa,IAClBgC,EAAKpL,OAAShoC,KAAKmtC,eAAe,wBAC7B0I,IACIn0C,oBAAkBizC,EAAUluC,cAAc,IAAMojC,MACjD8K,EAAUluC,cAAc,IAAMojC,IAAQ9lC,UAAUP,OAAO6mC,IAEtD3oC,oBAAkBizC,EAAUluC,cAAc,IAAMwjC,MACjD91B,SAAOwgC,EAAUluC,cAAc,IAAMwjC,KAEzCjqC,KAAKkhD,YAAc,MAGvBvM,EAAU5wC,UAAUxB,IAj8DP,oBAk8DbvC,KAAKwsC,QAAQ4G,KAGjB1I,EAAS9zB,UAAUwqC,eAAiB,SAAUv9C,EAAGuvC,EAAMuN,GACnD,GAAI3Y,GAASnkC,EAAEmT,MACf,IAA0B,IAAtBgxB,EAAOwP,YAAoBxP,EAAOA,QAAU,KAAOA,EAAOA,QAAU,IAAK,CACzE,GAAI3O,GAAKr5B,KAAK01C,aAAatC,EAC3B,IAAI1xC,oBAAkB23B,MAASsnB,GAAYj/C,oBAAkBi/C,IACzD,MAEJ,KAAKj/C,oBAAkB23B,GAAK,CACxBr5B,KAAK6gD,yBAAyBxnB,EAAI+Q,IAClCpqC,KAAKghD,kBAAkB3nB,EAAI,UAC3B,IAAI/kB,GAAU+kB,EAAG5yB,cAAc,IAAMujC,GAChCtoC,qBAAkB4S,KACnBA,EAAQvQ,UAAUxB,IAAIwnC,IACtBz1B,EAAQnF,aAAa,QAASnP,KAAKmtC,eAAe,WAClD74B,EAAQvQ,UAAUP,OAAOwmC,IACzB11B,EAAQvQ,UAAUP,OAh+Dd,sBAm+DZxD,KAAKqhD,kBAAkBx9C,EAAGuvC,OAG1BpzC,MAAKshD,aAAaz9C,EAAGuvC,IAG7B1I,EAAS9zB,UAAU2gC,YAAc,SAAU1zC,GACvC,GAAImT,GAASnT,EAAEshB,aAQf,QANIqyB,WAAYxgC,EAAOwgC,WACnBpG,WAAYp6B,EAAOgxB,OACnBuZ,WAAYvqC,EAAOuqC,WACnBC,QAASxqC,EAAOyqC,wBAChBC,gBAAiB1qC,EAAO0qC,kBAIhChX,EAAS9zB,UAAUyqC,kBAAoB,SAAUx9C,EAAGuvC,GAChD,GAAI7tC,GAAQvF,KACRs3C,EAAWzzC,GAAKA,EAAEshB,cAAgBnlB,KAAKu3C,YAAY1zC,GAAK,KACxDs5C,EAAgBn9C,KAAKmtC,eAAe,wBACpCtgC,GACAhJ,EAAGA,EAAGyzC,SAAUA,EAAU/4B,UAAW,SAAU60B,KAAMpzC,KAAKy3C,aAAarE,EAAM+J,EAAe,KAAK,GAAQoE,WAAYpE,GAErHxI,EAAY30C,KAAK01C,aAAatC,EAClC,KAAK1xC,oBAAkBizC,GAAY,CAC/B,GAAIgN,GAAahN,EAAUluC,cAAc,kBACpC/E,qBAAkBigD,KACnB/J,cAAYjD,GACZxgC,SAAOwtC,IAGf3hD,KAAKoG,QAAQ,UAAWyG,EAAM,SAAUA,GACpCtH,EAAMkyC,aAAarE,EAAMvmC,EAAK00C,WAAY,KAC1Ch8C,EAAMulC,kBAAkB1pC,KAAKgyC,GAC7B7tC,EAAMa,QAAQ,UAAYgtC,KAAM7tC,EAAMulC,oBACtCvlC,EAAMuoC,0BACFvoC,EAAMsmC,SAAShrC,OAAS,IACjB0E,EAAMmwC,aAAatC,GAAOrvC,UAAUC,SA7/DtC,oBAmgEAuB,EAAMmwC,aAAatC,GAAOrvC,UAAUP,OAngEpC,qBA8/DD+B,EAAM+vC,mBACN/vC,EAAMgwC,qBAAoB,QAS1C7K,EAAS9zB,UAAU0qC,aAAe,SAAUz9C,EAAGuvC,GAC3C,GAAI7tC,GAAQvF,KACRq5B,EAAKr5B,KAAK01C,aAAatC,GACvBkE,EAAWzzC,GAAKA,EAAEshB,cAAgBnlB,KAAKu3C,YAAY1zC,GAAK,KACxDs5C,EAAgBn9C,KAAKmtC,eAAe,uBACpCtgC,GACAhJ,EAAGA,EAAGyzC,SAAUA,EAAU/4B,UAAW,SAAU60B,KAAMpzC,KAAKy3C,aAAarE,EAAM+J,EAAe,KAAK,GAAQoE,WAAYpE,EAEpHz7C,qBAAkB23B,IACnBr5B,KAAK+gD,mBAAmBl9C,EAAGuvC,EAAM/Z,GAErCr5B,KAAKoG,QAAQ,UAAWyG,EAAM,SAAUA,GACpCtH,EAAMkyC,aAAarE,EAAMvmC,EAAK00C,WAAY,KAC1Ch8C,EAAMuoC,0BACNvoC,EAAM+vC,mBACN/vC,EAAMgwC,qBAAoB,MAGlC7K,EAAS9zB,UAAU0+B,iBAAmB,WAC9Bt1C,KAAKuxC,mBACDvxC,KAAKutC,WAELvtC,KAAKoyC,gBAAgBpyC,KAAK8rC,WAG1B9rC,KAAKqwC,sBAIjB3F,EAAS9zB,UAAU2+B,oBAAsB,SAAUvvB,GAC3CA,IACEhmB,KAAKqrC,sBAGLrrC,KAAKqrC,oBAEXrrC,KAAK+6C,uBAETrQ,EAAS9zB,UAAUmkC,oBAAsB,WACrC,GAAK/6C,KAAK8rC,UAAUjrC,SAAWb,KAAKqrC,qBAAwBrrC,KAAKsrC,KAAM,CACnEtrC,KAAKsrC,MAAO,CACZ,IAAI1lC,IACAmrC,YAEJnrC,GAAUmrC,SAAW/wC,KAAK4hD,sBAAsB5hD,KAAKurC,eACrDvrC,KAAKoG,QAAQ,iBAAkBR,KAGvC8kC,EAAS9zB,UAAUgrC,sBAAwB,SAAUrW,GAGjD,IAAK,GAFDsW,MACAC,EAAkB,EACbC,EAAkB,EAAGA,EAAkBxW,EAAc1qC,OAAQkhD,IAElE,IAAK,GADDC,GAAmBzW,EAAcwW,GAC5BE,EAAgB,EAAGA,EAAgBjiD,KAAK8rC,UAAUjrC,OAAQohD,IAC3DjiD,KAAK8rC,UAAUmW,GAAexlC,OAASulC,EAAiBvlC,OACxDolC,EAAWC,GAAmB9hD,KAAK8rC,UAAUmW,KAC3CH,EAId,OAAOD,IAEXnX,EAAS9zB,UAAUiqC,yBAA2B,SAAUxnB,EAAI/oB,GACxD,GAAI4vC,GAAc7mB,EAAG5yB,cAAc,IAAM0jC,GACpCzoC,qBAAkBw+C,IACnBA,EAAYn8C,UAAUxB,IAAI+N,IAGlCo6B,EAAS9zB,UAAUoqC,kBAAoB,SAAU3nB,EAAI6oB,GACjD,GAAI38C,GAAQvF,IACP0B,qBAAkB23B,EAAG5yB,cAAc,IAAMyjC,OAC1ClqC,KAAKmiD,kBAAoB,GAAIC,cAAYvrB,SAAU,OACnD72B,KAAKmiD,kBAAkBE,QAAQhpB,EAAG5yB,cAAc,IAAMyjC,KAAqBztB,KAAM,YACjFzc,KAAKmiD,kBAAkBE,QAAQhpB,EAAG5yB,cAAc,yBAA2BgW,KAAM,YACjFvW,WAAW,WACPX,EAAM+8C,mBAAmBjpB,EAAI6oB,IAC9B,OAIXxX,EAAS9zB,UAAU0rC,mBAAqB,SAAUjpB,EAAI6oB,GACjC,YAAbA,GACA7oB,EAAGt1B,UAAUxB,IAAI6nC,IACZ1oC,oBAAkB23B,EAAG5yB,cAAc,IAAMojC,OAC1CxQ,EAAG5yB,cAAc,IAAMojC,IAAQ9lC,UAAUP,OAxmEjC,qBAymERxD,KAAKmiD,kBAAkBE,QAAQhpB,EAAG5yB,cAAc,IAAMojC,KAAWptB,KAAM,WACvE4c,EAAG5yB,cAAc,IAAMojC,IAAQ9lC,UAAUxB,IAAI6nC,MAI5C1oC,oBAAkB23B,EAAG5yB,cAAc,IAAMojC,OAC1CxQ,EAAG5yB,cAAc,IAAMojC,IAAQ9lC,UAAUP,OA/mEjC,qBAgnERxD,KAAKmiD,kBAAkBE,QAAQhpB,EAAG5yB,cAAc,IAAMojC,KAAWptB,KAAM,WACvE4c,EAAG5yB,cAAc,IAAMojC,IAAQ9lC,UAAUxB,IAAI8nC,KAGjDhR,EAAG5yB,cAAc,IAAMyjC,KACvB/1B,SAAOklB,EAAG5yB,cAAc,IAAMyjC,MAGtCQ,EAAS9zB,UAAUo1B,cAAgB,SAAUuW,GACtB,KAAfA,GAAsB7gD,oBAAkB6gD,GAIxCviD,KAAKC,QAAQ2Q,gBAAgB,UAH7B5Q,KAAKC,QAAQkP,aAAa,SAAUozC,IAM5C7X,EAAS9zB,UAAUgmC,iBAAmB,SAAU4F,GAC5C,GAAIA,EACA,IACI,GAAIne,YAAUme,EAAgBrwC,UAAUtR,OACpC,MAAO4hD,WAAQte,SAAOqe,EAAgBrwC,UAAUQ,UAAUnI,QAGlE,MAAOk4C,GACH,MAAOD,WAAQD,KAK3B9X,EAAS9zB,UAAUy1B,OAAS,WACpBrsC,KAAKyR,UACLxF,YAAUjM,KAAKotC,eA1oEjB,SA6oEEzmC,eAAa3G,KAAKotC,eA7oEpB,UAgpEN1C,EAAS9zB,UAAUu2B,eAAiB,SAAUl0B,GAE1C,MADAjZ,MAAKoZ,KAAK4N,UAAUhnB,KAAKsZ,QAClBtZ,KAAKoZ,KAAKG,YAAYN,IAEjCyxB,EAAS9zB,UAAUu1B,iBAAmB,WAC7BnsC,KAAKmD,SAYFnD,KAAKotC,cAAcrpC,UAAUC,SAhqE9B,eAiqEChE,KAAKotC,cAAcrpC,UAAUP,OAjqE9B,eAmqEE9B,oBAAkB1B,KAAKktC,eAAiBltC,KAAKC,QAAQ8Y,aAAa,cACnE/Y,KAAKC,QAAQ2Q,gBAAgB,YAC7B5Q,KAAKktC,aAAat8B,gBAAgB,cAEjClP,oBAAkB1B,KAAK2D,cAAgB3D,KAAK2D,YAAYoV,aAAa,aACtE/Y,KAAK2D,YAAYiN,gBAAgB,aAEhClP,oBAAkB1B,KAAKwtC,eAAiBxtC,KAAKwtC,aAAaz0B,aAAa,aACxE/Y,KAAKwtC,aAAaz0B,aAAa,cAtBnC/Y,KAAKotC,cAAcrpC,UAAUxB,IArpE1B,cAspEHvC,KAAKC,QAAQkP,aAAa,WAAY,YACtCnP,KAAKktC,aAAa/9B,aAAa,WAAY,YACtCzN,oBAAkB1B,KAAK2D,cACxB3D,KAAK2D,YAAYwL,aAAa,WAAY,YAEzCzN,oBAAkB1B,KAAKwtC,eACxBxtC,KAAKwtC,aAAar+B,aAAa,WAAY,cAmBvDu7B,EAAS9zB,UAAUg2B,oBAAsB,SAAUzxB,GAG/C,IAAK,GAAIlK,GAAK,EAAGmK,EAFAD,EAAYzZ,oBAAkB1B,KAAKqb,mBAAuBlK,OAAOC,KAAKpR,KAAKqb,iBACvF,SAAU,WAAY,YACiBpK,EAAKmK,EAAava,OAAQoQ,IAAM,CACxE,GAAIqK,GAAOF,EAAanK,EACxB,KAAKvP,oBAAkB1B,KAAKC,QAAQ8Q,aAAauK,IAC7C,OAAQA,GACJ,IAAK,UACI5Z,oBAAkB1B,KAAK+rC,sBAAmE1mC,KAA9CrF,KAAK+rC,gBAAmC,mBAClF5wB,KACHnb,KAAKwZ,eAAgByyB,kBAAmBjsC,KAAKC,QAAQ8Q,aAAa,YAAcoK,GAChFnb,KAAK2qC,YAAYC,OAAS5qC,KAAKisC,kBAEnC,MACJ,KAAK,WACD,GAAKvqC,oBAAkB1B,KAAK+rC,sBAA0D1mC,KAArCrF,KAAK+rC,gBAA0B,UAAqB5wB,EAAW,CAC5G,GAAIwnC,GAAgD,aAApC3iD,KAAKC,QAAQ8Q,aAAauK,IACF,KAApCtb,KAAKC,QAAQ8Q,aAAauK,IAAoD,SAApCtb,KAAKC,QAAQ8Q,aAAauK,EACxEtb,MAAKwZ,eAAgBqxB,SAAU8X,IAAcxnC,GAC7Cnb,KAAK2qC,YAAYE,UAAW,EAEhC,KACJ,KAAK,WACD,GAAKnpC,oBAAkB1B,KAAK+rC,sBAAyD1mC,KAApCrF,KAAK+rC,gBAAyB,SAAqB5wB,EAAW,CAC3G,GAAIynC,GAAiD,aAApC5iD,KAAKC,QAAQ8Q,aAAauK,IACH,KAApCtb,KAAKC,QAAQ8Q,aAAauK,IAAoD,SAApCtb,KAAKC,QAAQ8Q,aAAauK,EACxEtb,MAAKwZ,eAAgBrW,QAASy/C,IAAeznC,GAC7Cnb,KAAK2qC,YAAYj3B,UAAW,MAMpDg3B,EAAS9zB,UAAU28B,YAAc,SAAUH,EAAMyC,EAAQgN,GACrD,GACIjlB,GAAMnb,KAAKhF,IAAIzd,KAAKg2C,cAAc8M,UAAW1P,EAAK9D,MAGlD4D,GAAa6P,WAFL,EAEwBC,KADzB5P,EAAKpC,QAAQ7V,MAHZ,EAGyByC,GACWwV,KAAMA,EAAM9Z,MAJhD,EAI8DsE,IAAKA,EAAKqlB,WAAY,EAAG7L,QAAS,KAC5Gp3C,MAAKkjD,YAAY9P,EAAMF,EAAU2C,EAAQgN,IAG7CnY,EAAS9zB,UAAUssC,YAAc,SAAU9P,EAAMF,EAAU2C,EAAQgN,GAC/D,GAAIt9C,GAAQvF,KACRm2C,EAAW,GAAIC,UACf4M,EAAO5P,EAAKpC,QAAQ7V,MAAM+X,EAAS5Z,MAAO4Z,EAAStV,IACvDuY,GAASY,OAAO,YAAaiM,EAAM5P,EAAK32B,MACxC05B,EAASY,OAAO/2C,KAAKwrC,aAAcwX,EAAM5P,EAAK32B,MAC9C05B,EAASY,OAAO,cAAe7D,EAAS6P,WAAWhlC,YACnDo4B,EAASY,OAAO,aAAc7D,EAAS6P,WAAWhlC,WAClD,IAAIolC,GAAa1gC,KAAK9E,IAAI8E,KAAK2gC,KAAKhQ,EAAK9D,KAAOtvC,KAAKg2C,cAAc8M,WAAY,EAC/E3M,GAASY,OAAO,cAAeoM,EAAWplC,YAC1Co4B,EAASY,OAAO,aAAcoM,EAAWplC,WACzC,IAAI+3B,GAAO,GAAIC,SAAO7S,IAAKljC,KAAKg2C,cAAciF,QAASvyC,KAAM,OAAQ26C,OAAO,EAAMC,YAAa,MAC/FxN,GAAKI,WAAY,EACjBJ,EAAKW,OAAS,SAAU5yC,GAEpB,MADA0B,GAAMg+C,oBAAoB1/C,EAAGqvC,EAAU2C,OAG3CC,EAAK0N,iBAAmB,SAAU3/C,GAE9B,MADA0B,GAAMk+C,sBAAsB5/C,EAAGqvC,EAAU2C,MAG7C,IAAIjwC,IACAmrC,SAAUqC,EACV6D,kBACApI,QAAQ,EACRiU,UAA4C,IAAjC9iD,KAAKg2C,cAAc8M,UAAkB,KAAO9iD,KAAKg2C,cAAc8M,UAE9EhN,GAAKO,WAAa,SAAUxyC,GACxB+B,EAAU0wC,eAAiBR,EAAKS,YAChC3wC,EAAU89C,kBAAoBxQ,EAAS6P,WACH,IAAhCn9C,EAAU89C,kBAEVn+C,EAAMa,QAAQ,YAAaR,EAAW,SAAUA,GAC5CL,EAAMo+C,uBAAuBxN,EAAUvwC,EAAW/B,EAAGuvC,KAIzD7tC,EAAMa,QAAQ,iBAAkBR,EAAW,SAAUA,GACjDL,EAAMo+C,uBAAuBxN,EAAUvwC,EAAW/B,EAAGuvC,MAKjE0C,EAAKa,QAAU,SAAU9yC,GAErB,MADA0B,GAAMq+C,kBAAkB//C,EAAGqvC,EAAU2C,OAGzCC,EAAKe,KAAKV,GACVjD,EAASkE,QAAUtB,GAEvBpL,EAAS9zB,UAAU+sC,uBAAyB,SAAUxN,EAAUvwC,EAAW/B,EAAGuvC,GACtExtC,EAAUipC,OACV7uC,KAAK6jD,kBAAkBhgD,EAAG+B,EAAWwtC,GAGrCpzC,KAAKg3C,eAAeb,EAAUvwC,EAAUqxC,iBAGhDvM,EAAS9zB,UAAUitC,kBAAoB,SAAUhgD,EAAG+B,EAAWwtC,GAC3D,GAAI7tC,GAAQvF,IAEZ,IADA6D,EAAEgrC,QAAS,EAC2B,MAAlCjpC,EAAUmrC,SAASK,WAAvB,CAGAxrC,EAAUmrC,SAASK,WAAa,IAChCxrC,EAAUmrC,SAAS/I,OAAShoC,KAAKmtC,eAAe,mBAChD,IAAIwH,GAAY30C,KAAK01C,aAAa9vC,EAAUmrC,SAC5C,IAAI4D,EAAW,CACNjzC,oBAAkBizC,EAAUluC,cAAc,IAAMojC,OACjD8K,EAAUluC,cAAc,IAAMojC,IAAQl3B,UAAY3S,KAAKmtC,eAAe,oBACtEwH,EAAUluC,cAAc,IAAMojC,IAAQ9lC,UAAUxB,IAAI8nC,KAExDrqC,KAAKkhD,YAAclhD,KAAKsO,cAAc,QAAUgC,UAAW,4BAA6B0D,OAASgF,SAAYhZ,KAAKmrC,cAClH,IAAI2Y,GAAanP,EAAUluC,cAAc,IAAMqjC,GAC3Cga,IACAA,EAAWj4C,cAAcgD,aAAa7O,KAAKkhD,YAAa4C,GAE5D9jD,KAAKkhD,YAAY/xC,aAAa,QAASnP,KAAKmtC,eAAe,UAE3DntC,KAAKkhD,YAAY1xC,iBAAiB,QAAS,SAAU3L,GACjD0B,EAAM47C,mBAAmBt9C,EAAGuvC,EAAMuB,KACnC,GACH30C,KAAK8tC,6BAGbpD,EAAS9zB,UAAUmtC,iBAAmB,WAClC,QAAQ/jD,KAAKg2C,cAAc8M,WAAa,GAAKphD,oBAAkB1B,KAAKg2C,cAAc8M,aAEtFpY,EAAS9zB,UAAU2sC,oBAAsB,SAAU1/C,EAAGqvC,EAAU2C,GAC5D,GAEIlB,GAFApvC,EAAQvF,KACRs3C,EAAWzzC,EAAEmT,MAEjB,IAA4B,IAAxBsgC,EAASE,YAAoBF,EAAStP,QAAU,KAAOsP,EAAStP,OAAS,IAAK,CAC9E,GAAIgc,GAAkBngD,GAAKA,EAAEshB,cAAgBnlB,KAAKu3C,YAAY1zC,GAAK,KAC/Ds/C,EAAa1gC,KAAK9E,IAAI8E,KAAK2gC,KAAKlQ,EAASE,KAAK9D,KAAOtvC,KAAKg2C,cAAc8M,WAAY,GACpFl9C,GACA1B,MAAOL,EACPuvC,KAAMF,EAASE,KACf2P,WAAY7P,EAAS6P,WACrBI,WAAYA,EACZL,UAAW9iD,KAAKg2C,cAAc8M,UAC9BxL,SAAU0M,EAUd,IARAhkD,KAAKoG,QAAQ,eAAgBR,IACzBlE,oBAAkBm0C,IAAYA,IAC9BlB,EAAY30C,KAAK01C,aAAaxC,EAASE,OAE3CpzC,KAAKikD,eAAe/Q,GAChBA,EAAStV,MAAQsV,EAASE,KAAK9D,OAC/B4D,EAASE,KAAKhC,WAAa,KAEE,MAA7B8B,EAASE,KAAKhC,WAAoB,CAClC,GAAI8S,IAAgBhgD,MAAOL,EAAGktC,SAAUmC,EAASE,KAAMvE,QAAQ,EAAOoI,kBACtEj3C,MAAKoG,QAAQ,YAAa89C,EAAa,SAAUt+C,GAE7C,GAAIA,EAAUipC,OAAQ,CAClBqE,EAASE,KAAKhC,WAAa,GAC3B,IAAI+D,GAAgBR,EAAUluC,cAAc,IAAMujC,GAC7CtoC,qBAAkBizC,IAAejzC,oBAAkByzC,KACpDyC,cAAYzC,GACZhhC,SAAOwgC,EAAUluC,cAAc,qBAEnClB,EAAM4+C,gBAAgBjR,OAErB,CACDA,EAASkE,QAAQlB,WAAY,EAC7BoB,EAAS1I,OACT,IAAIuH,GAAW,GAAIC,UACfgO,EAAS7+C,EAAMtF,QAAQ8Q,aAAa,OACxColC,GAASY,OAAOqN,EAAQlR,EAASE,KAAK32B,MACtC05B,EAASY,OAAO,mBAAoB7D,EAASE,KAAK32B,MAClD05B,EAASY,OAAO,kBAAmB7D,EAASE,KAAK32B,MACjDlX,EAAMyxC,eAAeb,EAAUvwC,EAAUqxC,eACzC,IAAInB,GAAO,GAAIC,QAAKxwC,EAAMywC,cAAcC,UAAW,QAAQ,EAAM,KACjEH,GAAKI,WAAY,EACjBJ,EAAKW,OAAS,SAAU5yC,GAEpB,MADA0B,GAAM8+C,gBAAgBxgD,EAAGqvC,EAAU2C,OAGvCC,EAAKe,KAAKV,UAIjB,CACD,GAAKgN,EAAa,IAAOjQ,EAAS6P,YAAcI,EAAajQ,EAAS6P,WAAY,CAC9E,GAAI75C,GAAQlJ,KAAKirC,WAAW5+B,QAAQ6mC,EAWpC,OAVIhqC,IAAS,GACTlJ,KAAKirC,WAAW7iC,OAAOc,EAAO,GAE9BxH,oBAAkB1B,KAAKitC,YAAcvrC,oBAAkBm0C,KAAYA,IAAWlB,IAC1EA,IAAcjzC,oBAAkBizC,EAAUluC,cAAc,IAAM6jC,MAC9Dn2B,SAAOwgC,EAAUluC,cAAc,IAAM6jC,KAEzCtqC,KAAKskD,uBAAuBpR,QAEhClzC,MAAKqhD,kBAAkBx9C,EAAGqvC,EAASE,MAGN,MAA7BF,EAASE,KAAKhC,YACdpxC,KAAKmkD,gBAAgBjR,QAK7BlzC,MAAK4jD,kBAAkB//C,EAAGqvC,IAGlCxI,EAAS9zB,UAAUutC,gBAAkB,SAAUjR,GAC3CA,EAAS5Z,MAAQ4Z,EAAStV,IAC1BsV,EAAStV,KAAO59B,KAAKg2C,cAAc8M,UACnC5P,EAAStV,IAAMnb,KAAKhF,IAAIy1B,EAAStV,IAAKsV,EAASE,KAAK9D,MACpD4D,EAAS6P,YAAc,EACvB/iD,KAAKkjD,YAAYhQ,EAASE,KAAMF,IAEpCxI,EAAS9zB,UAAUytC,gBAAkB,SAAUxgD,EAAGqvC,EAAU2C,GACxD,GAAIn0C,oBAAkB1B,KAAKitC,WAAcvrC,oBAAkBm0C,KAAYA,EAAS,CAC5E,GAAIlB,GAAY30C,KAAK01C,aAAaxC,EAASE,MACvC6N,EAAatM,EAAUluC,cAAc,IAAMujC,IAC3CmL,EAAgB8L,CACpBjhD,MAAKy3C,aAAavE,EAASE,KAAMpzC,KAAKmtC,eAAe,oBAAqB,KAC1EntC,KAAK6gD,yBAAyBlM,EAAWtK,IACzCrqC,KAAKghD,kBAAkBrM,EAAW,WAClCsM,GAAcA,EAAWl9C,UAAUP,OAAOwmC,IAC1CiX,GAAcA,EAAWl9C,UAAUxB,IAAIunC,IACvCmX,GAAcA,EAAW9xC,aAAa,QAASnP,KAAKmtC,eAAe,UACnE,IAAIoX,GAAY5P,EAAUluC,cAAc,IAAM6jC,GAC9Cia,IAAaA,EAAUxgD,UAAUxB,IAAI0nC,IACrCsa,GAAaA,EAAUxgD,UAAUP,OAAO8mC,IACxCia,GAAaA,EAAUp1C,aAAa,QAASnP,KAAKmtC,eAAe,UAC5DzrC,oBAAkBizC,IAAejzC,oBAAkBu/C,IAChDv/C,oBAAkBizC,EAAUluC,cAAc,sBAC9CmxC,cAAYzC,GACZhhC,SAAOwgC,EAAUluC,cAAc,uBAI3CikC,EAAS9zB,UAAUm4B,YAAc,SAAUmE,EAAUrvC,EAAGgyC,GACpD3C,EAASE,KAAKhC,WAAa,IAC3B8B,EAASE,KAAKpL,OAAShoC,KAAKmtC,eAAe,SAC3CntC,KAAKikD,eAAe/Q,EACpB,IAAIttC,IACA1B,MAAOL,GAAQ,KACfuvC,KAAMF,EAASE,KACf2P,WAAY7P,EAAS6P,WACrByB,WAAY/hC,KAAKK,MAAMowB,EAASE,KAAK9D,KAAOtvC,KAAKg2C,cAAc8M,WAC/DA,UAAW9iD,KAAKg2C,cAAc8M,UAElC9iD,MAAKqzC,YAAYH,EAAU2C,EAAQjwC,IAEvC8kC,EAAS9zB,UAAUy8B,YAAc,SAAUH,EAAU2C,EAAQjwC,GACxB,MAA7BstC,EAASE,KAAKhC,aACd8B,EAASkE,QAAQlB,WAAY,EAC7BhD,EAASkE,QAAQb,YAAY3H,QAEjC,IAAI+F,GAAY30C,KAAK01C,aAAaxC,EAASE,KAC3C,IAAI1xC,oBAAkB1B,KAAKitC,YAAcvrC,oBAAkBm0C,KAAYA,GAAS,CAC5E,GAAI5C,GAAgB0B,EAAUluC,cAAc,IAAM6jC,GAClD2I,GAAclvC,UAAUP,OAAO8mC,IAC/B2I,EAAclvC,UAAUxB,IA96EhB,mBA+6ER0wC,EAAc9jC,aAAa,QAASnP,KAAKmtC,eAAe,WACxD8F,EAAcp0B,mBAAmB9a,UAAUxB,IAAIunC,IAC/CmJ,EAAcp0B,mBAAmB9a,UAAUP,OAAOwmC,IAClDiJ,EAAcp0B,mBAAmB1P,aAAa,QAASnP,KAAKmtC,eAAe,WAE/E,IAAK,GAAIvsC,GAAI,EAAGA,EAAIZ,KAAKirC,WAAWpqC,OAAQD,IACpCZ,KAAKirC,WAAWrqC,GAAGwyC,KAAK32B,OAASy2B,EAASE,KAAK32B,MAC/Czc,KAAKirC,WAAW7iC,OAAOxH,EAAG,EAGlCZ,MAAKirC,WAAW7pC,KAAK8xC,GACrBlzC,KAAKoG,QAAQ,UAAWR,IAE5B8kC,EAAS9zB,UAAU08B,aAAe,SAAUJ,EAAUrvC,EAAGgyC,GACrD,GACI5C,GADA0B,EAAY30C,KAAK01C,aAAaxC,EAASE,KAEtC1xC,qBAAkBizC,KACnB1B,EAAgB0B,EAAUluC,cAAc,qBAEvC/E,oBAAkBuxC,KAAmBvxC,oBAAkBm0C,IAAYA,IACpE5C,EAAclvC,UAAUP,OAn8EhB,mBAo8ERyvC,EAAclvC,UAAUxB,IAAI+nC,IAC5B2I,EAAc9jC,aAAa,QAASnP,KAAKmtC,eAAe,UACxD8F,EAAcp0B,mBAAmB9a,UAAUP,OAAOsmC,IAClDmJ,EAAcp0B,mBAAmB9a,UAAUxB,IAAIynC,IAC/CiJ,EAAcp0B,mBAAmB1P,aAAa,QAASnP,KAAKmtC,eAAe,WAE/E+F,EAASE,KAAKpL,OAAShoC,KAAKmtC,eAAe,cAC3C+F,EAASE,KAAKhC,WAAa,IAC3BpxC,KAAKikD,eAAe/Q,EACpB,IAAIttC,IACA1B,MAAOL,GAAQ,KACfuvC,KAAMF,EAASE,KACf2P,WAAY7P,EAAS6P,WACrByB,WAAY/hC,KAAKK,MAAMowB,EAASE,KAAK9D,KAAOtvC,KAAKg2C,cAAc8M,WAC/DA,UAAW9iD,KAAKg2C,cAAc8M,UAElC9iD,MAAKoG,QAAQ,WAAYR,EACzB,KAAK,GAAIhF,GAAI,EAAGA,EAAIZ,KAAKirC,WAAWpqC,OAAQD,IACpCZ,KAAKirC,WAAWrqC,GAAGg9B,MAAQ59B,KAAKirC,WAAWrqC,GAAGwyC,KAAK9D,KACnDtvC,KAAKujD,oBAAoB1/C,EAAGqvC,EAAU2C,GAGlC71C,KAAKirC,WAAWrqC,GAAGwyC,KAAK32B,OAASy2B,EAASE,KAAK32B,OAC/Czc,KAAKirC,WAAWrqC,GAAG04B,MAAQt5B,KAAKirC,WAAWrqC,GAAGg9B,IAC9C59B,KAAKirC,WAAWrqC,GAAGg9B,IAAM59B,KAAKirC,WAAWrqC,GAAGg9B,IAAM59B,KAAKg2C,cAAc8M,UACrE9iD,KAAKirC,WAAWrqC,GAAGg9B,IAAMnb,KAAKhF,IAAIzd,KAAKirC,WAAWrqC,GAAGg9B,IAAK59B,KAAKirC,WAAWrqC,GAAGwyC,KAAK9D,MAClFtvC,KAAKirC,WAAWrqC,GAAGmiD,WAAa/iD,KAAKirC,WAAWrqC,GAAGmiD,WAAa,EAChE/iD,KAAKkjD,YAAYljD,KAAKirC,WAAWrqC,GAAGwyC,KAAMpzC,KAAKirC,WAAWrqC,GAAIi1C,KAK9EnL,EAAS9zB,UAAUqtC,eAAiB,SAAU/Q,IACK,IAA3ClzC,KAAKkrC,eAAe7+B,QAAQ6mC,GAC5BlzC,KAAKkrC,eAAe9pC,KAAK8xC,IAGzBlzC,KAAKkrC,eAAe9iC,OAAOpI,KAAKkrC,eAAe7+B,QAAQ6mC,GAAW,GAClElzC,KAAKkrC,eAAe9pC,KAAK8xC,KAGjCxI,EAAS9zB,UAAU0tC,uBAAyB,SAAUpR,GAClD,GAAIyB,GAAY30C,KAAK01C,aAAaxC,EAASE,KAC3C,KAAK1xC,oBAAkBizC,GAAY,CAC/B30C,KAAK6gD,yBAAyBlM,EAAWvK,IACzCpqC,KAAKghD,kBAAkBrM,EAAW,UAClC,IAAI8P,GAAe9P,EAAUluC,cAAc,IAAMujC,GAC5CtoC,qBAAkB+iD,KACnBA,EAAa1gD,UAAUxB,IAAIwnC,IAC3B0a,EAAat1C,aAAa,QAASnP,KAAKmtC,eAAe,WACvDsX,EAAa1gD,UAAUP,OAAOwmC,GAjgFtB,wBAqgFpBU,EAAS9zB,UAAUgtC,kBAAoB,SAAU//C,EAAGqvC,EAAU2C,GAC1D,GAEIlB,GAFApvC,EAAQvF,KACRwkD,EAAa/hC,KAAK9E,IAAI8E,KAAK2gC,KAAKlQ,EAASE,KAAK9D,KAAOtvC,KAAKg2C,cAAc8M,WAAY,IAEpFphD,oBAAkB1B,KAAKitC,YAAcvrC,oBAAkBm0C,IAAYA,IACnElB,EAAY30C,KAAK01C,aAAaxC,EAASE,MAE3C,IAAI4Q,GAAkBngD,GAAKA,EAAEshB,cAAgBnlB,KAAKu3C,YAAY1zC,GAAK,KAC/D+B,GACA1B,MAAOL,EACPuvC,KAAMF,EAASE,KACf2P,WAAY7P,EAAS6P,WACrBI,WAAYqB,EACZ1B,UAAW9iD,KAAKg2C,cAAc8M,UAC9BjU,QAAQ,EACRyI,SAAU0M,EAEdhkD,MAAKoG,QAAQ,eAAgBR,EAAW,SAAUA,GAE9C,IAAKA,EAAUipC,OACX,GAAIqE,EAAS+P,WAAa19C,EAAMywC,cAAciN,WAC1C/8C,WAAW,WACPX,EAAMm/C,aAAa/P,EAAWzB,EAAU2C,IACzCtwC,EAAMywC,cAAc2O,qBAEtB,CACD,IAAKjjD,oBAAkBizC,GAAY,CAC/B,GAAIuM,GAAcvM,EAAUluC,cAAc,IAAM6jC,IAC5CqK,EAAUluC,cAAc,IAAM6jC,IAAgBqK,EAAUluC,cAAc,mBACrE/E,qBAAkBw/C,KACnBA,EAAYn9C,UAAUxB,IAAI0nC,IAC1BiX,EAAYn9C,UAAUP,OAAO8mC,GAzhFrC,oBA2hFI/kC,EAAMs7C,yBAAyBlM,EAAWtK,IAC1C9kC,EAAMy7C,kBAAkBrM,EAAW,WACnCA,EAAUluC,cAAc,YAAY1C,UAAUP,OAxiF9C,oBAyiFA,IAAI06C,GAAcvJ,EAAUluC,cAAc,IAAMujC,IAC5C2K,EAAUluC,cAAc,IAAMujC,IAAc2K,EAAUluC,cAAc,IAAMqjC,GAC9EoU,GAAYn6C,UAAUP,OAAOwmC,IACxBtoC,oBAAkBizC,EAAUluC,cAAc,IAAM6jC,MACjDn2B,SAAOwgC,EAAUluC,cAAc,IAAM6jC,KAErC4I,EAAS5Z,MAAQ,GACjB4kB,EAAYn6C,UAAUxB,IAAIwnC,IAC1BmU,EAAY/uC,aAAa,QAAS5J,EAAM4nC,eAAe,aAGvD+Q,EAAYn6C,UAAUxB,IAAIunC,IAC1BoU,EAAY/uC,aAAa,QAAS5J,EAAM4nC,eAAe,YAG/D+F,EAAS+P,WAAa,CACtB,IAAI2B,GAAS1R,EAASE,KAClByR,EAAiBt/C,EAAM4nC,eAAe,uBACtCtgC,GACAhJ,EAAGA,EAAGyzC,SAAU0M,EAChBzlC,UAAW,SACX60B,KAAM7tC,EAAMkyC,aAAamN,EAAQC,EAAgB,KAAK,GACtDtD,WAAYsD,EAEhBt/C,GAAMa,QAAQ,UAAWyG,EAAM,SAAUA,GACrCtH,EAAMkyC,aAAamN,EAAQ/3C,EAAK00C,WAAY,KAC5Ch8C,EAAM+vC,mBACN/vC,EAAMgwC,qBAAoB,SAM9C7K,EAAS9zB,UAAU8tC,aAAe,SAAU/P,EAAWzB,EAAU2C,GACzDn0C,oBAAkB1B,KAAKitC,YAAcvrC,oBAAkBm0C,KAAYA,IAAWlB,GAC9E30C,KAAK6gD,yBAAyBlM,EAAWtK,IAE7C6I,EAAS+P,YAAc,EACvBjjD,KAAKkjD,YAAYhQ,EAASE,KAAMF,IAEpCxI,EAAS9zB,UAAUkuC,qBAAuB,SAAUjhD,GAChD,GAAIovC,GAAgBpvC,EAAEmT,OAClB+9B,EAAkBlxC,EAAEmT,OAAOnL,cAC3B3C,EAAQlJ,KAAK6rC,SAASx/B,QAAQ0oC,GAC9BhE,EAAW/wC,KAAK8rC,UAAU5iC,GAC1BgqC,EAAWlzC,KAAKmzC,mBAAmBpC,EACnCkC,GAAclvC,UAAUC,SAASsmC,IAEjCtqC,KAAK+uC,YAAYmE,EAAUrvC,GAEtBovC,EAAclvC,UAAUC,SAhlFrB,mBAklFRhE,KAAKszC,aAAaJ,EAAUrvC,GAEvBovC,EAAclvC,UAAUC,SAASimC,MAClCiJ,EAASE,KAAKpL,SAAWhoC,KAAKmtC,eAAe,oBAC7CntC,KAAK+kD,YAAY7R,GAAU,GAG3BlzC,KAAK+kD,YAAY7R,GAAU,KAIvCxI,EAAS9zB,UAAUmuC,YAAc,SAAU7R,EAAU8R,GAC7CA,GACA9R,EAAStV,IAAMsV,EAAStV,IAAM59B,KAAKg2C,cAAc8M,UACjD5P,EAAS5Z,MAAQ4Z,EAAS5Z,MAAQt5B,KAAKg2C,cAAc8M,UACrD9iD,KAAKkjD,YAAYhQ,EAASE,KAAMF,KAGhCA,EAASE,KAAKhC,WAAa,IAC3B8B,EAASE,KAAKpL,OAAShoC,KAAKmtC,eAAe,wBAC3CntC,KAAKuzC,YAAYL,EAASE,OAG7BpzC,KAAK01C,aAAaxC,EAASE,MAAOrvC,UAAUxB,IAxmFhC,qBA2mFjBmoC,EAAS9zB,UAAU6sC,sBAAwB,SAAU5/C,EAAGqvC,EAAU2C,GAC9D,GAAItwC,GAAQvF,IACZ,IAAiC,MAA7BkzC,EAASE,KAAKhC,WAAlB,CAGiC,MAA7B8B,EAASE,KAAKhC,YAAmD,MAA7B8B,EAASE,KAAKhC,aAClD8B,EAASE,KAAKhC,WAAa,IAC3B8B,EAASE,KAAKpL,OAAShoC,KAAKmtC,eAAe,eAE/CntC,KAAKikD,eAAe/Q,EACpB,IAAIyB,GAAY30C,KAAK01C,aAAaxC,EAASE,KAC3C,KAAI1xC,oBAAkBizC,GAAtB,CAGA,GAAIsQ,GAAetQ,EAAUluC,cAAc,IAAMwjC,GAMjD,IALKvoC,oBAAkBujD,KACnBA,EAAalhD,UAAUxB,IAAI+nC,IAC3B2a,EAAa91C,aAAa,QAASnP,KAAKmtC,eAAe,UACvD8X,EAAalhD,UAAUP,OAAOymC,MAE7BvoC,oBAAkBizC,GAAY,CAC/B,KAAMA,EAAU5/B,iBAAiB,IAAMm1B,IAAkBrpC,OAAS,GAAI,CAClE,GAAI82C,GAAgBhD,EAAUluC,cAAc,IAAMojC,GAC9CnoC,qBAAkB1B,KAAKitC,YACvB0K,EAAc5zC,UAAUxB,IA/oFpB,qBAgpFJo1C,EAAc5zC,UAAUP,OAAO6mC,IAC/BrqC,KAAKggD,kBAAkBrL,GACvB30C,KAAK6gD,yBAAyBlM,EAlpF1B,qBAopFR,IAAIuQ,GAAYvQ,EAAUluC,cAAc,IAAMqjC,IAAe6K,EAAUluC,cAAc,IAAMqjC,IACvF6K,EAAUluC,cAAc,IAAMsjC,GAC7BroC,qBAAkBwjD,KACnBA,EAAUnhD,UAAUxB,IAAIynC,IACxBkb,EAAU/1C,aAAa,QAASnP,KAAKmtC,eAAe,UACpD+X,EAAUnhD,UAAUP,OAAOsmC,KAGnC,IAAKnvB,MAAM8H,KAAKK,MAAOjf,EAAEy8C,OAASz8C,EAAE08C,MAAS,OAAS7+C,oBAAkB1B,KAAKitC,WAA0C,MAA7BiG,EAASE,KAAKhC,WAAoB,CACxH,GAAI+T,OAAc,GACdC,EAAc3iC,KAAK2gC,KAAKlQ,EAASE,KAAK9D,KAAOtvC,KAAKg2C,cAAc8M,WAAa,CAC7E9iD,MAAKg2C,cAAc8M,WAAasC,IAChCD,EAAc1iC,KAAKK,MAAMowB,EAAS6P,WAAaqC,EAAc,KAC7DplD,KAAKwgD,oBAAoB7L,EAAWwQ,EAAYpnC,WAAa,MAGzC,IAAxBm1B,EAAS6P,YACT/iD,KAAK8tC,0BAGb,GAAIpsC,oBAAkBizC,EAAUluC,cAAc,IAAM6jC,MAAkB5oC,oBAAkB1B,KAAKitC,WACtFvrC,oBAAkBizC,EAAUluC,cAAc,IAAMsjC,KAAe,CAClE/pC,KAAKkhD,YAAclhD,KAAKsO,cAAc,QAAUgC,UAAW,2BAA4B0D,OAASgF,SAAYhZ,KAAKmrC,eACxF,SAArBnrC,KAAK4vC,aACL5vC,KAAKkhD,YAAYn9C,UAAUxB,IAAI,SAEnC,IAAI8iD,GAAY1Q,EAAUluC,cAAc,IAAMujC,GAC9Cqb,GAAUx5C,cAAcgD,aAAa7O,KAAKkhD,YAAamE,GACvDrlD,KAAKkhD,YAAY/xC,aAAa,QAASnP,KAAKmtC,eAAe,UAC3DntC,KAAKkhD,YAAY1xC,iBAAiB,QAAS,SAAU3L,GACjD0B,EAAMu/C,qBAAqBjhD,KAC5B,OAWX6mC,EAAS9zB,UAAUmnC,YAAc,SAAUuH,GACvC,GAAI1kD,IAAK,CACT,KAAK0kD,EACD,MAAO,QAEX,IACIA,GAAgB,KAChB1kD,UACK0kD,EAAQ,GAKjB,OAJI1kD,IAAK,IACL0kD,GAAgB,KAChB1kD,EAAI,GAED6hB,KAAK9E,IAAI2nC,EAAO,GAAG7hC,QAAQ,GAAK,KAAO,KAAM,MAAM7iB,IAS9D8pC,EAAS9zB,UAAUsiC,aAAe,SAAUpN,GAIxC,IAAK,GAFD6E,GADJ7E,EAAYA,GAAwB9rC,KAAKi5C,cAErCwF,KACK79C,EAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IAC9B69C,EAAUr9C,KAAKuvC,EAAM/vC,GAAG6b,KAI5B,KAAK,GADD8oC,MACKt0C,EAAK,EAAGu0C,EAFK/G,EAAUgH,OAEsBx0C,EAAKu0C,EAAkB3kD,OAAQoQ,IAEjF,IAAK,GADDy0C,GAASF,EAAkBv0C,GACtBrQ,EAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IAC1B8kD,IAAW/U,EAAM/vC,GAAG6b,MACpB8oC,EAAgBnkD,KAAKuvC,EAAM/vC,GAIvC,OAAO2kD,IASX7a,EAAS9zB,UAAUsP,QAAU,WACzBlmB,KAAKC,QAAQmC,MAAQ,KACrBpC,KAAK2lD,gBACL3lD,KAAKksC,WACLlsC,KAAKgzC,eACLhzC,KAAK0sC,mBACD1sC,KAAK6qC,UACL7qC,KAAKC,QAAQ2Q,gBAAgB,YAE5B5Q,KAAKmD,SACNnD,KAAKC,QAAQ2Q,gBAAgB,YAEjC5Q,KAAKC,QAAQ2Q,gBAAgB,UAC7B5Q,KAAK4/C,sBAEL,KAAK,GAAI3uC,GAAK,EAAG20C,GADC,aAAc,YAAa,kBAAmB,YACpB30C,EAAK20C,EAAa/kD,OAAQoQ,IAAM,CACxE,GAAI1H,GAAMq8C,EAAa30C,EACvBjR,MAAKC,QAAQ2Q,gBAAgBrH,GAE5B7H,oBAAkB1B,KAAKotC,iBACxBptC,KAAKotC,cAAcvhC,cAAciD,YAAY9O,KAAKC,SAClDkU,SAAOnU,KAAKotC,gBAEhBptC,KAAKotC,cAAgB,KACrBv1B,EAAOjB,UAAUsP,QAAQjlB,KAAKjB,OAWlC0qC,EAAS9zB,UAAU41B,OAAS,SAAUmE,EAAOkF,GACzC,GAAItwC,GAAQvF,IAEZ,IADA2wC,EAAQA,GAAgB3wC,KAAK8rC,UACzB9rC,KAAKuxC,mBAAqBvxC,KAAK2rC,wBAA0BkK,GACzD71C,KAAKqyC,eAAe1B,OAEnB,CACD,GAAIkV,GAAgB7lD,KAAKk1C,gBAAgBvE,GACrC/qC,GACAqxC,kBACAX,eAAgB,KAChBzH,QAAQ,EAEZ7uC,MAAKoG,QAAQ,eAAgBR,EAAW,SAAUA,GACzCA,EAAUipC,QACXtpC,EAAMugD,YAAYD,EAAehQ,OAKjDnL,EAAS9zB,UAAUs+B,gBAAkB,SAAUvE,GAC3C,GAAImV,KAOJ,OANInV,aAAiBp6B,OACjBuvC,EAAcnV,EAGdmV,EAAY1kD,KAAKuvC,GAEdmV,GAGXpb,EAAS9zB,UAAUmvC,qBAAuB,SAAUlD,EAAWrtC,EAAUwwC,GACrE,GAAIzgD,GAAQvF,IACZ,OAAO,IAAIo5C,SAAQ,SAAUC,EAASC,GAClC,GAAIlG,GAAO7tC,EAAMkmC,YAAYoX,GAAW7R,OACxC,KACI,GAAIiV,GAAS,GAAIzM,WACjByM,GAAOvM,OAAS,SAAW7sC,GACvB,MAAO,YACH,IACI,GAAIq5C,GAAWr5C,EAAK4F,OAChBoyB,EAAOqhB,EAAWA,EAASvlD,MAAM,YAAY,GAAK,IACtD04C,GAAQxU,GAEZ,MAAOhhC,GACHy1C,EAAOz1C,MAGhBoiD,GACHA,EAAOxM,cAAcrG,EAAKjY,MAAM3lB,EAAUA,EAAWwwC,IAEzD,MAAOniD,GACHy1C,EAAOz1C,OAMnB6mC,EAAS9zB,UAAUuvC,gBAAkB,SAAUhxC,GAE3C,GAAIw7B,GAAQ3wC,KAAK8rC,SACjB,OAAK6E,IAA0B,IAAjBA,EAAM9vC,OAGP8vC,EAAM9vC,QAFP,GAOhB6pC,EAAS9zB,UAAUwvC,YAAc,SAAUl9C,EAAOiM,GAE9C,GAAIw7B,GAAQ3wC,KAAK8rC,SACjB,KAAK6E,GAA0B,IAAjBA,EAAM9vC,OAChB,OAAQ,CAEZ,IAAIuyC,GAAOzC,EAAMznC,GACbm9C,EAAYrmD,KAAK0rC,YAErB,OADA1rC,MAAKyrC,YAAY4a,GAAajT,EACvBiT,GAIX3b,EAAS9zB,UAAU0vC,YAAc,SAAUp9C,EAAOiM,GAE9C,GAAIw7B,GAAQ3wC,KAAK8rC,SACjB,OAAK6E,IAA0B,IAAjBA,EAAM9vC,QAGT8vC,EAAMznC,GAIVlJ,KAAK8rC,UAAU5iC,GANX,MAQfwhC,EAAS9zB,UAAUkvC,YAAc,SAAUnV,EAAOkF,GAC9C,GAAItK,KACJ,IAAmC,KAA/BvrC,KAAKg2C,cAAciF,UAAkBv5C,oBAAkB1B,KAAKg2C,cAAciF,SAA9E,CAGA,IAAKpF,GAAUn0C,oBAAkBm0C,GAC7B,GAAK71C,KAAK6qC,SAMNU,EAAgBvrC,KAAK6/C,eAAelP,OANpB,CAChB,GAAIyC,KACJA,GAAKhyC,KAAKuvC,EAAM,IAChBpF,EAAgBvrC,KAAK6/C,eAAezM,OAOxC7H,GAAgBoF,CAEpB,KAAK,GAAI/vC,GAAI,EAAGA,EAAI2qC,EAAc1qC,OAAQD,IACtCZ,KAAKumD,mBAAmBhb,EAAe3qC,EAAGi1C,KAGlDnL,EAAS9zB,UAAU2vC,mBAAqB,SAAUhb,EAAe3qC,EAAGi1C,GAChE,GAAItwC,GAAQvF,KAERwmD,EAAexmD,KAAK+jD,mBACpBjO,EAAO,GAAIC,QAAK/1C,KAAKg2C,cAAciF,QAAS,QAAQ,EAAM,KAC9DnF,GAAKI,WAAY,CACjB,IACItwC,IACAmrC,SAAUxF,EAAc3qC,GACxBq2C,kBACApI,QAAQ,GAERsH,EAAW,GAAIC,SAWnB,IAVAN,EAAKO,WAAa,SAAUxyC,GACxB+B,EAAU0wC,eAAiBR,EAAKS,YAChChxC,EAAMa,QAAQ,YAAaR,EAAW,SAAUA,GAExCA,EAAUipC,QACVtpC,EAAMs+C,kBAAkBhgD,EAAG+B,EAAW2lC,EAAc3qC,IAExD2E,EAAMyxC,eAAeb,EAAUvwC,EAAUqxC,mBAGb,MAAhC1L,EAAc3qC,GAAGwwC,WAAoB,CACrC,GAAIqV,GAASzmD,KAAKC,QAAQ8Q,aAAa,OACvColC,GAASY,OAAO0P,EAAQlb,EAAc3qC,GAAGowC,QAASzF,EAAc3qC,GAAG6b,MAC/D+pC,GAAgBjb,EAAc3qC,GAAG0uC,KAAOtvC,KAAKg2C,cAAc8M,UAC3D9iD,KAAKuzC,YAAYhI,EAAc3qC,GAAIi1C,EAAQj1C,IAG3Ck1C,EAAKW,OAAS,SAAU5yC,GACpB,MAAI+B,GAAUipC,WAIVtpC,EAAM67C,eAAev9C,EAAG0nC,EAAc3qC,GAAIi1C,QAIlDC,EAAK0N,iBAAmB,SAAU3/C,GAC9B,MAAI+B,GAAUipC,WAIVtpC,EAAMm7C,iBAAiB78C,EAAG0nC,EAAc3qC,GAAIi1C,EAAQC,QAK5DA,EAAKa,QAAU,SAAU9yC,GAErB,MADA0B,GAAM+7C,aAAaz9C,EAAG0nC,EAAc3qC,QAGxCk1C,EAAKe,KAAKV,MAItBzL,EAAS9zB,UAAU8vC,YAAc,SAAUC,GAKvC,IAAK,GAJDhS,GAAY30C,KAAK6rC,SAAS8a,GAC1B/R,EAAW50C,KAAK60C,eAChBC,GAAgBH,EAAU5jC,aAAa,oBACvC1M,EAAa,EACRzD,EAAI,EAAGA,EAAI+lD,EAAS/lD,IACzByD,IAAgBrE,KAAK6rC,SAASjrC,GAAGmQ,aAAa,mBAGlD,KAAK,GAAIhQ,GADOsD,EAAaywC,EAAgB,EACtB/zC,GAAKsD,EAAYtD,IACpC6zC,EAASxsC,OAAOrH,EAAG,IAe3B2pC,EAAS9zB,UAAUpT,OAAS,SAAUutC,EAAU0E,EAAgBG,EAAgBkB,EAAajqC,GACzF,GAAItH,GAAQvF,IACR0B,qBAAkBo1C,KAClBA,GAAc,EAElB,IAAIlxC,IACA1B,MAAO2I,EACPgiC,QAAQ,EACR/C,aACAmL,kBACAH,YAAaA,EACbR,eAAgB,MAEhBsQ,GACA/X,QAAQ,EACRoI,kBACAX,eAAgB,KAEpBt2C,MAAKoG,QAAQ,eAAgBwgD,EAAiB,SAAUA,GACpD,IAAKA,EAAgB/X,OACjB,GAAItpC,EAAM0vC,eACNrvC,EAAUkmC,UAAYiF,EACtBxrC,EAAMa,QAAQ,WAAYR,EAAW,SAAUA,GAC3C,IAAKA,EAAUipC,OAIX,IAAK,GAFDgY,IAAc,EACdF,MAAU,GACL11C,EAAK,EAAG61C,EAHGvhD,EAAM2vC,gBAAgBnE,GAGQ9/B,EAAK61C,EAAgBjmD,OAAQoQ,IAAM,CACjF,GAAI4zB,GAAOiiB,EAAgB71C,EAI3B,IAHK41C,IACDF,EAAUphD,EAAMsmC,SAASx/B,QAAQw4B,EAAK2Z,OAEtCmI,GAAW,EAAG,CACd,GAAInhD,GAAgB9D,oBAAkBmjC,EAAK3wB,OAAsB,KAAb2wB,EAAK3wB,KACrD1O,IACA2O,SAAO3O,GAEXD,EAAMmhD,YAAYC,GAClBxyC,SAAO5O,EAAMsmC,SAAS8a,IACtBphD,EAAMsmC,SAASzjC,OAAOu+C,EAAS,GAC/BE,GAAc,EACdF,GAAW,UAM1B,IAAIphD,EAAM2oB,SAAWxsB,oBAAkB6D,EAAMywC,cAAcC,YAAgD,KAAlC1wC,EAAMywC,cAAcC,WAC9FrwC,EAAUkmC,UAAYvmC,EAAMsvC,eAC5BtvC,EAAMa,QAAQ,WAAYR,EAAW,SAAUA,GACtCA,EAAUipC,QACXtpC,EAAM2mC,iBAIb,CACD,GAAIsH,OACJzC,EAAYrvC,oBAAkBqvC,GAAuBxrC,EAAMumC,UAAjBiF,YAClBx6B,OACpBi9B,EAAczC,EAGdyC,EAAYpyC,KAAK2vC,GAErBnrC,EAAUkmC,UAAY0H,CAyBtB,KAAK,GAxBDyC,GAAY1wC,EAAMywC,cAAcC,UAChC8Q,EAA0B,KAAd9Q,IAAoBv0C,oBAAkBu0C,GAuB7ChlC,EAAK,EAAG+1C,EAAgBxT,EAAaviC,EAAK+1C,EAAcnmD,OAAQoQ,KAtB3D,SAAU0/B,GACpB,GAAIsW,GAAoB1hD,EAAMulC,kBAAkBz+B,QAAQskC,IAC9B,MAArBA,EAAMS,YAA2C,MAArBT,EAAMS,YAA4C,MAArBT,EAAMS,aACzC,IAAvB6V,IAA8BF,EAC9BxhD,EAAMowC,mBAAmBhF,EAAO/qC,EAAWgwC,EAAgBH,GAGtDG,EAQDrwC,EAAMiwC,gBAAgB7E,EAAO8E,GAP7BlwC,EAAMa,QAAQ,WAAYR,EAAW,SAAUA,GACtCA,EAAUipC,QACXtpC,EAAMiwC,gBAAgB7E,EAAO8E,KAQzC5oC,IAASA,EAAKmK,OAAOjT,UAAUC,SAAS8lC,KACxCvkC,EAAMgwC,qBAAoB,IAIlByR,EAAc/1C,QAa9Cy5B,EAAS9zB,UAAUs1B,SAAW,WAC1B,GAAI3mC,GAAQvF,IACZ,IAAI0B,oBAAkB1B,KAAKytC,YAKvB,MAJyB,SAArBztC,KAAK4vC,cACL5vC,KAAKC,QAAQmC,MAAQ,SAEzBpC,KAAK8rC,aAGT,IAAIlmC,IACAipC,QAAQ,EACR/C,UAAW9rC,KAAK8rC,UAEpB9rC,MAAKoG,QAAQ,WAAYR,EAAW,SAAUA,GACrCA,EAAUipC,SACXtpC,EAAMsrC,YACNtrC,EAAM8lC,oBAAsB,EAC5B9lC,EAAM6uB,OAAS,MAW3BsW,EAAS9zB,UAAUi+B,aAAe,SAAU3rC,GACxC,MAAIxH,qBAAkBwH,GACXlJ,KAAK8rC,UAGL9rC,KAAK00C,iBAAiBxrC,IAWrCwhC,EAAS9zB,UAAUo4B,MAAQ,SAAU+B,EAAU8E,GAC3C9E,EAAWA,GAAsB/wC,KAAK8rC,SACtC,IAAIob,GAAgBlnD,KAAKk1C,gBAAgBnE,EACzC/wC,MAAKmnD,eAAeD,EAAerR,IAEvCnL,EAAS9zB,UAAUuwC,eAAiB,SAAUpW,EAAU8E,GAEpD,IAAK,GADDlF,GAAQ3wC,KAAKonD,SAASrW,GACjBnwC,EAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IACF,MAAxB+vC,EAAM/vC,GAAGwwC,YACTpxC,KAAK+uC,YAAY/uC,KAAKmzC,mBAAmBxC,EAAM/vC,GAAI,MAAO,KAAMi1C,IAI5EnL,EAAS9zB,UAAUwwC,SAAW,SAAUrW,GACpC,GAAIJ,KAOJ,OANKjvC,qBAAkBqvC,IAAeA,YAAoBx6B,OAItDo6B,EAAQI,EAHRJ,EAAMvvC,KAAK2vC,GAKRJ,GASXjG,EAAS9zB,UAAUq4B,OAAS,SAAU8B,EAAU8E,GAC5C9E,EAAWA,GAAsB/wC,KAAK8rC,SACtC,IAAIob,GAAgBlnD,KAAKk1C,gBAAgBnE,EACzC/wC,MAAKqnD,YAAYH,EAAerR,IAEpCnL,EAAS9zB,UAAUywC,YAAc,SAAUtW,EAAU8E,GAEjD,IAAK,GADDlF,GAAQ3wC,KAAKonD,SAASrW,GACjBnwC,EAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IACF,MAAxB+vC,EAAM/vC,GAAGwwC,YACTpxC,KAAKszC,aAAatzC,KAAKmzC,mBAAmBxC,EAAM/vC,GAAI,MAAO,KAAMi1C,IAY7EnL,EAAS9zB,UAAUs4B,MAAQ,SAAU6B,EAAUiU,EAAmBnP,GAC9D9E,EAAWA,GAAsB/wC,KAAK8rC,SACtC,IAAIob,GAAgBlnD,KAAKk1C,gBAAgBnE,EACrC/wC,MAAKuxC,kBAAoBvxC,KAAK2rC,yBAC9B3rC,KAAK2rC,wBAAyB,GAElC3rC,KAAKsnD,iBAAiBJ,EAAelC,EAAmBnP,IAE5DnL,EAAS9zB,UAAU0wC,iBAAmB,SAAUvW,EAAUiU,EAAmBnP,GAEzE,IAAK,GADDlF,GAAQ3wC,KAAKonD,SAASrW,GACjBnwC,EAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IAC9B,GAA4B,MAAxB+vC,EAAM/vC,GAAGwwC,YAA8C,MAAxBT,EAAM/vC,GAAGwwC,WACxC,GAAIpxC,KAAKg2C,cAAc8M,UAAY,EAC/B9iD,KAAK+kD,YAAY/kD,KAAKmzC,mBAAmBxC,EAAM/vC,GAAI,MAAOokD,OAEzD,CACD,GAAIrQ,OAAY,EACXkB,KACDlB,EAAY30C,KAAK6rC,SAAS7rC,KAAK8rC,UAAUz/B,QAAQskC,EAAM/vC,MAE3DZ,KAAKmhD,mBAAmB,KAAMxQ,EAAM/vC,GAAI+zC,EAAWkB,KAYnEnL,EAAS9zB,UAAUi4B,OAAS,SAAUkC,GAClCA,EAAWA,GAAsB/wC,KAAK8rC,SACtC,IAAIyb,GAAiBvnD,KAAKk1C,gBAAgBnE,EAC1C/wC,MAAKwnD,aAAaD,IAEtB7c,EAAS9zB,UAAU4wC,aAAe,SAAUzW,GACxC,GAAIJ,GAAQ3wC,KAAKonD,SAASrW,EAC1B,IAAI/wC,KAAKg2C,cAAc8M,UAAY,GAC/B,IAASliD,EAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IAC9B,GAA4B,MAAxB+vC,EAAM/vC,GAAGwwC,WAAoB,CAC7B,GAAI8B,GAAWlzC,KAAKmzC,mBAAmBxC,EAAM/vC,GAAI,KACjDsyC,GAASE,KAAKhC,WAAa,IAC3B8B,EAASE,KAAKpL,OAAShoC,KAAKmtC,eAAe,oBAC3CntC,KAAKikD,eAAe/Q,GACpBlzC,KAAKynD,sBAAsB9W,EAAM/vC,SAKzC,KAAK,GAAIA,GAAI,EAAGA,EAAI+vC,EAAM9vC,OAAQD,IACF,MAAxB+vC,EAAM/vC,GAAGwwC,aACTT,EAAM/vC,GAAGwwC,WAAa,IACtBT,EAAM/vC,GAAGonC,OAAShoC,KAAKmtC,eAAe,oBACtCntC,KAAKynD,sBAAsB9W,EAAM/vC,MAKjD8pC,EAAS9zB,UAAU6wC,sBAAwB,SAAU9W,GACjD,GAAIgE,GAAY30C,KAAK01C,aAAa/E,EAClC,KAAKjvC,oBAAkBizC,IAAcjzC,oBAAkB1B,KAAKitC,UAAW,CACnE,GAAIkI,GAAgBR,EAAUluC,cAAc,IAAMujC,GAClDoL,kBAAgBp+B,OAAQm+B,EAAeniC,MAAO,SAC9CqiC,cAAYF,KAGpBr+B,IACIirB,WAAUkZ,QAAS,GAAIhF,UAAW,IAAMxL,KACzCC,EAAS9zB,UAAW,oBAAiB,IACxCE,IACIqQ,YAAS,IACVujB,EAAS9zB,UAAW,uBAAoB,IAC3CE,IACIqQ,gBACDujB,EAAS9zB,UAAW,qBAAkB,IACzCE,IACIqQ,WAAS,KACVujB,EAAS9zB,UAAW,eAAY,IACnCE,IACIqQ,YAAS,IACVujB,EAAS9zB,UAAW,cAAW,IAClCE,IACIqQ,WAAS,OACVujB,EAAS9zB,UAAW,eAAY,IACnCE,IACIqQ,YAAS,IACVujB,EAAS9zB,UAAW,eAAY,IACnCE,IACIqQ,YAAS,IACVujB,EAAS9zB,UAAW,iBAAc,IACrCE,IACIirB,aAAYyI,KACbE,EAAS9zB,UAAW,cAAW,IAClCE,IACIqQ,WAAS,KACVujB,EAAS9zB,UAAW,wBAAqB,IAC5CE,IACIqQ,WAAS,IACVujB,EAAS9zB,UAAW,kBAAe,IACtCE,IACIqQ,WAAS,MACVujB,EAAS9zB,UAAW,kBAAe,IACtCE,IACIqQ,WAAS,OACVujB,EAAS9zB,UAAW,eAAY,IACnCE,IACIgrB,kBAAiByI,KAClBG,EAAS9zB,UAAW,YAAS,IAChCE,IACIqQ,YAAS,IACVujB,EAAS9zB,UAAW,mBAAgB,IACvCE,IACIqQ,YAAS,IACVujB,EAAS9zB,UAAW,sBAAmB,IAC1CE,IACIqQ,WAAS,YACVujB,EAAS9zB,UAAW,iBAAc,IACrCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,cAAW,IAClCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,qBAAkB,IACzCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,gBAAa,IACpCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,mBAAgB,IACvCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,wBAAqB,IAC5CE,IACIsQ,WACDsjB,EAAS9zB,UAAW,eAAY,IACnCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,gBAAa,IACpCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,cAAW,IAClCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,cAAW,IAClCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,eAAY,IACnCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,mBAAgB,IACvCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,eAAY,IACnCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,eAAY,IACnCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,aAAU,IACjCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,mBAAgB,IACvCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,mBAAgB,IACvCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,qBAAkB,IACzCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,gBAAa,IACpCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,cAAW,IAClCE,IACIsQ,WACDsjB,EAAS9zB,UAAW,eAAY,IACnC8zB,EAAW5zB,IACPuQ,yBACDqjB,IAELpjB,aCp4GErR,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB/E,OAAOkF,iBAChBC,uBAA2BC,QAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,MACpDL,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASM,KAAO1W,KAAK2W,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAajF,OAAO0F,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAYC,EAAQzN,EAAK0N,GAC7E,GAA2Hd,GAAvHe,EAAIC,UAAUtW,OAAQuW,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAO9F,OAAOkG,yBAAyBL,EAAQzN,GAAO0N,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQzN,EAAK0N,OACpH,KAAK,GAAIrW,GAAImW,EAAWlW,OAAS,EAAGD,GAAK,EAAGA,KAASuV,EAAIY,EAAWnW,MAAIwW,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQzN,EAAK6N,GAAKjB,EAAEa,EAAQzN,KAAS6N,EAChJ,OAAOF,GAAI,GAAKE,GAAKjG,OAAOqG,eAAeR,EAAQzN,EAAK6N,GAAIA,GAkB5DswC,GAAa,oBAKbC,GAAU,mBAEVC,GAAW,0BACXC,GAAY,eAEZC,GAAU,cAEVC,GAAe,mBACfC,GAAa,oBACbC,GAAU,iBACVC,GAAU,kBAIVC,GAAU,sBAGVC,GAAY,eACZC,GAAS,aAETC,GAAO,SACPC,IACAC,SAAU,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACzG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,YAcvGC,GAA6B,SAAU5wC,GAEvC,QAAS4wC,GAAY3wC,EAAS7X,GAC1B,MAAO4X,GAAO5W,KAAKjB,KAAM8X,EAAS7X,IAAYD,KAywDlD,MA3wDAiW,IAAUwyC,EAAa5wC,GAIvB4wC,EAAY7xC,UAAUsB,UAAY,WAC9B,GAAI/C,GAAMnV,KAAKC,OACfD,MAAKqD,YAAcgR,UAAQrU,KAAKC,QAAS,QACrCD,KAAKqD,aACLf,eAAaC,IAAIvC,KAAKqD,YAAa,QAASrD,KAAKygC,iBAAkBzgC,KAEvE,IAAIiZ,IAAeyvC,MAAO,QAASC,OAAQ,SAAUC,aAAc,cACnE5oD,MAAKoZ,KAAO,GAAIC,QAAK,cAAeJ,EAAYjZ,KAAKsZ,QACjDnE,EAAIpE,aAAa,aAAeoE,EAAIpE,aAAa,SACjDoE,EAAIhG,aAAa,OAAQgG,EAAI3E,KASrCi4C,EAAY7xC,UAAUyD,OAAS,WAC3Bra,KAAK6oD,cACD7oD,KAAK8oD,OACL9oD,KAAK+oD,eAGL/oD,KAAKgpD,iBAEJhpD,KAAKipD,eACNh9C,YAAUjM,KAAK8F,UAAU+F,eA5EnB,kBA8EV7L,KAAKkb,kBAETutC,EAAY7xC,UAAUiyC,YAAc,WAChC,GAAIn0C,GAAU1U,KAAKsO,cAAc,OAASgC,UAAW,KAAOtQ,KAAKknB,gBAAkB,YACnFlnB,MAAKC,QAAQuG,WAAWqI,aAAa6F,EAAS1U,KAAKC,SACnDyU,EAAQ5F,YAAY9O,KAAKC,SACzBF,aAAWC,KAAKC,SAAW+Y,SAAY,KAAM1Y,WAAc,UAC3DN,KAAK8F,UAAY9F,KAAKsO,cAAc,OAASgC,UA7FrC,gBA8FRtQ,KAAKkpD,aAAap6C,YAAY9O,KAAK8F,UACnC,IAAI1D,GAAQpC,KAAKoC,MAAQpC,KAAK0iB,WAAW1iB,KAAKoC,OAAOmK,cAAgB,WACjEvM,MAAKmpD,SAAyB,YAAdnpD,KAAKopD,MAAqC,KAAfppD,KAAKoC,QAChDA,EAAQ,GAEZ,IAAIinD,GAAcjnD,EAAM+4B,MAAM,EAAG,EAC7Bz5B,qBAAkB1B,KAAKspD,qBACvBtpD,KAAKspD,kBAAoBD,GAE7BrpD,KAAKC,QAAQmC,MAAQinD,EACjBrpD,KAAKipD,cACLjpD,KAAKwZ,eAAgBpX,MAASA,IAAS,GAGvCpC,KAAKwZ,eAAgBpX,MAASinD,IAAe,GAE7CrpD,KAAKyR,WACLiD,EAAQ3Q,UAAUxB,IAxFpB,SA0FEvC,KAAKsR,UACLrF,YAAUyI,GAAU1U,KAAKsR,SAAS3Q,MAAM,MAE5CX,KAAKupD,WAAaC,eAAaxpD,KAAK8F,WAAa2jD,SAAU,IAAMnB,KACjEtoD,KAAK0pD,cAAgBF,eAAaxpD,KAAK8F,WAAa2jD,SAAU,YAElEhB,EAAY7xC,UAAUsyC,WAAa,WAC/B,MAAOlpD,MAAKC,QAAQ4L,eAExB48C,EAAY7xC,UAAUmyC,aAAe,WACf,YAAd/oD,KAAKopD,MACLppD,KAAK2pD,gBACA3pD,KAAK8oD,QACN9oD,KAAK4pD,sBAIT5pD,KAAK6pD,eACA7pD,KAAK8oD,QACN9oD,KAAK8pD,iBAAiBz3C,SAG9BrS,KAAK+pD,OAAQ,EACb/pD,KAAKmO,cACLnO,KAAKgqD,gBACAhqD,KAAK0T,UACN1T,KAAKqC,aAELrC,KAAK8oD,QAAU9oD,KAAK0T,UACpB1T,KAAKiqD,gBAAe,GAEpBziD,UAAQia,UACRzhB,KAAKkqD,mBAGbzB,EAAY7xC,UAAUoyC,eAAiB,WACnC,GAAIzjD,GAAQvF,KACRmqD,EAAcnqD,KAAKsO,cAAc,UAAYgC,UAAW,uBAC5DtQ,MAAKkpD,aAAap6C,YAAYq7C,GAC9BnqD,KAAKoqD,SAAW,GAAIC,gBAChBC,QAAS,mBACTtzC,OAAQhX,KAAK8F,UACb4N,SAAU1T,KAAK0T,SACfjC,UAAWzR,KAAKyR,UAChBilB,KAAM12B,KAAKuqD,OAAOvzB,KAAKh3B,MACvB2zC,MAAO,WACHpuC,EAAMa,QAAQ,UACVw2B,cAAgB4tB,IAAKjlD,EAAMnD,MAAM+4B,MAAM,EAAG,GAAIsvB,KAAMllD,EAAMmlD,mBAAmBnlD,EAAMolD,SAASplD,EAAMnD,SAClGie,eAAiBmqC,IAAK,KAAMC,KAAM,MAAQroD,MAAOmD,EAAMnD,WAInEpC,KAAKoqD,SAAS97C,cAAgBtO,KAAKsO,cACnCtO,KAAKoqD,SAAS/yB,SAAS8yB,EACvB,IAAIS,GAAU5qD,KAAKsO,cAAc,QAAUgC,UA7IhC,mBA8IX6zB,UAAO,oBAAqBgmB,GAAar7C,YAAY87C,GACrDA,EAAQ33C,MAAM0uB,gBAAkB3hC,KAAK0qD,mBAAmB1qD,KAAK2qD,SAAS3qD,KAAKoC,OAC3E,IAAIyoD,GAAW7qD,KAAK8qD,aAKpB,IAJA7+C,YAAU4+C,GAAW,uBACjB7qD,KAAKsR,UACLrF,YAAU4+C,GAAW7qD,KAAKsR,SAAS3Q,MAAM,MAEzC6G,UAAQia,SAAU,CAClB,GAAIspC,GAAY/qD,KAAKgrD,cACrBD,GAAUE,SAAW94C,SAAS+4C,KAC9BH,EAAUv1C,UAAa21C,EAAG,SAAUC,EAAG,UACvCL,EAAUM,WAAa,YACvBN,EAAUO,WAAcH,EAAG,MAAOC,EAAG,OACrCL,EAAU51B,QAAU,EACpB01B,EAAS53C,MAAM6lB,OAASsE,mBAAiBp9B,KAAKoqD,SAASnqD,SAAS8d,WAEpE/d,KAAKurD,qBAET9C,EAAY7xC,UAAU2zC,OAAS,WAC3BvqD,KAAKoG,QAAQ,QAAUnG,QAASD,KAAK8F,aAEzC2iD,EAAY7xC,UAAUo0C,aAAe,WACjC,MAAOQ,eAAYxrD,KAAK8qD,cAAeW,UAE3ChD,EAAY7xC,UAAU20C,kBAAoB,WACtC,GAAIhmD,GAAQvF,IACZA,MAAKoqD,SAASrzB,WAAa,SAAUlqB,GACjC,GAAI6+C,GAAkB,GAAIC,WAsB1B,OArBApmD,GAAMa,QAAQ,aAAcyG,EAAM,SAAU++C,GACxC,IAAKA,EAAgB/c,OAAQ,CACzB,GAAIgc,GAAWtlD,EAAMulD,aACrBD,GAAS53C,MAAMmgB,IAAMlgB,aAAW,EAAI24C,aACpChB,EAAS53C,MAAMkgB,KAAOjgB,aAAW,EAAI44C,aACrCjB,EAAS53C,MAAMg2B,QAAU,QACzB1jC,EAAMwjD,eACN8B,EAAS53C,MAAMg2B,QAAU,GACrBzhC,UAAQia,WACRlc,EAAMwmD,MAAQxmD,EAAM+I,cAAc,OAClC/I,EAAMwmD,MAAMz7C,UAAY,KAAO/K,EAAM2hB,gBAAkB,WACvD3hB,EAAMwmD,MAAM94C,MAAMg2B,QAAU,OAC5B92B,SAAS+4C,KAAKr8C,aAAatJ,EAAMwmD,MAAOlB,GACxC14C,SAAS+4C,KAAK56C,WAAa,0BAC3B/K,EAAMwmD,MAAM94C,MAAMg2B,QAAU,QAC5B1jC,EAAMwmD,MAAM94C,MAAM6lB,QAAUpb,OAAOmtC,EAAS53C,MAAM6lB,QAAU,GAAG/a,YAGvElR,EAAKgiC,OAAS+c,EAAgB/c,OAC9B6c,EAAgBrS,QAAQuS,KAErBF,GAEX1rD,KAAKoqD,SAASlzB,YAAc,SAAUrqB,GAClC,GAAI6+C,GAAkB,GAAIC,WAC1B,IAAKjqD,oBAAkBmL,EAAK3I,OAcxBwnD,EAAgBrS,QAAQxsC,OAdQ,CAChC,GAAIm/C,IAAoB/rD,QAASsF,EAAMO,UAAW5B,MAAO2I,EAAK3I,MAAO2qC,QAAQ,EAC7EtpC,GAAMa,QAAQ,cAAe4lD,EAAiB,SAAUC,GAChDzkD,UAAQia,UAAY5U,EAAK3I,MAAM8S,SAAWzR,EAAMwmD,QAChDE,EAAkBpd,QAAS,GAE1Bod,EAAkBpd,QACnBtpC,EAAM2mD,eAEVr/C,EAAKgiC,OAASod,EAAkBpd,OAChC6c,EAAgBrS,QAAQ4S,KAMhC,MAAOP,KAGfjD,EAAY7xC,UAAUs1C,aAAe,WACjClsD,KAAKgzC,eACLhzC,KAAKmsD,mBACLnsD,KAAK8F,UAAUmN,MAAMD,MAAQ,GAC7BmxB,SAAO,mBAAoBnkC,KAAKoqD,SAASnqD,SAASgT,MAAM0uB,gBAClD3hC,KAAK0qD,mBAAmB1qD,KAAK2qD,SAAS3qD,KAAKoC,QACjDpC,KAAK8F,UAAU6M,UAAY,GAC3BhM,eAAa3G,KAAK8F,YAnON,iBADC,oBAqOT0B,UAAQia,UAAYzhB,KAAK+rD,QACzBplD,eAAawL,SAAS+4C,MAAO,0BAC7BlrD,KAAK+rD,MAAM94C,MAAMg2B,QAAU,OAC3BjpC,KAAK+rD,MAAMljB,UAAY,GACvB7oC,KAAK+rD,MAAQ,OAGrBtD,EAAY7xC,UAAU+yC,cAAgB,WAElC,GADA5lD,YAAU/D,KAAK8F,WA7OF,oBACD,mBA6OR9F,KAAKosD,aAAc,CACnB,GAAIC,GAAersD,KAAKsO,cAAc,OAASgC,UAAW,oBAC1DtQ,MAAKssD,cAAcD,EACnB,IAAIj7C,GAAOD,OAAOC,KAAKpR,KAAKosD,aAC5B,IAAoB,IAAhBh7C,EAAKvQ,OACLb,KAAKusD,cAAcvsD,KAAKosD,aAAah7C,EAAK,IAAKA,EAAK,GAAIi7C,OAGxD,KAAK,GAAIzrD,GAAI,EAAG4rD,EAAMp7C,EAAKvQ,OAAQD,EAAI4rD,EAAK5rD,IACxCZ,KAAKusD,cAAcvsD,KAAKosD,aAAah7C,EAAKxQ,IAAKwQ,EAAKxQ,GAAIyrD,EAG5DhoB,aAAU,SAAUgoB,GAAcxrD,OAAS,IAC3CoL,YAAUogD,GAAe,uBAI7BrsD,MAAKusD,cAAchE,GAAQC,QAAS,UAEtB,aAAdxoD,KAAKopD,OAAuBppD,KAAKysD,cAAgBzsD,KAAKmpD,SACtDnpD,KAAK0sD,YAET,IAAI15C,GAAQ0Q,SAASgM,iBAAiB1vB,KAAK8F,WAAW6mD,kBAAmB,GACzE3sD,MAAK8F,UAAUmN,MAAMD,MAAQE,aAAWlT,KAAK8F,UAAU8M,SAAS,GAAGwrB,YAAcprB,EAAQA,GACzFhT,KAAK4sD,IAAM5sD,KAAK2qD,SAAS3qD,KAAK0iB,WAAW1iB,KAAKoC,QAC9CpC,KAAK6sD,IAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,MAE9CnE,EAAY7xC,UAAUgzC,kBAAoB,WACjCzlB,SAAO,IAAMkkB,GAAQroD,KAAK8F,UAAU8M,SAAS,KAC9CyxB,YAAU,aAAgBrkC,KAAK8F,WAAW,GAAGuM,SAGrDo2C,EAAY7xC,UAAU21C,cAAgB,SAAUQ,EAAQxjD,EAAKyjD,GACzD,GAAIC,GAAUjtD,KAAKsO,cAAc,OAASgC,UAhRnC,YAgRwD0D,OAASgF,SAAY,MAChFg0C,GACAA,EAAOl+C,YAAYm+C,GAGnBjtD,KAAKssD,cAAcW,EAKvB,KAAK,GAHDC,GACAC,EACAC,EACKxsD,EAAI,EAAG4rD,EAAMO,EAAOlsD,OAAQD,EAAI4rD,EAAK5rD,IAChC,IAANA,GAAWA,EAAIZ,KAAKqtD,SAAY,IAChCH,EAAMltD,KAAKsO,cAAc,OACrBgC,UAAW,QAAS0D,OAAS9T,KAAQ,kBAEzC+sD,EAAQn+C,YAAYo+C,IAExBE,EAAeptD,KAAK0iB,WAAWqqC,EAAOnsD,IAAI2L,cAC1C4gD,EAAOntD,KAAKsO,cAAc,QACtBgC,UAAWg4C,GAAMt0C,OAAS9T,KAAQ,WAAYod,aAAc8vC,EAAcE,gBAAiB,WAE/FttD,KAAKoG,QAAQ,oBAAsBnG,QAASktD,EAAMI,WAAYhkD,EAAKnH,MAAO2qD,EAAOnsD,KACjFssD,EAAIp+C,YAAYq+C,GACZntD,KAAKoC,QAAUgrD,IACfptD,KAAKwtD,iBAAiBL,GACtBF,EAAQ56C,SAEZ86C,EAAKl6C,MAAM0uB,gBAAkB3hC,KAAK0qD,mBAAmB1qD,KAAK2qD,SAASyC,KAG3E3E,EAAY7xC,UAAU81C,WAAa,WAC/B,GAAIe,GAAaztD,KAAK8F,UAAUW,cAAc,UAAUmM,SAAS,EACjE66C,GAAW1pD,UAAUxB,IAAI0lD,IACpBjoD,KAAKoC,QACNqrD,EAAW1pD,UAAUxB,IAAI8lD,IACzBh0C,UAAQo5C,EAAY,cAAgBp7C,UAEvC,gBAAiB,cAAcqf,QAAQ,SAAU9U,GAAQ6wC,EAAW78C,gBAAgBgM,KACrF6wC,EAAWx6C,MAAM0uB,gBAAkB,IAEvC8mB,EAAY7xC,UAAU01C,cAAgB,SAAUn3C,EAAKu4C,OAC/B,KAAdA,IAAwBA,EAAY,EACxC,IAAIV,GAAShtD,KAAK8F,UAAU8M,SAAS86C,EACjCV,GACAhtD,KAAK8F,UAAU+I,aAAasG,EAAK63C,GAGjChtD,KAAK8F,UAAUgJ,YAAYqG,IAGnCszC,EAAY7xC,UAAU42C,iBAAmB,SAAUr4C,GAC/CA,EAAIpR,UAAUxB,IAAI8lD,IAClBlzC,EAAIhG,aAAa,gBAAiB,SAEtCs5C,EAAY7xC,UAAUizC,aAAe,WACjC9lD,YAAU/D,KAAK8F,WArUH,mBADC,mBAuUb,IAAI6nD,GAAe3tD,KAAKsO,cAAc,OAASgC,UA7UpC,mBA8UXtQ,MAAKssD,cAAcqB,GACnBA,EAAa7+C,YAAY9O,KAAKsO,cAAc,OAASgC,UAAWw3C,KAChE,IAAI8F,GAAc5tD,KAAKsO,cAAc,QAAUgC,UAxVzC,YAwV6D0D,OAASgF,SAAY,MACxF20C,GAAa7+C,YAAY8+C,GACzB5tD,KAAK4sD,IAAM5sD,KAAK2qD,SAAS3qD,KAAKoC,OAC9BpC,KAAK6sD,IAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KAC1C5sD,KAAK6tD,oBACL7tD,KAAK8tD,qBACL9tD,KAAK+tD,eACL/tD,KAAKguD,qBAETvF,EAAY7xC,UAAUi3C,kBAAoB,SAAUI,OACtC,KAANA,IAAgBA,EAAIjuD,KAAK6sD,IAAI,IACjC7sD,KAAKkuD,kBAAkBj7C,MAAM0uB,gBAAkB3hC,KAAK0qD,mBAAmB1qD,KAAKmuD,SAASF,EAAG,IAAK,IAAK,KAEtGxF,EAAY7xC,UAAUs3C,gBAAkB,WACpC,MAAO/pB,UAAO,mBAAoBnkC,KAAK8F,YAE3C2iD,EAAY7xC,UAAUk3C,mBAAqB,WACvC,GAAIF,GAAc5tD,KAAK8pD,iBACnBsE,EAAUjqB,SAAO,IAAM2jB,GAAS9nD,KAAK8F,UACrC9F,MAAKyR,UACLm8C,EAAY36C,MAAMkgB,KAAOjgB,aAAWk7C,EAAQhwB,YAAc3b,KAAK2W,IAAI,IAAMp5B,KAAK6sD,IAAI,IAAM,KAGxFe,EAAY36C,MAAMkgB,KAAOjgB,aAAWk7C,EAAQhwB,YAAcp+B,KAAK6sD,IAAI,GAAK,KAE5Ee,EAAY36C,MAAMmgB,IAAMlgB,aAAWk7C,EAAQ9vB,cAAgB,IAAMt+B,KAAK6sD,IAAI,IAAM,MAEpFpE,EAAY7xC,UAAUm3C,aAAe,WACjC,GAAIM,GAAuBruD,KAAKsO,cAAc,OAASgC,UAAW,oBAClEtQ,MAAKssD,cAAc+B,EAAsB,GACzCruD,KAAKsuD,cAAcD,EACnB,IAAIE,GAAgBvuD,KAAKsO,cAAc,OAASgC,UAAW,wBAC3D+9C,GAAqBx/C,aAAa0/C,EAAeF,EAAqBz7C,SAAS,GAC/E,IAAI47C,GAASxuD,KAAKsO,cAAc,OAASgC,UAAW,gBACpDi+C,GAAcz/C,YAAY0/C,GAC1BxuD,KAAKyuD,UAAY,GAAIvhC,KACjB9qB,MAAOpC,KAAK6sD,IAAI,GAChBpvC,IAAK,EACLE,IAAK,IACLlM,UAAWzR,KAAKyR,UAChBtO,SAAUnD,KAAK0T,SACfg7C,OAAQ1uD,KAAK2uD,UAAU33B,KAAKh3B,QAEhCA,KAAKyuD,UAAUngD,cAAgBtO,KAAKsO,cACpCtO,KAAKyuD,UAAUp3B,SAASm3B,GACpBxuD,KAAKipD,gBACLuF,EAASxuD,KAAKsO,cAAc,OAASgC,UAAW,qBAChDi+C,EAAcz/C,YAAY0/C,GAC1BxuD,KAAK4uD,oBAAoBJ,KAGjC/F,EAAY7xC,UAAUg4C,oBAAsB,SAAUJ,GAClDxuD,KAAK6uD,cAAgB,GAAI3hC,KACrB9qB,MAAqB,IAAdpC,KAAK4sD,IAAI,GAChBnvC,IAAK,EACLE,IAAK,IACLlM,UAAWzR,KAAKyR,UAChBtO,SAAUnD,KAAK0T,SACfg7C,OAAQ1uD,KAAK8uD,cAAc93B,KAAKh3B,QAEpCA,KAAK6uD,cAAcvgD,cAAgBtO,KAAKsO,cACxCtO,KAAK6uD,cAAcx3B,SAASm3B,EAC5B,IAAIO,GAAiB/uD,KAAKsO,cAAc,OAASgC,UAAW,yBAC5Dk+C,GAAO1/C,YAAYigD,GACnB/uD,KAAKgvD,yBAETvG,EAAY7xC,UAAUo4C,sBAAwB,WAC1C,GAAIC,GAAYjvD,KAAKyR,UAAY,UAAY,WACzCy9C,EAAa/qB,SAAO,yBAA0BnkC,KAAK6uD,cAAc5uD,QACjEivD,KACAA,EAAWj8C,MAAMk8C,WACb,mBAAqBF,EAAY,UAAYjvD,KAAK4sD,IAAIzxB,MAAM,EAAG,GAAK,YAChEn7B,KAAK0qD,mBAAmB1qD,KAAK4sD,IAAIzxB,MAAM,EAAG,IAAM,WAGhEstB,EAAY7xC,UAAU+3C,UAAY,SAAU9hD,GACxC7M,KAAK6sD,IAAI,GAAKhgD,EAAKzK,MACnBpC,KAAK6tD,oBACL7tD,KAAKovD,wBAET3G,EAAY7xC,UAAUk4C,cAAgB,SAAUjiD,GAC5C,GAAIzK,GAAQyK,EAAKzK,MACbitD,EAASrvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAK6sD,IAAI,GAAKzqD,EAAQ,IACtBpC,KAAK4sD,IAAI,GAAKxqD,EAAQ,GACtB,IAAImtD,GAASvvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAKwvD,mBAAmBptD,EACxB,IAAIwqD,GAAM5sD,KAAK0qD,mBAAmB1qD,KAAK4sD,IACvC5sD,MAAKyvD,cAAc7C,GACnB5sD,KAAKi6B,aAAas1B,EAAQF,EAAQzC,IAEtCnE,EAAY7xC,UAAU44C,mBAAqB,SAAUptD,GACjD,GAAIpC,KAAKipD,gBAAkBjpD,KAAKkpD,aAAanlD,UAAUC,SAAS6jD,IAAY,CACxE,GAAI6H,GAAqBlE,cAAYrnB,SAAO,IAAM+jB,GAASloD,KAAK8F,WAAY8R,EAC5E83C,GAAmBttD,MAAQA,EAC3BstD,EAAmBC,aAG3BlH,EAAY7xC,UAAU03C,cAAgB,SAAUl5C,GAC5C,GAAIw6C,GAAmB5vD,KAAKsO,cAAc,OAASgC,UAAW63C,IAC9D/yC,GAAUtG,YAAY8gD,EACtB,IAAIhF,GAAU5qD,KAAKsO,cAAc,QAAUgC,UAAW,uBACtDs/C,GAAiB9gD,YAAY87C,EAC7B,IAAIiF,GAAa7vD,KAAK0qD,mBAAmB1qD,KAAK4sD,IAC9ChC,GAAQ33C,MAAM0uB,gBAAkBkuB,EAChCjF,EAAU5qD,KAAKsO,cAAc,QAAUgC,UAAW,yBAClDs/C,EAAiB9gD,YAAY87C,GAC7BA,EAAQ33C,MAAM0uB,gBAAkBkuB,GAEpCpH,EAAY7xC,UAAUk5C,SAAW,WAC7B,OAAQ9vD,KAAK8F,UAAU/B,UAAUC,SAxbpB,oBA0bjBykD,EAAY7xC,UAAUk0C,YAAc,WAChC,MAAO9qD,MAAK8F,UAAU+F,eAE1B48C,EAAY7xC,UAAUm5C,mBAAqB,SAAU9vD,EAASmC,EAAOyN,EAAO8N,GACxE,GAAIpY,GAAQvF,KACRgwD,EAAe,GAAIp4C,IACnBxV,MAAOA,EACP6D,YAAa4J,EACb4N,IAAK,EACLE,IAAKA,EACLjC,OAAQ,SACRnB,gBAAgB,EAChBvU,eAAgB,SAChByL,UAAWzR,KAAKyR,UAChBtO,SAAUnD,KAAK0T,SACf9M,UAAU5G,KAAK8vD,WACfpB,OAAQ,SAAU7hD,GACVA,EAAK3I,OACLqB,EAAMia,aAAa3S,EAAK3I,SAIpC8rD,GAAa1hD,cAAgBtO,KAAKsO,cAClC0hD,EAAa34B,SAASp3B,IAE1BwoD,EAAY7xC,UAAUzI,YAAc,WAChC,GAAI2hD,GAAW9vD,KAAK8vD,WAChBp7C,EAAU1U,KAAKkpD,YACnB,IAAK4G,IAAap7C,EAAQ3Q,UAAUC,SAAS6jD,MAAiBiI,GAAYp7C,EAAQ3Q,UAAUC,SAASokD,IAAa,CAC9G,GAAIv3C,GAAY7Q,KAAKsO,cAAc,OAASgC,UAAWy3C,IACnD+H,GACA9vD,KAAKssD,cAAcz7C,EAAW,GAG9B7Q,KAAKssD,cAAcz7C,EAAW,EAElC,IAAI/K,GAAY9F,KAAKsO,cAAc,OAASgC,UAAW,qBAKvD,IAJAO,EAAU/B,YAAYhJ,GACjB4O,EAAQ3Q,UAAUC,SAxeb,yBAyeNhE,KAAKiwD,qBAAqBp/C,IAEzB6D,EAAQ3Q,UAAUC,SAAS2jD,IAAU,CACtC,GAAIuI,GAAWlwD,KAAKsO,cAAc,SAC9BgC,UAlfV,QAmfU0D,OAASm8C,UAAa,IAAK7vD,WAAc,UAE7CwF,GAAUgJ,YAAYohD,GACtBxjD,QAAMyB,aACFlO,QAASiwD,EACTlqD,eAAgB,SAChBiJ,YACIhJ,YAAa,MACbwL,UAAWzR,KAAKyR,UAChBtO,SAAUnD,KAAK0T,SACf9M,UAAU5G,KAAK8vD,aAEpB9vD,KAAKsO,eACR5B,QAAMC,SAAS3M,KAAKoC,MAAM+4B,MAAM,EAAG,GAAI+0B,GACvCA,EAAS1gD,iBAAiB,QAASxP,KAAKwf,aAAawX,KAAKh3B,OAE9D,IAAK0U,EAAQ3Q,UAAUC,SAAS4jD,IAAW,CACvC,GAAI/3C,OAAQ,GACRzN,MAAQ,EACRpC,MAAK+pD,OACLl6C,EAAQ,MACRzN,EAAQpC,KAAK4sD,MAGb/8C,EAAQ,MACRzN,EAAQpC,KAAK6sD,IAGjB,KAAK,GADDuD,IAAW,KAAM,KAAM,MAClBxvD,EAAI,EAAGA,EAAI,EAAGA,IACnBZ,KAAK+vD,mBAAmBjqD,EAAUgJ,YAAY9O,KAAKsO,cAAc,SAAWgC,UAAW,KAAO8/C,EAAQxvD,GAAK,YAAcwB,EAAMxB,GAAIiP,EAAMjP,GAAI,IAE7IZ,MAAKipD,eACLjpD,KAAKqwD,mBAAmBvqD,MAKxC2iD,EAAY7xC,UAAUy5C,mBAAqB,SAAUvqD,GACjD9F,KAAK+vD,mBAAmBjqD,EAAUgJ,YAAY9O,KAAKsO,cAAc,SAAWgC,UAAW43C,MAA2B,IAAdloD,KAAK4sD,IAAI,GAAU,IAAK,MAEhInE,EAAY7xC,UAAUq5C,qBAAuB,SAAUK,GACnD,GAAIC,GAAiBvwD,KAAKsO,cAAc,UACpCgC,UAAW,4DAEfggD,GAAUxhD,YAAYyhD,GAClBvwD,KAAK8vD,aAAe9vD,KAAKkpD,aAAanlD,UAAUC,SAAS4jD,KACzD2I,EAAe/gD,iBAAiB,QAASxP,KAAKwwD,oBAAoBx5B,KAAKh3B,QAG/EyoD,EAAY7xC,UAAUozC,cAAgB,WAClC,GAAIhqD,KAAKysD,cAAgBzsD,KAAKmwB,YAAa,CACvCnwB,KAAKoZ,KAAK4N,UAAUhnB,KAAKsZ,OACzB,IAAIm3C,GAAazwD,KAAKsO,cAAc,OAASgC,UAAWo3C,IAExD,IADA1nD,KAAK8F,UAAUgJ,YAAY2hD,GACvBzwD,KAAKmwB,YAAa,CAClB,GAAIugC,GAAoB1wD,KAAKsO,cAAc,OAASgC,UA/iBtD,cAgjBEmgD,GAAW3hD,YAAY4hD,EACvB,IAAIvnC,GAAQnpB,KAAKoZ,KAAKG,YAAY,QAClCm3C,GAAkB5hD,YAAY9O,KAAKsO,cAAc,UAC7CqE,UAAWwW,EACX7Y,UAAW,+CACX0D,OAASqJ,MAAS8L,KAEtB,IAAI0lB,GAAS7uC,KAAKoZ,KAAKG,YAAY,SACnCm3C,GAAkB5hD,YAAY9O,KAAKsO,cAAc,UAC7CqE,UAAWk8B,EACXv+B,UAAW,sCACX0D,OAASqJ,MAASwxB,MAGtB7uC,KAAKysD,cACLzsD,KAAK2wD,wBAIjBlI,EAAY7xC,UAAU+5C,oBAAsB,WACxC,GAAIlE,GAAezsD,KAAKsO,cAAc,UAClCgC,UAAW,mCAAqC03C,GAAYh0C,OAASqJ,MAAOrd,KAAKoZ,KAAKG,YAAY,kBAEtG4qB,UAAO,IAAMujB,GAAY1nD,KAAK8F,WAAW+I,aAAa49C,EAActoB,SAAO,cAAenkC,KAAK8F,aAEnG2iD,EAAY7xC,UAAUo3C,kBAAoB,WACtC,GAAIzoD,GAAQvF,KACRquB,EAAU,GAAIiI,YACdQ,QAAS,SACTP,gBAAgB,EAChBjlB,SAAU,yBACVylB,WAAY,SAAUlqB,GAClBtH,EAAMqrD,WAAa/jD,EAAK5M,SAE5Bw2B,WAAaC,MAAQC,OAAQ,QAAUC,OAASD,OAAQ,UAE5DtI,GAAQ/f,cAAgBtO,KAAKsO,cAC7B+f,EAAQgJ,SAASr3B,KAAK8F,WACtBuoB,EAAQqI,KAAK12B,KAAK8F,WAClB9F,KAAK4wD,WAAW39C,MAAM6lB,OAASsE,mBAAiBp9B,KAAK4wD,YAAY7yC,WACjEomB,SAAO,iBAAkBnkC,KAAK4wD,YAAY9hD,YAAY9O,KAAKsO,cAAc,OAASgC,UAAW,wBAEjGm4C,EAAY7xC,UAAUi6C,eAAiB,WACnC,MAAOrF,eAAYxrD,KAAK8F,UAAWwwB,YAEvCmyB,EAAY7xC,UAAUk6C,iBAAmB,SAAU1uD,GAC/CpC,KAAK6wD,iBAAiB17B,QAAU/yB,GAEpCqmD,EAAY7xC,UAAUqzC,eAAiB,SAAU8G,GACzCA,EACA/wD,KAAKkpD,aAAanlD,UAAUxB,IAhmBzB,cAmmBHvC,KAAKkpD,aAAanlD,UAAUP,OAnmBzB,cAqmBHxD,KAAKmwB,gBACDgL,MAAMl6B,KAAKojC,YAAU,SAAUrkC,KAAK8F,YAAa4rB,QAAQ,SAAUvc,GAC/D47C,EACAhxD,aAAWoV,GAAOzB,SAAY,KAG9ByB,EAAIvE,gBAAgB,eAKpC63C,EAAY7xC,UAAU8zC,mBAAqB,SAAUkC,GACjD,MAAOA,GAAI/rD,OAAwB,IAAf+rD,EAAI/rD,OAAe,QAAU+rD,EAAIjO,OAAS,IAAM,OAASiO,EAAIjO,OAAS,IAAM,IAEpG8J,EAAY7xC,UAAUo6C,mBAAqB,SAAUnE,GACjD,MAAsB,KAAfA,EAAIhsD,OAAe,QAAUgsD,EAAIlO,OAAS,IAAM,OAASkO,EAAIlO,OAAS,KAEjF8J,EAAY7xC,UAAUq6C,UAAY,WAC9BjxD,KAAK6sD,IAAI,GAAK7sD,KAAK6sD,IAAI,GAAK,IAAM,IAAM7sD,KAAK6sD,IAAI,GACjD7sD,KAAK6sD,IAAI,GAAK7sD,KAAK6sD,IAAI,GAAK,IAAM,IAAM7sD,KAAK6sD,IAAI,GACjD7sD,KAAK8tD,sBAETrF,EAAY7xC,UAAUw4C,qBAAuB,SAAU8B,OACrC,KAAVA,IAAoBA,GAAQ,EAChC,IAAI7B,GAASrvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAK4sD,IAAM5sD,KAAKmuD,SAAShlC,MAAMnpB,KAAMA,KAAK6sD,IAC1C,IAAI0C,GAASvvD,KAAKsvD,SAAStvD,KAAK4sD,KAC5BnC,EAAOzqD,KAAK0qD,mBAAmB1qD,KAAK4sD,IACxC5sD,MAAKyvD,cAAchF,GACnBzqD,KAAKmxD,YAAY5B,GACjBvvD,KAAKi6B,aAAas1B,EAAQF,EAAQ5E,EAAMyG,IAE5CzI,EAAY7xC,UAAUu6C,YAAc,SAAU/uD,GAC1C,GAAIsS,GAAU1U,KAAKkpD,YACdx0C,GAAQ3Q,UAAUC,SAAS6jD,MACvBnzC,EAAQ3Q,UAAUC,SAAS2jD,KAC5Bj7C,QAAMC,SAASvK,EAAMgvD,OAAO,EAAG,GAAIjtB,SAAO,SAAWnkC,KAAK8F,YAEzD4O,EAAQ3Q,UAAUC,SAAS4jD,MACxB5nD,KAAK+pD,MACL/pD,KAAKkf,YAAYlf,KAAK4sD,KAAK,GAG3B5sD,KAAKkf,YAAYlf,KAAK6sD,KAAK,MAK3CpE,EAAY7xC,UAAU64C,cAAgB,SAAUrtD,GACxCpC,KAAKipD,eACLjpD,KAAKgvD,wBAET7qB,SAAO,qBAAsBnkC,KAAK4wD,YAAY39C,MAAM0uB,gBAAkBv/B,EACtE+hC,SAAO,IAAMgkB,GAAU,cAAgBnoD,KAAK8F,WAAWmN,MAAM0uB,gBAAkBv/B,EAC/E+hC,SAAO,IAAMgkB,GAAU,eAAiBnoD,KAAK8F,WAAWmN,MAAM0uB,gBACxD3hC,KAAK0qD,mBAAmB1qD,KAAK2qD,SAAS3qD,KAAKoC,SAErDqmD,EAAY7xC,UAAUkzC,eAAiB,WACnC,MAAO3lB,UAAO,aAAenkC,KAAK8F,YAEtC2iD,EAAY7xC,UAAUy6C,oBAAsB,cACnBl2B,MAAMl6B,KAAKojC,YAAU,IAAMgkB,GAAQroD,KAAK8F,UAAU8M,SAAS,KACpE8e,QAAQ,SAAUvc,GAC1BA,EAAIpR,UAAUP,OAAO6kD,IACrBlzC,EAAIhG,aAAa,gBAAiB,YAG1Cs5C,EAAY7xC,UAAU06C,wBAA0B,SAAUlvD,GACtD,MAAQA,GAAM+4B,MAAM/4B,EAAMiK,QAAQ,KAAO,EAAGjK,EAAMiK,QAAQ,MAAO1L,MAAM,KAAK68B,IAAI,SAAU+zB,EAAG3wD,GACzF,MAAc,KAANA,EAAW8iB,SAAS6tC,EAAG,IAAMlwC,WAAWkwC,MAWxD9I,EAAY7xC,UAAU4B,SAAW,SAAUpW,EAAOsG,GAK9C,GAJKtG,IACDA,EAAQpC,KAAKoC,OAEjBsG,EAAQA,EAAeA,EAAK6D,cAAb,MACE,MAAbnK,EAAM,GAAY,CACdmtD,EAASvvD,KAAKsxD,wBAAwBlvD,EAC1C,IAAa,QAATsG,GAA2B,SAATA,EAAiB,CAC/B8hD,EAAMxqD,KAAKsvD,SAASC,EACxB,OAAgB,QAAT7mD,EAAiB8hD,EAAIrvB,MAAM,EAAG,GAAKqvB,EAG1C,MAAa,QAAT9hD,EACO1I,KAAKgxD,mBAAmBhxD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMuvD,EAAOp0B,MAAM,EAAG,KAG5D,SAATzyB,EACO1I,KAAKgxD,mBAAmBhxD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMuvD,IAGlD,OAMnB,GAAiB,MAAbntD,EAAM,GAAY,CAClB,GAAImtD,GAASvvD,KAAKmuD,SAAShlC,MAAMnpB,KAAMA,KAAKsxD,wBAAwBlvD,GACpE,IAAa,SAATsG,EACA,MAAO1I,MAAK0qD,mBAAmB6E,EAG/B,IAAa,QAAT7mD,GAA2B,SAATA,EAAiB,CACnC,GAAI8hD,GAAMxqD,KAAKsvD,SAASC,EACxB,OAAgB,QAAT7mD,EAAiB8hD,EAAIrvB,MAAM,EAAG,GAAKqvB,EAG1C,MAAa,QAAT9hD,EACO1I,KAAK0qD,mBAAmB6E,EAAOp0B,MAAM,EAAG,IAGxC,OAMnB/4B,EAAQpC,KAAK0iB,WAAWtgB,EACxB,IAAIwqD,GAAM5sD,KAAK2qD,SAASvoD,EAIxB,OAHa,QAATsG,GAA2B,QAATA,IAClBkkD,EAAMA,EAAIzxB,MAAM,EAAG,IAEV,SAATzyB,GAA4B,QAATA,EACZ1I,KAAK0qD,mBAAmBkC,GAGlB,SAATlkD,GAA4B,QAATA,EACZ1I,KAAKgxD,mBAAmBhxD,KAAK8sD,SAAS3jC,MAAMnpB,KAAM4sD,IAG5C,QAATlkD,EACOtG,EAAM+4B,MAAM,EAAG,GAGT,MAATzyB,EACOkkD,EAAI,GAAG7uC,WAGP,QAcnC0qC,EAAY7xC,UAAU46C,OAAS,WACvBxxD,KAAK8F,UAAU+F,cAAc9H,UAAUC,SAAS,iBAChDhE,KAAKoqD,SAASoH,SAGdxxD,KAAKyxD,WAAW,OASxBhJ,EAAY7xC,UAAUsQ,cAAgB,WAClC,MAAO,eAOXuhC,EAAY7xC,UAAU4P,eAAiB,WACnC,MAAOxmB,MAAK0mB,cAAc,WAE9B+hC,EAAY7xC,UAAUvU,WAAa,WAC/B,GAAIrC,KAAK8vD,WAAY,CACjB,GAAIlC,GAAc5tD,KAAK8pD,gBACvBxnD,gBAAaC,IAAIqrD,EAAa,UAAW5tD,KAAK0xD,cAAe1xD,MAC7DsC,eAAaC,IAAIvC,KAAKkuD,kBAAmB,uBAAwBluD,KAAK2xD,YAAa3xD,OAC/EA,KAAKysD,cAAgBzsD,KAAKmwB,cAC1BnwB,KAAK4xD,qBAETtvD,eAAaC,IAAI4hC,SAAO,cAAgBnkC,KAAK8F,WAAY,QAAS9F,KAAK6xD,eAAgB7xD,UAGvFsC,gBAAaC,IAAIvC,KAAK8F,UAAW,QAAS9F,KAAK8xD,oBAAqB9xD,MACpEsC,eAAaC,IAAIvC,KAAK8F,UAAW,UAAW9F,KAAK+xD,eAAgB/xD,OAGzEyoD,EAAY7xC,UAAU6pB,iBAAmB,WACrCzgC,KAAKoC,MAAQpC,KAAKspD,kBAClBvpD,aAAWC,KAAKC,SAAWmC,MAASpC,KAAKspD,qBAE7Cb,EAAY7xC,UAAUg7C,mBAAqB,WACvC,GAAII,GAAgB7tB,SAAO,IAAMujB,GAAY1nD,KAAK8F,UAC9CksD,IACA1vD,eAAaC,IAAIyvD,EAAe,QAAShyD,KAAKiyD,gBAAiBjyD,OAGvEyoD,EAAY7xC,UAAU86C,cAAgB,SAAU7tD,GAC5C,OAAQA,EAAE8D,SACN,IAAK,IACD3H,KAAKkyD,oBAAoB,EAAGlyD,KAAKyR,WAAa,EAAI,EAAG5N,EACrD,MACJ,KAAK,IACD7D,KAAKkyD,oBAAoB,EAAGlyD,KAAKyR,UAAY,GAAK,EAAG5N,EACrD,MACJ,KAAK,IACD7D,KAAKkyD,oBAAoB,EAAG,EAAGruD,EAC/B,MACJ,KAAK,IACD7D,KAAKkyD,oBAAoB,GAAI,EAAGruD,EAChC,MACJ,KAAK,IACDA,EAAEC,gBACF,IAAIyrD,GAASvvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAKmyD,gBAAgB5C,EAAQ1rD,KAIzC4kD,EAAY7xC,UAAUu7C,gBAAkB,SAAU/vD,EAAOyB,GACrD7D,KAAKoyD,mBAAmBhwD,GACnBpC,KAAK8oD,SACN9oD,KAAKyxD,WAAW5tD,GAChB7D,KAAKoqD,SAASnqD,QAAQoS,UAG9Bo2C,EAAY7xC,UAAU66C,WAAa,SAAU5tD,GACzC,GAAI0B,GAAQvF,KACRgsD,GAAoB/rD,QAASD,KAAK8F,UAAW5B,MAAOL,EAAGgrC,QAAQ,EACnE7uC,MAAKoG,QAAQ,cAAe4lD,EAAiB,SAAUqG,GAC9CA,EAAkBxjB,SACnBtpC,EAAM6kD,SAASoH,SACfjsD,EAAM2mD,mBAIlBzD,EAAY7xC,UAAUw7C,mBAAqB,SAAUhwD,GACjD,GAAIooD,GAAMpoD,EAAM+4B,MAAM,EAAG,EACzBn7B,MAAKoG,QAAQ,UACTw2B,cAAgB4tB,IAAKA,EAAKC,KAAMzqD,KAAK0qD,mBAAmB1qD,KAAK4sD,MAC7DvsC,eAAiBmqC,IAAKxqD,KAAKoC,MAAM+4B,MAAM,EAAG,GAAIsvB,KAAMzqD,KAAK0qD,mBAAmB1qD,KAAK2qD,SAAS3qD,KAAKoC,SAC/FA,MAAOpC,KAAKipD,cAAgB7mD,EAAQooD,IAEpCxqD,KAAKipD,cACLjpD,KAAKwZ,eAAgBpX,MAASA,IAAS,GAGvCpC,KAAKwZ,eAAgBpX,MAASooD,IAAO,GAEzCxqD,KAAKC,QAAQmC,MAAQooD,GAAY,WAErC/B,EAAY7xC,UAAUs7C,oBAAsB,SAAUI,EAAMlwD,EAAOyB,GAC/DA,EAAEC,iBACF9D,KAAK6sD,IAAIyF,IAASlwD,GAASyB,EAAE6D,QAAU,EAAI,GACvC1H,KAAK6sD,IAAIyF,GAAQ,IACjBtyD,KAAK6sD,IAAIyF,GAAQ,GAErBtyD,KAAKixD,YACLjxD,KAAKovD,sBAAqB,IAE9B3G,EAAY7xC,UAAU+6C,YAAc,SAAU9tD,GAC1CA,EAAEC,iBACa,cAAXD,EAAE6E,MACF1I,KAAK4lB,QAAUnD,KAAK2W,IAAIv1B,EAAE6hB,MAAQomC,aAClC9rD,KAAK6lB,QAAUpD,KAAK2W,IAAIv1B,EAAE8hB,MAAQkmC,aAClC7rD,KAAK8wD,iBAAiB,KAGtB9wD,KAAK4lB,QAAUnD,KAAK2W,IAAIv1B,EAAEi7B,eAAe,GAAGpZ,MAAQomC,aACpD9rD,KAAK6lB,QAAUpD,KAAK2W,IAAIv1B,EAAEi7B,eAAe,GAAGnZ,MAAQkmC,aACpD7rD,KAAK8wD,kBAAkB,IAE3B9wD,KAAKuyD,OAAOvyD,KAAK4lB,QAAS5lB,KAAK6lB,SAC/B7lB,KAAK8pD,iBAAiB72C,MAAMoa,WAAa,gFACzCrtB,KAAKixD,YACLjxD,KAAKovD,uBACLpvD,KAAK8pD,iBAAiBz3C,QACtB/P,eAAaC,IAAI4P,SAAU,sBAAuBnS,KAAKwyD,YAAaxyD,MACpEsC,eAAaC,IAAI4P,SAAU,mBAAoBnS,KAAKyyD,WAAYzyD,OAEpEyoD,EAAY7xC,UAAU47C,YAAc,SAAU3uD,GAC3B,cAAXA,EAAE6E,MACF7E,EAAEC,gBAEN,IAAIo6B,GACAxE,CACW,eAAX71B,EAAE6E,MACFw1B,EAAIzb,KAAK2W,IAAIv1B,EAAE6hB,MAAQomC,aACvBpyB,EAAIjX,KAAK2W,IAAIv1B,EAAE8hB,MAAQkmC,eAGvB3tB,EAAIzb,KAAK2W,IAAIv1B,EAAEi7B,eAAe,GAAGpZ,MAAQomC,aACzCpyB,EAAIjX,KAAK2W,IAAIv1B,EAAEi7B,eAAe,GAAGnZ,MAAQkmC,cAE7C7rD,KAAKuyD,OAAOr0B,EAAGxE,EACf,IAAIk0B,GAAc5tD,KAAK8pD,gBACvB9pD,MAAKixD,YACLjxD,KAAKovD,uBACLpvD,KAAK6wD,iBAAiB1hC,QAAQy+B,GACzB5tD,KAAK4wD,WAAW39C,MAAMshB,YACnB9R,KAAK2W,IAAIp5B,KAAK4lB,QAAUsY,GAAK,GAAKzb,KAAK2W,IAAIp5B,KAAK6lB,QAAU6T,GAAK,KAC/DyK,SAAO,IAAM2jB,GAAS9nD,KAAK8F,WAAWmN,MAAM8iB,OAAS,UACrD63B,EAAY36C,MAAMoa,WAAa,OAC1BrtB,KAAK8oD,SACN9oD,KAAK4wD,WAAW39C,MAAM6lB,QAAUpV,SAAS1jB,KAAK8qD,cAAc73C,MAAM6lB,OAAQ,IAAM,GAAG/a,YAEvF/d,KAAK4wD,WAAW39C,MAAMshB,UAAY,gBAClCq5B,EAAY7pD,UAAUxB,IAAI,oBAItCkmD,EAAY7xC,UAAU27C,OAAS,SAAU3sC,EAASC,GAC9C,GAAI1Q,GAAMgvB,SAAO,IAAM2jB,GAAS9nD,KAAK8F,WACjC0P,EAAWL,EAAI4lB,uBAEfnV,GADA5lB,KAAKyR,UACKmU,EAAUpQ,EAAS0d,MAAQ,EAAIzQ,KAAK2W,IAAIxT,EAAUpQ,EAAS0d,OAG3DtN,EAAUpQ,EAAS2d,KAAO1Q,KAAK2W,IAAIxT,EAAUpQ,EAAS2d,MAAQ,EAE5EtN,EAAUA,EAAUrQ,EAAS4d,IAAM3Q,KAAK2W,IAAIvT,EAAUrQ,EAAS4d,KAAO,EACtEpzB,KAAK6sD,IAAI,GAAKpqC,KAAKK,MAC2E,GADrEpF,OAAO,KAAOvI,EAAImpB,aACvC7b,KAAK9E,IAAI,EAAG8E,KAAKhF,IAAItI,EAAImpB,aAAezY,EAAU1Q,EAAIu9C,aAAgBv9C,EAAImpB,eAAsB,GACpGt+B,KAAK6sD,IAAI,GACLpqC,KAAKK,MAA6G,GAAvGpF,OAAO,IAAO+E,KAAK9E,IAAI,EAAG8E,KAAKhF,IAAItI,EAAIipB,YAAcxY,EAAUzQ,EAAIw9C,aAAiBx9C,EAAIipB,cAAqB,IAEhIqqB,EAAY7xC,UAAU67C,WAAa,SAAU5uD,GAC1B,aAAXA,EAAE6E,MACF7E,EAAEC,iBAENxB,eAAakB,OAAO2O,SAAU,sBAAuBnS,KAAKwyD,aAC1DlwD,eAAakB,OAAO2O,SAAU,mBAAoBnS,KAAKyyD,WACvD,IAAI7E,GAAc5tD,KAAK8pD,gBACvB3lB,UAAO,IAAM2jB,GAAS9nD,KAAK8F,WAAWmN,MAAM8iB,OAAS,GACjD/1B,KAAK4wD,WAAW39C,MAAMshB,YACtBv0B,KAAK4wD,WAAW39C,MAAMshB,UAAY,GAClCq5B,EAAY7pD,UAAUP,OAAO,mBAE5BxD,KAAK8oD,QAAW9oD,KAAKmwB,aACtBnwB,KAAKyxD,WAAW5tD,IAGxB4kD,EAAY7xC,UAAUq7C,gBAAkB,SAAUpuD,GAC9C,GAAImT,GAASnT,EAAEmT,MACX3C,WAAQ2C,EAAQ,IAAMgxC,KACtBnkD,EAAEsc,kBACFngB,KAAK4yD,oBAGD57C,EAAOjT,UAAUC,SAt9BrB,YAs9BwCgT,EAAOjT,UAAUC,SAr9BxD,cAs9BGhE,KAAK6yD,aAAa77C,EAAQnT,IAItC4kD,EAAY7xC,UAAUg8C,gBAAkB,WACpC5yD,KAAKoG,QAAQ,oBAAsBnG,QAASD,KAAK8F,UAAWsjD,KAAM,YAClEppD,KAAKgzC,eACLhzC,KAAKmsD,mBACLh4C,SAAOgwB,SAAO,oBAAqBnkC,KAAK8F,YACnC9F,KAAKkpD,aAAanlD,UAAUC,SAAS6jD,KACtCrkD,SAAO2gC,SAAO,IAAM4jB,GAAc/nD,KAAK8F,YAE3CqO,SAAOnU,KAAKkuD,mBACZluD,KAAK2pD,gBACL3pD,KAAK4pD,oBACL5pD,KAAKmO,cACLnO,KAAKkqD,kBACLlqD,KAAKqC,aACLrC,KAAKoG,QAAQ,gBAAkBnG,QAASD,KAAK8F,UAAWsjD,KAAM,aAElEX,EAAY7xC,UAAUszC,gBAAkB,WACpC,IAAKlqD,KAAK8oD,OAAQ,CACd,GAAI+B,GAAW7qD,KAAK8qD,aACpBD,GAAS53C,MAAMkgB,KAAOjgB,aAAW,EAAI44C,aACrCjB,EAAS53C,MAAMmgB,IAAMlgB,aAAW,EAAI24C,aACpC7rD,KAAKgrD,eAAe8H,gBAAgB9yD,KAAKoqD,SAASnqD,QAAQ4L,iBAGlE48C,EAAY7xC,UAAU45C,oBAAsB,WACpCxwD,KAAK+pD,OACL/pD,KAAKkf,YAAYlf,KAAK6sD,KAAK,EAAM,GAAI,IAAK,IAAK,MAC/C7sD,KAAK+pD,OAAQ,IAGb/pD,KAAKkf,YAAYlf,KAAK4sD,KAAK,EAAM,GACjC5sD,KAAK+pD,OAAQ,IAGrBtB,EAAY7xC,UAAUsI,YAAc,SAAU9c,EAAOsZ,EAAQhQ,EAAKiS,GAG9D,IAAK,GADDo1C,GADA3C,GAAW,aAAc,aAAc,cAElCxvD,EAAI,EAAG4rD,EAAM4D,EAAQvvD,OAAQD,EAAI4rD,EAAK5rD,KAC3CmyD,EAAOvH,cAAYrnB,SAAO,IAAMisB,EAAQxvD,GAAIZ,KAAK8F,WAAY8R,IACxDxV,MAAQqgB,KAAKK,MAAM1gB,EAAMxB,IAC1B8a,IACAq3C,EAAK9sD,YAAcmqD,EAAQxvD,GAAGwwD,OAAO1lD,EAAK,GAAGY,cAC7CymD,EAAKp1C,IAAMA,EAAMA,EAAI/c,GAAK,KAE9BmyD,EAAKpD,YAGblH,EAAY7xC,UAAUi7C,eAAiB,SAAUhuD,GAC7C,GAAImT,GAASnT,EAAEmT,OACXq4C,EAASrvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAK4sD,IAAM5sD,KAAKsxD,wBAAwBt6C,EAAO/D,MAAM0uB,iBAChD3hC,KAAK4sD,IAAI,KACV5sD,KAAK4sD,IAAI,GAAK,EAElB,IAAI2C,GAASvvD,KAAKsvD,SAAStvD,KAAK4sD,KAC5BC,EAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,IACrCC,GAAI,KAAO7sD,KAAK6sD,IAAI,KACpB7sD,KAAKyuD,UAAUj1C,eAAgBpX,MAASyqD,EAAI,KAAM,GAClD7sD,KAAKyuD,UAAUt/B,WAEnBnvB,KAAK6tD,kBAAkBhB,EAAI,IACvB7sD,KAAKipD,eAAiB4D,EAAI,KAAO7sD,KAAK6sD,IAAI,KAC1C7sD,KAAK6uD,cAAcr1C,eAAgBpX,MAAkB,IAATyqD,EAAI,KAAY,GAC5D7sD,KAAK6uD,cAAc1/B,UACnBnvB,KAAKgvD,yBAEThvD,KAAK6sD,IAAMA,EACX7sD,KAAK8tD,qBACL9tD,KAAKmxD,YAAY5B,GACjBprB,SAAO,IAAMgkB,GAAU,cAAgBnoD,KAAK8F,WAAWmN,MAAM0uB,gBAAkB3hC,KAAK0qD,mBAAmB1qD,KAAK4sD,KAC5G5sD,KAAKi6B,aAAas1B,EAAQF,EAAQrvD,KAAK0qD,mBAAmB1qD,KAAK4sD,OAEnEnE,EAAY7xC,UAAUk7C,oBAAsB,SAAUjuD,GAClDA,EAAEC,gBACF,IAAIkT,GAASnT,EAAEmT,MACf,IAAIA,EAAOjT,UAAUC,SAASskD,IAAO,CAGjC,GAFAtoD,KAAKqxD,sBACLrxD,KAAKwtD,iBAAiBx2C,GAClBA,EAAOjT,UAAUC,SAASikD,IAC1BjoD,KAAKgzD,kBAEJ,CACD,GAAIzD,GAASv4C,EAAOjG,aAAa,cAC7Bs+C,EAASrvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAK4sD,IAAM5sD,KAAK2qD,SAAS3qD,KAAK0iB,WAAW6sC,IACzCvvD,KAAK6sD,IAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KACtC5sD,KAAKkpD,aAAanlD,UAAUC,SAASokD,KACrCpoD,KAAKmxD,YAAY5B,GAErBvvD,KAAKi6B,aAAas1B,EAAQF,EAAQrvD,KAAK0qD,mBAAmB1qD,KAAK4sD,MAE9D5sD,KAAK8oD,QAAW9oD,KAAKmwB,aACtBnwB,KAAKyxD,WAAW5tD,OAIhBwQ,WAAQ2C,EAAQ,IAAMgxC,IACtBhoD,KAAKizD,iBAGDj8C,EAAOjT,UAAUC,SA/jCzB,YA+jC4CgT,EAAOjT,UAAUC,SA9jC5D,YA+jCOhE,KAAK6yD,aAAa77C,EAAQnT,GAGtB7D,KAAKkpD,aAAanlD,UAAUC,SAASokD,KAAc/zC,UAAQ2C,EAAQ,wBACnEhX,KAAKwwD,uBAMzB/H,EAAY7xC,UAAUo8C,YAAc,SAAU9B,OAC5B,KAAVA,IAAoBA,GAAQ,EAChC,IAAI7B,GAASrvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAK4sD,OACL5sD,KAAK6sD,OACL7sD,KAAKi6B,aAAa,GAAIo1B,EAAQ,GAAI6B,IAEtCzI,EAAY7xC,UAAUq8C,eAAiB,WACnC,GAAIv+C,GAAU1U,KAAKkpD,YACnBlpD,MAAKoG,QAAQ,oBAAsBnG,QAASD,KAAK8F,UAAWsjD,KAAM,WAClEppD,KAAKgzC,kBACD7X,MAAMl6B,KAAKojC,YAAU,aAAgBrkC,KAAK8F,YAAa4rB,QAAQ,SAAUvc,GACzEhB,SAAOgB,KAEPT,EAAQ3Q,UAAUC,SAASokD,KAC3Bj0C,SAAOgwB,SAAO,IAAM4jB,GAAc/nD,KAAK8F,YAE3C9F,KAAK8F,UAAUmN,MAAMD,MAAQ,EAC7B,IAAIkgD,GAAS/uB,SAAO,oBAAqBnkC,KAAK8F,UAC1C9F,MAAKosD,cACL5oD,SAAO0vD,GAEXlzD,KAAK6pD,eACL7pD,KAAK8pD,iBAAiBz3C,QACtBrS,KAAKmO,cACLnO,KAAKkqD,kBACLlqD,KAAKqC,aACLrC,KAAKoG,QAAQ,gBAAkBnG,QAASD,KAAK8F,UAAWsjD,KAAM,YAElEX,EAAY7xC,UAAUi8C,aAAe,SAAU19C,EAAKtR,GAChD,GAAIsR,EAAIpR,UAAUC,SAxmCd,WAwmC+B,CAC/B,GAAIurD,GAASvvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAKoyD,mBAAmB7C,GAEvBvvD,KAAK8oD,SACN9oD,KAAKyxD,WAAW5tD,GAChB7D,KAAKoqD,SAASnqD,QAAQoS,UAG9Bo2C,EAAY7xC,UAAUm7C,eAAiB,SAAUluD,GAC7C,GAAImT,GAASnT,EAAEmT,MACf,IAAKA,EAAOjT,UAAUC,SA9lCf,aA8lCP,CAGA,GAAImvD,GACAznD,EACA0nD,KAAWj4B,MAAMl6B,KAAKojC,YAAU,IAAMikB,GAAMtxC,IAC5Cq8C,EAAmBD,EAAMv+B,OAAO,SAAUs4B,GAAQ,MAAOA,GAAKppD,UAAUC,SAAS,gBAAmBsvD,KACxG,SAASzvD,EAAE0vD,QAAU1vD,EAAE8D,SACnB,IAAK,IACD9D,EAAEC,iBACFqvD,EAAcE,EAAkBD,EAAMpzD,KAAKwzD,aAAaJ,EAAOC,EAAiBrzD,KAAKyR,WAAa,EAAI,IAChG2hD,EAAMpzD,KAAKyR,UAAY2hD,EAAMvyD,OAAS,EAAI,GAChDb,KAAKyzD,oBAAoBN,EACzB,MACJ,KAAK,IACDtvD,EAAEC,iBACFqvD,EAAcE,EAAkBD,EAAMpzD,KAAKwzD,aAAaJ,EAAOC,EAAiBrzD,KAAKyR,UAAY,GAAK,IAChG2hD,EAAMpzD,KAAKyR,UAAY,EAAI2hD,EAAMvyD,OAAS,GAChDb,KAAKyzD,oBAAoBN,EACzB,MACJ,KAAK,IACDtvD,EAAEC,iBAEFqvD,EAAcC,EADd1nD,EAAM2nD,EAAkBrzD,KAAKwzD,aAAaJ,EAAOC,GAAkBrzD,KAAKqtD,SAAW,GACxD+F,EAAM1nD,GAAO0nD,EAAM1nD,EAAM1L,KAAKqtD,SACzDrtD,KAAKyzD,oBAAoBN,EACzB,MACJ,KAAK,IACDtvD,EAAEC,iBAEEsvD,EADJ1nD,EAAM2nD,EAAkBrzD,KAAKwzD,aAAaJ,EAAOC,EAAiBrzD,KAAKqtD,SAAW+F,EAAMvyD,OAAS,GAE7FsyD,EAAcC,EAAM1nD,IAGpBA,GAAO0nD,EAAMvyD,OAEbsyD,EAAcC,EADd1nD,GAAO0nD,EAAMA,EAAMvyD,OAAS,GAAGgL,cAAc6nD,oBAGjD1zD,KAAKyzD,oBAAoBN,EACzB,MACJ,KAAK,IAED,GADAtvD,EAAEC,iBACEuvD,EAAiB,CACjB,GAAI9D,GAAS8D,EAAgBtiD,aAAa,aAC1C/Q,MAAKmyD,gBAAgB5C,GAAkB,GAAI1rD,OAI3D4kD,EAAY7xC,UAAU68C,oBAAsB,SAAUE,GAGlD,GAFA3zD,KAAKqxD,sBACLrxD,KAAKwtD,iBAAiBmG,GAClBA,EAAO5vD,UAAUC,SAASikD,IAC1BjoD,KAAKgzD,aAAY,OAEhB,CACD,GAAIzD,GAASoE,EAAO5iD,aAAa,cAC7Bs+C,EAASrvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAK4sD,IAAM5sD,KAAK2qD,SAAS4E,GACzBvvD,KAAK6sD,IAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KACtC5sD,KAAKkpD,aAAanlD,UAAUC,SAASokD,KACrCpoD,KAAKmxD,YAAY5B,GAErBvvD,KAAKi6B,aAAas1B,EAAQF,EAAQrvD,KAAK0qD,mBAAmB1qD,KAAK4sD,MAAM,KAG7EnE,EAAY7xC,UAAU48C,aAAe,SAAUnf,EAAOp0C,EAAS2zD,GAE3D,GAAIrC,IADJld,EAAQ99B,MAAMK,UAAUukB,MAAMl6B,KAAKozC,IACrBxzC,OACVgzD,EAAa7zD,KAAKqtD,QAAUhZ,EAAMkd,EAAI,GAAG1lD,cAAc6nD,kBACvDhoD,EAAM2oC,EAAMhoC,QAAQpM,EAQxB,OAPAyL,IAAOkoD,EACHloD,EAAM,EACNA,GAAO6lD,EAAIsC,EAGXnoD,GAAO6lD,EAAIsC,EAERnoD,GAEX+8C,EAAY7xC,UAAU4I,aAAe,SAAU3b,GAC3C,GAAImT,GAASnT,EAAEmT,MACf,IAAKA,EAAO5U,MAAMvB,OAAlB,CAGA,GAAIgsD,GACAwC,CAEJ,QADYlrB,SAAO,gBAAiBntB,EAAOnL,eAAesH,aAEtD,IAAK,MACD,GAAI/Q,GAAQ,EAIZ,KAHyB,MAApB4U,EAAO5U,MAAM,IAAsC,IAAxB4U,EAAO5U,MAAMvB,QAAsC,MAApBmW,EAAO5U,MAAM,IAAsC,IAAxB4U,EAAO5U,MAAMvB,UACnGuB,EAAQpC,KAAK0iB,WAAW1L,EAAO5U,QAEd,IAAjBA,EAAMvB,OAMN,MALAwuD,GAASrvD,KAAKsvD,SAAStvD,KAAK4sD,KAC5B5sD,KAAK4sD,IAAM5sD,KAAK2qD,SAASvoD,EAAQA,EAAMgvD,QAAQ,IAC/CpxD,KAAK8zD,iBAAiB9zD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KAAMyC,EAAQr4C,EAAO5U,MAK9E,MAEJ,KAAK,IACGpC,KAAK4sD,IAAI,KAAOlvC,OAAO1G,EAAO5U,SAC9BitD,EAASrvD,KAAKsvD,SAAStvD,KAAK4sD,KAC5B5sD,KAAK4sD,IAAI,GAAKlvC,OAAO1G,EAAO5U,OAC5ByqD,EAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KACrC5sD,KAAK8zD,iBAAiBjH,EAAKwC,GAE/B,MACJ,KAAK,IACGrvD,KAAK4sD,IAAI,KAAOlvC,OAAO1G,EAAO5U,SAC9BitD,EAASrvD,KAAKsvD,SAAStvD,KAAK4sD,KAC5B5sD,KAAK4sD,IAAI,GAAKlvC,OAAO1G,EAAO5U,OAC5ByqD,EAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KACrC5sD,KAAK8zD,iBAAiBjH,EAAKwC,GAE/B,MACJ,KAAK,IACGrvD,KAAK4sD,IAAI,KAAOlvC,OAAO1G,EAAO5U,SAC9BitD,EAASrvD,KAAKsvD,SAAStvD,KAAK4sD,KAC5B5sD,KAAK4sD,IAAI,GAAKlvC,OAAO1G,EAAO5U,OAC5ByqD,EAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KACrC5sD,KAAK8zD,iBAAiBjH,EAAKwC,GAE/B,MACJ,KAAK,IACDrvD,KAAKyuD,UAAUrsD,MAAQsb,OAAO1G,EAAO5U,MACrC,MACJ,KAAK,IACGpC,KAAK6sD,IAAI,KAAOnvC,OAAO1G,EAAO5U,SAC9BpC,KAAK6sD,IAAI,GAAKnvC,OAAO1G,EAAO5U,OAC5BpC,KAAKixD,YACLjxD,KAAKovD,uBAET,MACJ,KAAK,IACGpvD,KAAK6sD,IAAI,KAAOnvC,OAAO1G,EAAO5U,SAC9BpC,KAAK6sD,IAAI,GAAKnvC,OAAO1G,EAAO5U,OAC5BpC,KAAKixD,YACLjxD,KAAKovD,uBAET,MACJ,KAAK,IACDpvD,KAAK6uD,cAAczsD,MAAQsb,OAAO1G,EAAO5U,UAIrDqmD,EAAY7xC,UAAUk9C,iBAAmB,SAAUjH,EAAKwC,EAAQjtD,GACxDyqD,EAAI,KAAO7sD,KAAK6sD,IAAI,KACpB7sD,KAAKyuD,UAAUj1C,eAAgBpX,MAASyqD,EAAI,KAAM,GAClD7sD,KAAKyuD,UAAUt/B,UACfnvB,KAAK6tD,kBAAkBhB,EAAI,KAE/B7sD,KAAK6sD,IAAMA,CACX,IAAI0C,GAASvvD,KAAKsvD,SAAStvD,KAAK4sD,IAChC5sD,MAAK8tD,qBACL9tD,KAAKmxD,YAAY/uD,GAAgBmtD,EACjC,IAAI9E,GAAOzqD,KAAK0qD,mBAAmB1qD,KAAK4sD,IACxC5sD,MAAKyvD,cAAchF,GACnBzqD,KAAKi6B,aAAas1B,EAAQF,EAAQ5E,IAEtChC,EAAY7xC,UAAUqjB,aAAe,SAAUs1B,EAAQF,EAAQ5E,EAAMyG,OACnD,KAAVA,IAAoBA,GAAQ,EAChC,IAAI1G,GAAM+E,EAAOp0B,MAAM,EAAG,EACrBn7B,MAAKmwB,aAAgB+gC,EAOtBlxD,KAAKoG,QAAQ,UACTw2B,cAAgB4tB,IAAKA,EAAKC,KAAMA,GAChCpqC,eAAiBmqC,IAAK6E,EAAOl0B,MAAM,EAAG,GAAIsvB,KAAMzqD,KAAK0qD,mBAAmB1qD,KAAK2qD,SAAS0E,QAR1FrvD,KAAKoG,QAAQ,UAAYw2B,cAAgB4tB,IAAKA,EAAKC,KAAMA,GACrDpqC,eAAiBmqC,IAAKxqD,KAAKoC,MAAM+4B,MAAM,EAAG,GAAIsvB,KAAMzqD,KAAK0qD,mBAAmB1qD,KAAK2qD,SAAS3qD,KAAKoC,SAAWA,MAAOmtD,IACrHvvD,KAAKwZ,eAAgBpX,MAASmtD,IAAU,GACxCvvD,KAAKC,QAAQmC,MAAQooD,GAAY,YAgBzC/B,EAAY7xC,UAAUsP,QAAU,WAC5B,GAAI3gB,GAAQvF,KACR0U,EAAU1U,KAAKkpD,YACnBrxC,GAAOjB,UAAUsP,QAAQjlB,KAAKjB,OAC7B,WAAY,cAAc0xB,QAAQ,SAAU9U,GAAQrX,EAAMtF,QAAQ2Q,gBAAgBgM,KAC/E5c,KAAK8oD,QACL9oD,KAAKgzC,eACLhzC,KAAKmsD,qBAGDnsD,KAAK+zD,gBACL/zD,KAAKgzC,eACLhzC,KAAKmsD,oBAETnsD,KAAKoqD,SAASlkC,UACdlmB,KAAKoqD,SAAW,MAEpBpqD,KAAKupD,aACLvpD,KAAKupD,WAAa,KAClBvpD,KAAK0pD,gBACL1pD,KAAK0pD,cAAgB,KACjB1pD,KAAKC,QAAQ4e,oBACb1K,SAAOnU,KAAKC,QAAQ4e,oBAEpBnK,IACAA,EAAQ7I,cAAcgD,aAAa7O,KAAKC,QAASyU,GACjDP,SAAOO,IAEX1U,KAAK8F,UAAY,KACb9F,KAAKqD,aACLf,eAAakB,OAAOxD,KAAKqD,YAAa,QAASrD,KAAKygC,mBAG5DgoB,EAAY7xC,UAAUu1C,iBAAmB,WACrC,GAAInsD,KAAK8vD,WAAY,CACjB9vD,KAAKyuD,UAAUvoC,UACXlmB,KAAKipD,gBACLjpD,KAAK6uD,cAAc3oC,UACnBlmB,KAAK6uD,cAAgB,MAEzB7uD,KAAKyuD,UAAY,IACjB,IAAIuF,GAAch0D,KAAK6wD,gBACvBmD,GAAYp9B,QACZo9B,EAAY9tC,UACZlmB,KAAK4wD,WAAa,OAG1BnI,EAAY7xC,UAAUm9C,YAAc,WAChC,MAAO/zD,MAAK8qD,cAAc/mD,UAAUC,SAAS,iBAEjDykD,EAAY7xC,UAAUo8B,aAAe,WACjC,GAAIhzC,KAAK8vD,WAAY,CACjB,GAAIlC,GAAc5tD,KAAK8pD,gBACvBxnD,gBAAakB,OAAOoqD,EAAa,UAAW5tD,KAAK0xD,eACjDpvD,eAAakB,OAAOxD,KAAKkuD,kBAAmB,uBAAwBluD,KAAK2xD,cACrE3xD,KAAKysD,cAAgBzsD,KAAKmwB,cAC1B7tB,eAAakB,OAAO2gC,SAAO,IAAMujB,GAAY1nD,KAAK8F,WAAY,QAAS9F,KAAKiyD,iBAEhF3vD,eAAakB,OAAO2gC,SAAO,cAAgBnkC,KAAK8F,WAAY,QAAS9F,KAAK6xD,oBAG1EvvD,gBAAakB,OAAOxD,KAAK8F,UAAW,QAAS9F,KAAK8xD,qBAClDxvD,eAAakB,OAAOxD,KAAK8F,UAAW,UAAW9F,KAAK+xD,iBAG5DtJ,EAAY7xC,UAAU8L,WAAa,SAAUtgB,GACzC,IAAKA,EACD,MAAO,EAEM,OAAbA,EAAM,KACNA,EAAQ,IAAMA,EAElB,IAAIoqD,GAAMpqD,EAAMvB,MAKhB,IAJY,IAAR2rD,IACApqD,GAAS,IACToqD,EAAM,GAEE,IAARA,EAAW,CAEX,IAAK,GADDyH,GAAY,GACPrzD,EAAI,EAAGszD,EAAQ9xD,EAAMvB,OAAQD,EAAIszD,EAAOtzD,IAC7CqzD,GAAc7xD,EAAM+xD,OAAOvzD,GAAKwB,EAAM+xD,OAAOvzD,EAEjDwB,GAAQ,IAAM6xD,EACdzH,EAAM,EAKV,MAHY,KAARA,IACApqD,GAAS,MAENA,GAEXqmD,EAAY7xC,UAAU+zC,SAAW,SAAUH,GACvC,IAAKA,EACD,QAGe,MADnBA,EAAMA,EAAIhgD,QACF3J,SACJ2pD,EAAMxqD,KAAK0iB,WAAW8nC,GAE1B,IAAI4J,GAAU12C,QAAQgG,SAAS8mC,EAAIrvB,OAAO,GAAI,IAAM,KAAK1X,QAAQ,GACjE+mC,GAAMA,EAAIrvB,MAAM,EAAG,EACnB,IAAIk5B,GAAS3wC,SAAS8mC,EAAK,IACvByD,IAKJ,OAJAA,GAAE7sD,KAAMizD,GAAU,GAAM,KACxBpG,EAAE7sD,KAAMizD,GAAU,EAAK,KACvBpG,EAAE7sD,KAAc,IAATizD,GACPpG,EAAE7sD,KAAKgzD,GACAnG,GAEXxF,EAAY7xC,UAAUk2C,SAAW,SAAU11C,EAAGk9C,EAAGl+C,EAAGg+C,GAChD,GAAIp0D,KAAK4sD,MAAQ5sD,KAAK4sD,IAAI/rD,OACtB,QAEJuW,IAAK,IACLk9C,GAAK,IACLl+C,GAAK,GACL,IAEI63C,GAFAtwC,EAAM8E,KAAK9E,IAAIvG,EAAGk9C,EAAGl+C,GACrBqH,EAAMgF,KAAKhF,IAAIrG,EAAGk9C,EAAGl+C,GAErBm+C,EAAI52C,EACJxH,EAAIwH,EAAMF,EACV+2C,EAAY,IAAR72C,EAAY,EAAIxH,EAAIwH,CAC5B,IAAIA,IAAQF,EACRwwC,EAAI,MAEH,CACD,OAAQtwC,GACJ,IAAKvG,GACD62C,GAAKqG,EAAIl+C,GAAKD,GAAKm+C,EAAIl+C,EAAI,EAAI,EAC/B,MACJ,KAAKk+C,GACDrG,GAAK73C,EAAIgB,GAAKjB,EAAI,CAClB,MACJ,KAAKC,GACD63C,GAAK72C,EAAIk9C,GAAKn+C,EAAI,EAG1B83C,GAAK,EAET,GAAIpB,IAAOpqC,KAAKK,MAAU,IAAJmrC,GAAUxrC,KAAKK,MAAU,IAAJ0xC,GAAY,GAAI/xC,KAAKK,MAAU,IAAJyxC,GAAY,GAIlF,OAHK7yD,qBAAkB0yD,IACnBvH,EAAIzrD,KAAKgzD,GAENvH,GAEXpE,EAAY7xC,UAAUu3C,SAAW,SAAUF,EAAGuG,EAAGD,EAAGH,GAChD,GAAIh9C,GACAk9C,EACAl+C,CAGJ,IAFAo+C,GAAK,IACLD,GAAK,IACK,IAANC,EAEA,MADAp9C,GAAIk9C,EAAIl+C,EAAIm+C,GACJ9xC,KAAKK,MAAU,IAAJ1L,GAAUqL,KAAKK,MAAU,IAAJwxC,GAAU7xC,KAAKK,MAAU,IAAJ1M,GAAUg+C,EAE3EnG,IAAK,EACL,IAAIrtD,GAAI6hB,KAAKgyC,MAAMxG,GACfyG,EAAIzG,EAAIrtD,EACR4V,EAAI+9C,GAAK,EAAIC,GACbG,EAAIJ,GAAK,EAAIC,EAAIE,GACjBE,EAAIL,GAAK,EAAIC,GAAK,EAAIE,GAC1B,QAAQ9zD,GACJ,IAAK,GACDwW,EAAIm9C,EACJD,EAAIM,EACJx+C,EAAII,CACJ,MACJ,KAAK,GACDY,EAAIu9C,EACJL,EAAIC,EACJn+C,EAAII,CACJ,MACJ,KAAK,GACDY,EAAIZ,EACJ89C,EAAIC,EACJn+C,EAAIw+C,CACJ,MACJ,KAAK,GACDx9C,EAAIZ,EACJ89C,EAAIK,EACJv+C,EAAIm+C,CACJ,MACJ,KAAK,GACDn9C,EAAIw9C,EACJN,EAAI99C,EACJJ,EAAIm+C,CACJ,MACJ,SACIn9C,EAAIm9C,EACJD,EAAI99C,EACJJ,EAAIu+C,EAEZ,GAAI/H,IAAOnqC,KAAKK,MAAU,IAAJ1L,GAAUqL,KAAKK,MAAU,IAAJwxC,GAAU7xC,KAAKK,MAAU,IAAJ1M,GAIhE,OAHK1U,qBAAkB0yD,IACnBxH,EAAIxrD,KAAKgzD,GAENxH,GAEXnE,EAAY7xC,UAAU04C,SAAW,SAAU1C,GACvC,MAAOA,GAAI/rD,OAAU,IAAMb,KAAKwqD,IAAIoC,EAAI,IAAM5sD,KAAKwqD,IAAIoC,EAAI,IAAM5sD,KAAKwqD,IAAIoC,EAAI,KACxElrD,oBAAkBkrD,EAAI,IAA6F,GAA3E,IAAXA,EAAI,IAAYnqC,KAAKK,MAAe,IAAT8pC,EAAI,IAAY,OAAS7uC,SAAS,IAAIqzC,QAAQ,GAAK,MAAe,IAEpI3I,EAAY7xC,UAAU4zC,IAAM,SAAUtsB,GAClC,OAAQ,IAAMA,EAAEngB,SAAS,KAAKod,OAAO,IAEzCstB,EAAY7xC,UAAUi+C,uBAAyB,SAAUv5C,GACrD,GAAIw5C,GAAoB3wB,SAAO,IAAMujB,GAAY1nD,KAAK8F,UAClDwV,GACIw5C,EACA90D,KAAK2wD,uBAGL3wD,KAAKgqD,gBACDhqD,KAAK8vD,aAAe9vD,KAAK0T,UACzB1T,KAAK4xD,sBAKTkD,IACI90D,KAAKmwB,YACLhc,SAAOgwB,SAAO,IAAM6jB,GAAY8M,IAGhCtxD,SAAOsxD,KAKvBrM,EAAY7xC,UAAUm+C,mBAAqB,SAAUz5C,GACjD,GAAI05C,GAAiB7wB,SAAO,IAAMujB,GAAY1nD,KAAK8F,UAC/CwV,IACI05C,GACAxxD,SAAOwxD,GAEXh1D,KAAKgqD,gBACDhqD,KAAK8vD,aAAe9vD,KAAK0T,UACzB1T,KAAK4xD,sBAIL5xD,KAAKysD,aACLt4C,SAAOgwB,SAAO,cAAe6wB,IAG7BxxD,SAAOwxD,IAInBvM,EAAY7xC,UAAUq+C,gBAAkB,SAAUruC,GAC9C,GAAI5mB,KAAK8vD,WACL9vD,KAAK4sD,IAAM5sD,KAAK2qD,SAAS/jC,GACzB5mB,KAAK6sD,IAAM7sD,KAAK8sD,SAAS3jC,MAAMnpB,KAAMA,KAAK4sD,KAC1C5sD,KAAK8tD,qBACL35C,SAAOE,UAAQrU,KAAKyuD,UAAUxuD,QAAS,sBACvCD,KAAK+tD,eACL/tD,KAAK6tD,oBACL7tD,KAAKmxD,YAAYvqC,GACO,IAApB5mB,KAAK4sD,IAAI/rD,QACTb,KAAKwvD,mBAAiC,IAAdxvD,KAAK4sD,IAAI,QAGpC,CACD5sD,KAAKqxD,qBACL,IAAIl8C,GAAMnV,KAAK8F,UAAUW,cAAc,oBAAsBzG,KAAK0iB,WAAWkE,GAAW,KACpFzR,IACAnV,KAAKwtD,iBAAiBr4C,KAIlCszC,EAAY7xC,UAAUs+C,iBAAmB,WACrC1xD,SAAO2gC,SAAO,IAAM4jB,GAAc/nD,KAAK8F,YACvC9F,KAAKmO,eAETs6C,EAAY7xC,UAAUu+C,mBAAqB,SAAUvuC,GAC7C5mB,KAAK8vD,aACL9vD,KAAKyuD,UAAUtrD,SAAWyjB,EAC1B5mB,KAAK6uD,cAAc1rD,SAAWyjB,EAC9B5mB,KAAKk1D,oBAELtuC,GACA5mB,KAAKiqD,gBAAe,GACpBjqD,KAAKgzC,iBAGLhzC,KAAKiqD,gBAAe,GACpBjqD,KAAKqC,eAGbomD,EAAY7xC,UAAUw+C,oBAAsB,SAAUxuC,EAASC,GAC3D,GAAInS,GAAU1U,KAAKkpD,aACfmM,EAAer1D,KAAK8qD,aACpBjkC,IACAlgB,eAAa+N,EAAS2gD,GAAexuC,EAAQlmB,MAAM,MAEnDimB,GACA3a,YAAUyI,EAAS2gD,GAAezuC,EAAQjmB,MAAM,OAGxD8nD,EAAY7xC,UAAU0+C,eAAiB,SAAU1uC,GACzCA,EACA3a,YAAUjM,KAAKkpD,cAAe,SAG9BviD,eAAa3G,KAAKkpD,cAAe,UAGzCT,EAAY7xC,UAAU2+C,mBAAqB,WACvCphD,SAAOnU,KAAK8F,UAAU8M,SAAS,IAC/B5S,KAAK8F,UAAUmN,MAAMD,MAAQ,GAC7BhT,KAAK2pD,iBAETlB,EAAY7xC,UAAU4+C,mBAAqB,SAAU5uC,GACjD,GAAIlS,GAAU1U,KAAKkpD,YACftiC,IACAjgB,eAAa3G,KAAK8F,UAAU+F,eA3lDtB,kBA4lDN7L,KAAK4uD,oBAAoBzqB,SAAO,wBAAyBnkC,KAAK8F,WAAWgJ,YAAY9O,KAAKsO,cAAc,OAASgC,UAAW,uBACvHoE,EAAQ3Q,UAAUC,SAAS6jD,KAAenzC,EAAQ3Q,UAAUC,SAAS4jD,KACtE5nD,KAAKqwD,mBAAmBlsB,SAAO,qBAAsBnkC,KAAK8F,cAI9DmG,YAAUjM,KAAK8F,UAAU+F,eAlmDnB,kBAmmDN7L,KAAK6uD,cAAc3oC,UACnB1iB,SAAOxD,KAAK6uD,cAAc5uD,SAC1BD,KAAK6uD,cAAgB,KAChBn6C,EAAQ3Q,UAAUC,SAAS6jD,KAAenzC,EAAQ3Q,UAAUC,SAAS4jD,KACtEpkD,SAAO2gC,SAAO,IAAM+jB,GAASloD,KAAK8F,WAAW+F,iBAYzD48C,EAAY7xC,UAAU+P,kBAAoB,SAAUC,EAASC,GACzD,GAAIthB,GAAQvF,IACZ,KAAK0B,oBAAkBklB,EAAQxkB,OAAQ,CACnC,GAAIA,GAAQpC,KAAK0iB,WAAWkE,EAAQxkB,MACpC,IAAqB,IAAjBA,EAAMvB,OAAc,CACpBb,KAAKC,QAAQmC,MAAQpC,KAAK0iB,WAAWtgB,GAAO+4B,MAAM,EAAG,EACrD,IAAIyvB,GAAU5qD,KAAKoqD,UAAYjmB,SAAO,mBAAoBnkC,KAAKoqD,SAASnqD,QACpE2qD,KACAA,EAAQ33C,MAAM0uB,gBAAkB3hC,KAAK0qD,mBAAmB1qD,KAAK2qD,SAAS/jC,EAAQxkB,aAIlFpC,MAAKoC,MAAQykB,EAAQzkB,MAG7B,IAAKpC,KAAK8oD,QAAUpnD,oBAAkBklB,EAAQkiC,QAAS,CACnD,GAAI2M,IAAkB,WAAY,YAElC,IADAz1D,KAAKoqD,SAAS5wC,cAAck8C,WAAS9uC,EAAS6uC,KACzCz1D,KAAK+zD,cAGN,MAFA/zD,MAAKo1D,oBAAoBxuC,EAAQtV,SAAUuV,EAAQvV,cACnDtR,MAAKs1D,eAAe1uC,EAAQnV,WAgGpC,IAAK,GADDumC,GAASh4C,KACJiR,EAAK,EAAGC,EAAKC,OAAOC,KAAKwV,GAAU3V,EAAKC,EAAGrQ,OAAQoQ,KA5F9C,SAAUqK,GACpB,OAAQA,GACJ,IAAK,SACGsL,EAAQkiC,QACR9Q,EAAOkR,aAAap6C,YAAYkpC,EAAOlyC,WACvCkyC,EAAOoS,SAASlkC,UAChB/R,SAAO6jC,EAAO/3C,QAAQ4e,oBACjBm5B,EAAOlyC,UAAU8M,SAAS/R,QAC3Bm3C,EAAO+Q,iBAIX/Q,EAAOmU,mBACPnU,EAAOhF,eACPgF,EAAOlyC,UAAU6M,UAAY,GAC7BqlC,EAAOgR,iBAEX,MACJ,KAAK,WACDhR,EAAOod,oBAAoBxuC,EAAQtV,SAAUuV,EAAQvV,SACrD,IAAIm+B,GAAQ7oB,EAAQtV,SAAS3Q,MAAM,KAAKi6C,OAAO/zB,EAAQvV,SAAS3Q,MAAM,MAIlEg1D,EAAU,GAHdlmB,EAAQA,EAAMmmB,OAAO,SAAU/4C,EAAGzG,GAEhC,MAFyCyG,GAAExQ,QAAQ+J,GAAK,GACtDyG,EAAEzb,KAAKgV,GACFyG,QAEH6U,QAAQ,SAAUmkC,GACJ,IAAZF,GACCE,IAAQhO,IAnqDf,yBAmqD4BgO,GAA2BA,IAAQzN,IAAayN,IAAQlO,IAAWkO,IAAQjO,KACjFzjB,SAAO,IAAM4jB,GAAcxiD,EAAMO,YAE7CtC,SAAO2gC,SAAO,IAAM4jB,GAAcxiD,EAAMO,YAE5CP,EAAM4I,cACNwnD,MAGR,MAEJ,KAAK,YACG3d,EAAO8X,aACP9X,EAAOyW,UAAUh9C,UAAYmV,EAAQnV,UACjCumC,EAAOiR,gBACPjR,EAAO6W,cAAcp9C,UAAYmV,EAAQnV,WAE7CumC,EAAOkd,oBAEXld,EAAOsd,eAAe1uC,EAAQnV,UAC9B,MACJ,KAAK,WACDumC,EAAOmd,mBAAmBvuC,EAAQlT,SAClC,MACJ,KAAK,QACGskC,EAAO51C,QAAUykB,EAAQzkB,OACzB41C,EAAOid,gBAAgBruC,EAAQxkB,MAEnC,MACJ,KAAK,cACD41C,EAAO+c,mBAAmBnuC,EAAQuJ,YAClC,MACJ,KAAK,OACoB,WAAjBvJ,EAAQwiC,KACRpR,EAAOib,iBAGPjb,EAAO4a,iBAEX,MACJ,KAAK,eACD5a,EAAO6c,uBAAuBjuC,EAAQ6lC,aACtC,MACJ,KAAK,UACL,IAAK,eACIzU,EAAO8X,YACR9X,EAAOud,oBAEX,MACJ,KAAK,UACG3uC,EAAQuiC,QACY,YAAhBnR,EAAOoR,MAAuBpR,EAAOyU,cACrCzU,EAAO0U,aAIX1U,EAAOud,oBAEX,MACJ,KAAK,gBACDvd,EAAOwd,mBAAmB5uC,EAAQqiC,iBAM/B/3C,EAAGD,KAWtBw3C,EAAY7xC,UAAUyP,QAAU,WAC5BrmB,KAAKC,QAAQ4L,cAAcwG,SAE/ByE,IACIqQ,WAAS,cACVshC,EAAY7xC,UAAW,YAAS,IACnCE,IACIqQ,WAAS,KACVshC,EAAY7xC,UAAW,eAAY,IACtCE,IACIqQ,YAAS,IACVshC,EAAY7xC,UAAW,eAAY,IACtCE,IACIqQ,WAAS,WACVshC,EAAY7xC,UAAW,WAAQ,IAClCE,IACIqQ,YAAS,IACVshC,EAAY7xC,UAAW,mBAAgB,IAC1CE,IACIqQ,WAAS,OACVshC,EAAY7xC,UAAW,mBAAgB,IAC1CE,IACIqQ,YAAS,IACVshC,EAAY7xC,UAAW,kBAAe,IACzCE,IACIqQ,WAAS,KACVshC,EAAY7xC,UAAW,cAAW,IACrCE,IACIqQ,YAAS,IACVshC,EAAY7xC,UAAW,aAAU,IACpCE,IACIqQ,YAAS,IACVshC,EAAY7xC,UAAW,cAAW,IACrCE,IACIqQ,YAAS,IACVshC,EAAY7xC,UAAW,wBAAqB,IAC/CE,IACIqQ,YAAS,IACVshC,EAAY7xC,UAAW,oBAAiB,IAC3CE,IACIsQ,WACDqhC,EAAY7xC,UAAW,aAAU,IACpCE,IACIsQ,WACDqhC,EAAY7xC,UAAW,aAAU,IACpCE,IACIsQ,WACDqhC,EAAY7xC,UAAW,uBAAoB,IAC9CE,IACIsQ,WACDqhC,EAAY7xC,UAAW,iBAAc,IACxCE,IACIsQ,WACDqhC,EAAY7xC,UAAW,WAAQ,IAClCE,IACIsQ,WACDqhC,EAAY7xC,UAAW,kBAAe,IACzCE,IACIsQ,WACDqhC,EAAY7xC,UAAW,uBAAoB,IAC9CE,IACIsQ,WACDqhC,EAAY7xC,UAAW,mBAAgB,IAC1CE,IACIsQ,WACDqhC,EAAY7xC,UAAW,cAAW,IACrC6xC,EAAc3xC,IACVuQ,yBACDohC,IAELnhC,aCl2DErR,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB/E,OAAOkF,iBAChBC,uBAA2BC,QAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,MACpDL,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASM,KAAO1W,KAAK2W,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAajF,OAAO0F,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAYC,EAAQzN,EAAK0N,GAC7E,GAA2Hd,GAAvHe,EAAIC,UAAUtW,OAAQuW,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAO9F,OAAOkG,yBAAyBL,EAAQzN,GAAO0N,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQzN,EAAK0N,OACpH,KAAK,GAAIrW,GAAImW,EAAWlW,OAAS,EAAGD,GAAK,EAAGA,KAASuV,EAAIY,EAAWnW,MAAIwW,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQzN,EAAK6N,GAAKjB,EAAEa,EAAQzN,KAAS6N,EAChJ,OAAOF,GAAI,GAAKE,GAAKjG,OAAOqG,eAAeR,EAAQzN,EAAK6N,GAAIA,GAQ5D0+C,IAAiB,QAAS,QAAS,SAanCC,GAAyB,SAAUl+C,GAQnC,QAASk+C,GAAQj+C,EAAS7X,GACtB,GAAIsF,GAAQsS,EAAO5W,KAAKjB,KAAM8X,EAAS7X,IAAYD,IAQnD,OAPAuF,GAAM8a,cAAgB,KACtB9a,EAAM2E,WAAY,EAClB3E,EAAMywD,eAAgB,EACtBzwD,EAAM2oB,QAAS,EACf3oB,EAAM0wD,mBAAqB,KAC3B1wD,EAAMwS,OAAQ,EACdxS,EAAM2wD,eAAiBp+C,EAChBvS,EAkqBX,MAlrBA0Q,IAAU8/C,EAASl+C,GA0BnBk+C,EAAQn/C,UAAU+P,kBAAoB,SAAUC,EAASC,GACrD,IAAK,GAAI5V,GAAK,EAAGC,EAAKC,OAAOC,KAAKwV,GAAU3V,EAAKC,EAAGrQ,OAAQoQ,IAExD,OADWC,EAAGD,IAEV,IAAK,iBACDvE,QAAMuH,eAAejU,KAAKm2D,gBAC1BzpD,QAAM0H,YAAYpU,KAAKo2D,kBAAmBp2D,KAAKgG,eAAgBhG,KAAKiG,YACpE,MACJ,KAAK,UACDyG,QAAM6E,WAAWvR,KAAKmD,QAASnD,KAAKo2D,kBAAmBp2D,KAAKgG,eAAgBhG,KAAKm2D,eAAerwD,WAChG9F,KAAKoD,gBACL,MACJ,KAAK,QACDsJ,QAAMqG,SAAS6T,EAAQ5T,MAAOhT,KAAKm2D,eAAerwD,UAClD,MACJ,KAAK,QAEG,GAAI6D,GAAe3J,KAAK4J,mBACxB5J,MAAK4J,qBAAsB,EACtB5J,KAAKy7C,QAAQz7C,KAAKoC,SACnBpC,KAAKoC,MAAQpC,KAAKoC,MAAM2b,YAE5B/d,KAAK4J,oBAAsBD,EAC3B+C,QAAMC,SAAS3M,KAAKoC,MAAOpC,KAAKo2D,kBAAmBp2D,KAAKgG,eAAgBhG,KAAKyD,iBACzEzD,KAAKg2D,gBACLh2D,KAAKC,QAAQmC,MAAQpC,KAAKo2D,kBAAkBh0D,OAEhDpC,KAAKi2D,mBAAqBj2D,KAAKo2D,kBAAkBh0D,OAE5CpC,KAAKkK,WAAalK,KAAK+X,SAAiC,IAAvB/X,KAAKmK,eACvCnK,KAAKqgB,cAAgBrgB,KAAKkK,UAAYlK,KAAKoC,MAAQpC,KAAKqgB,cACxDrgB,KAAKmK,eAAgB,IAEhBzI,oBAAkB1B,KAAKkK,aAAelK,KAAKkK,WAC5ClK,KAAKkK,YAAclK,KAAKmK,eAAmBnK,KAAKkK,WAAaxI,oBAAkB1B,KAAKmK,iBACxFnK,KAAK2e,kBAGb,MACJ,KAAK,iBAEG3e,KAAK+Z,0BACL/Z,KAAKqc,0BACLrc,KAAKga,iBAAgB,GACrBtN,QAAM2C,kBAAkBrP,KAAKm2D,eAAerwD,UAAW9F,KAAKC,QAEhE,MACJ,KAAK,WACDyM,QAAMiF,YAAY3R,KAAK4G,SAAU5G,KAAKo2D,kBACtC,MACJ,KAAK,OACsC,aAAnCp2D,KAAKo2D,kBAAkBzxD,UACvB3E,KAAKo2D,kBAAkBjnD,aAAa,OAAQnP,KAAK0I,MACjDgE,QAAM2C,kBAAkBrP,KAAKm2D,eAAerwD,UAAW9F,KAAKC,SAC5DD,KAAK2e,mBAET,MACJ,KAAK,kBACsC,aAAnC3e,KAAKo2D,kBAAkBzxD,UACvB+H,QAAMwC,eAAelP,KAAKyD,gBAAiBzD,KAAKo2D,kBAAmBp2D,KAAKm2D,gBACxEn2D,KAAKoD,iBAET,MACJ,KAAK,YACDsJ,QAAM8E,aAAaxR,KAAKyR,WAAYzR,KAAKm2D,eAAerwD,WACxD,MACJ,KAAK,cACD4G,QAAMgF,eAAe1R,KAAKiG,YAAajG,KAAKo2D,kBAC5C,MACJ,KAAK,eACyB,OAAtBp2D,KAAKG,cAA+C,KAAtBH,KAAKG,aACnCH,KAAKo2D,kBAAkBj2D,aAAeH,KAAKG,aAG3CH,KAAK6T,kBAAkB,gBAE3B,MACJ,KAAK,WACD7T,KAAK+c,eAAe6J,EAAQtV,SAAUuV,EAAQvV,SAC9C,MACJ,KAAK,SACDtR,KAAKq2D,UAAY,GAAIv6C,wBAAqB9b,KAAKsZ,QAC/CtZ,KAAKoZ,KAAK4N,UAAUhnB,KAAKsZ,QACzBtZ,KAAKwZ,eAAgBvT,YAAajG,KAAKoZ,KAAKG,YAAY,iBAAkB,GAC1E7M,QAAMgF,eAAe1R,KAAKiG,YAAajG,KAAKo2D,qBAW5DL,EAAQn/C,UAAUsQ,cAAgB,WAC9B,MAAO,WAEX6uC,EAAQn/C,UAAU6kC,QAAU,SAAUC,GAClC,OAASA,GAAO,QAAQl7B,KAAKk7B,IAEjCqa,EAAQn/C,UAAUsB,UAAY,WAO1B,GANAlY,KAAKyY,aAAezY,KAAKC,QAAQyY,WAAU,GAC3C1Y,KAAKqD,YAAcgR,UAAQrU,KAAKC,QAAS,QACpCyB,oBAAkB1B,KAAKqD,eACxBrD,KAAKkuB,QAAS,GAGW,gBAAzBluB,KAAKC,QAAQ0E,QAA2B,CACxC,GAAI4T,GAAaC,WAAS,gBAAiBxY,KAAKC,SAC5CuF,EAAexF,KAAKs2D,UACpBt2D,KAAKsO,cAAc,YACnBtO,KAAKsO,cAAc,QAEvB,KADIpF,EAAQ,EACAA,EAAQlJ,KAAKC,QAAQF,WAAWc,OAAQqI,IAE1B,QADlBqtD,EAAgBv2D,KAAKC,QAAQF,WAAWmJ,GAAO2P,YAE/CrT,EAAa2J,aAAaonD,EAAev2D,KAAKC,QAAQF,WAAWmJ,GAAO4P,WACxEtT,EAAamN,UAAY3S,KAAKC,QAAQ0S,UAChB,SAAlB4jD,GACAv2D,KAAKC,QAAQ2Q,gBAAgB,QAIzC5Q,MAAKC,QAAQ6O,YAAYtJ,GACzBxF,KAAKC,QAAUuF,EACfmH,WAAS,gBAAiB4L,EAAYvY,KAAKC,SAE/CD,KAAK+Z,0BACL/Z,KAAKga,iBAAgB,GACQ,aAAzBha,KAAKC,QAAQ0E,SACb3E,KAAKC,QAAQkP,aAAa,OAAQnP,KAAK0I,MAE3C1I,KAAKC,QAAQkP,aAAa,OAAQ,WAClCnP,KAAKq2D,UAAY,GAAIv6C,wBAAqB9b,KAAKsZ,OAC/C,IAAIL,IAAehT,YAAajG,KAAKiG,YAWrC,IAVAjG,KAAKoZ,KAAO,GAAIC,QAAK,UAAWJ,EAAYjZ,KAAKsZ,QACJ,KAAzCtZ,KAAKoZ,KAAKG,YAAY,gBACtBvZ,KAAKwZ,eAAgBvT,YAAajG,KAAKiG,aAAejG,KAAKoZ,KAAKG,YAAY,iBAAkB,GAE7FvZ,KAAKC,QAAQ8Y,aAAa,OAC3B/Y,KAAKC,QAAQkP,aAAa,KAAMorC,cAAY,YAE3Cv6C,KAAKC,QAAQ8Y,aAAa,SAC3B/Y,KAAKC,QAAQkP,aAAa,OAAQnP,KAAKC,QAAQ8Q,aAAa,OAEnC,UAAzB/Q,KAAKC,QAAQ0E,SAAuB3E,KAAKs2D,UAAW,CACpDt2D,KAAKg2D,eAAgB,EACrBh2D,KAAKw2D,SAAWx2D,KAAKsO,cAAc,YACnCtO,KAAKC,QAAQuG,WAAWqI,aAAa7O,KAAKw2D,SAAUx2D,KAAKC,SACzDD,KAAKC,QAAQkP,aAAa,OAAQ,UAClCnP,KAAKw2D,SAASrnD,aAAa,OAAQnP,KAAKC,QAAQ8Q,aAAa,SAC7D/Q,KAAKC,QAAQ2Q,gBAAgB,QAC7B5Q,KAAKw2D,SAASrnD,aAAa,OAAQnP,KAAKC,QAAQ8Q,aAAa,SAC7D/Q,KAAKC,QAAQ2Q,gBAAgB,QAC7B5Q,KAAKw2D,SAASrnD,aAAa,KAAMorC,cAAY,YAE7C,KAAK,GADDkc,IAAiB,cAAe,WAAY,QAAS,WAAY,OAAQ,gBACpEvtD,EAAQ,EAAGA,EAAQlJ,KAAKC,QAAQF,WAAWc,OAAQqI,IAAS,CACjE,GAAIqtD,GAAgBv2D,KAAKC,QAAQF,WAAWmJ,GAAO2P,QAC/C7Y,MAAKC,QAAQ8Y,aAAaw9C,IAAkBT,GAAczpD,QAAQkqD,GAAiB,GAC/D,OAAlBA,GAA4C,SAAlBA,GAA8C,iBAAlBA,IAExDv2D,KAAKw2D,SAASrnD,aAAaonD,EAAev2D,KAAKC,QAAQF,WAAWmJ,GAAO4P,WACrE29C,EAAcpqD,QAAQkqD,GAAiB,IACvCv2D,KAAKC,QAAQ2Q,gBAAgB2lD,GAC7BrtD,SAMpB6sD,EAAQn/C,UAAUoD,gBAAkB,SAAUmB,GAG1C,IAAK,GAAIlK,GAAK,EAAGylD,EAFLv7C,EAAYzZ,oBAAkB1B,KAAKqb,mBAAuBlK,OAAOC,KAAKpR,KAAKqb,iBAClF,cAAe,WAAY,QAAS,WAAY,OAAQ,gBAC3BpK,EAAKylD,EAAQ71D,OAAQoQ,IAAM,CACzD,GAAI1H,GAAMmtD,EAAQzlD,EAClB,KAAKvP,oBAAkB1B,KAAKC,QAAQ8Q,aAAaxH,IAC7C,OAAQA,GACJ,IAAK,WACD,GAAK7H,oBAAkB1B,KAAKk2D,qBAAuD7wD,KAAnCrF,KAAKk2D,eAAwB,SAAqB/6C,EAAW,CACzG,GAAIhY,GAA6C,aAAnCnD,KAAKC,QAAQ8Q,aAAaxH,IAA0D,KAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,IAClD,SAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,EAC9BvJ,MAAKwZ,eAAgBrW,QAASA,IAAYgY,GAE9C,KACJ,KAAK,WACD,GAAKzZ,oBAAkB1B,KAAKk2D,qBAAwD7wD,KAApCrF,KAAKk2D,eAAyB,UAAqB/6C,EAAW,CAC1G,GAAIvU,GAA8C,aAAnC5G,KAAKC,QAAQ8Q,aAAaxH,IAA0D,KAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,IAChD,SAAnCvJ,KAAKC,QAAQ8Q,aAAaxH,EACjCvJ,MAAKwZ,eAAgB5S,SAAUA,IAAauU,GAEhD,KACJ,KAAK,eACIzZ,oBAAkB1B,KAAKk2D,qBAA2D7wD,KAAvCrF,KAAKk2D,eAA4B,aAAqB/6C,IAClGnb,KAAKwZ,eAAgBvT,YAAajG,KAAKC,QAAQgG,cAAgBkV,EAEnE,MACJ,KAAK,eACD,GAAKzZ,oBAAkB1B,KAAKk2D,qBAA4D7wD,KAAxCrF,KAAKk2D,eAA6B,cAAqB/6C,EAAW,CAC9G,GAAIw7C,GAAgD,QAA9B32D,KAAKC,QAAQE,aAAyB,MAAQ,IACpEH,MAAKwZ,eAAgBrZ,aAAcw2D,IAAoBx7C,GAE3D,KACJ,KAAK,SACIzZ,oBAAkB1B,KAAKk2D,qBAAqD7wD,KAAjCrF,KAAKk2D,eAAsB,OAAqB/6C,IAC5Fnb,KAAKwZ,eAAgBpX,MAAOpC,KAAKC,QAAQmC,QAAU+Y,EAEvD,MACJ,KAAK,QACIzZ,oBAAkB1B,KAAKk2D,qBAAoD7wD,KAAhCrF,KAAKk2D,eAAqB,MAAqB/6C,IAC3Fnb,KAAKwZ,eAAgB9Q,KAAM1I,KAAKC,QAAQyI,OAASyS,MAazE46C,EAAQn/C,UAAUyD,OAAS,WACvB,GAAI4B,GAAuBjc,KAAKsR,QAC3B5P,qBAAkB1B,KAAKsR,WAA+B,KAAlBtR,KAAKsR,WAC1C2K,EAAuBjc,KAAK42D,uBAAuB52D,KAAKsR,WAE5DtR,KAAKo2D,kBAAqBp2D,mBAAsBA,KAAKw2D,SAAWx2D,KAAKC,QACrED,KAAKm2D,eAAiBzpD,QAAMyB,aACxBlO,QAASD,KAAKo2D,kBACdpwD,eAAgBhG,KAAKgG,eACrBiJ,YACI9L,QAASnD,KAAKmD,QACdsO,UAAWzR,KAAKyR,UAChBH,SAAU2K,EACVrV,SAAU5G,KAAK4G,SACfX,YAAajG,KAAKiG,YAClBxC,gBAAiBzD,KAAKyD,mBAG9BzD,KAAKqc,0BACDrc,KAAKg2D,eACLh2D,KAAKo2D,kBAAkB5vD,WAAWqI,aAAa7O,KAAKC,QAASD,KAAKo2D,mBAEtEp2D,KAAKqC,aACAX,oBAAkB1B,KAAKoC,SACxBsK,QAAMC,SAAS3M,KAAKoC,MAAOpC,KAAKo2D,kBAAmBp2D,KAAKgG,eAAgBhG,KAAKyD,iBACzEzD,KAAKg2D,gBACLh2D,KAAKC,QAAQmC,MAAQpC,KAAKo2D,kBAAkBh0D,QAG/CV,oBAAkB1B,KAAKoC,SACxBpC,KAAK62D,aAAe72D,KAAKoC,MACzBpC,KAAK82D,mBAEiB,OAAtB92D,KAAKG,cAA+C,KAAtBH,KAAKG,aACnCH,KAAKo2D,kBAAkBj2D,aAAeH,KAAKG,aAErCuB,oBAAkB1B,KAAKk2D,qBAA4D7wD,KAAxCrF,KAAKk2D,eAA6B,cACnFl2D,KAAK6T,kBAAkB,iBAE3B7T,KAAKqgB,cAAgBrgB,KAAKoC,MAC1BpC,KAAKi2D,mBAAqBj2D,KAAKoC,MAC/BpC,KAAKo2D,kBAAkBW,aAAe/2D,KAAKo2D,kBAAkBh0D,MAC7DsK,QAAMqG,SAAS/S,KAAKgT,MAAOhT,KAAKm2D,eAAerwD,WAC/C9F,KAAKkb,kBAET66C,EAAQn/C,UAAUyF,wBAA0B,WACxC,IAAK3a,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI1H,GAAM2H,EAAGD,EACb,IAAI6kD,GAAczpD,QAAQ9C,IAAQ,EAC9B,GAAY,UAARA,EAAiB,CACjB,GAAIif,GAAqBxoB,KAAK42D,uBAAuB52D,KAAKqb,eAAe9R,GAC9C,MAAvBif,GACAvc,YAAUjM,KAAKm2D,eAAerwD,WAAY0iB,EAAmB7nB,MAAM,UAGtE,IAAY,UAAR4I,EAAiB,CACtB,GAAIytD,GAAWh3D,KAAKm2D,eAAerwD,UAAUiL,aAAaxH,EAC1DytD,GAAYt1D,oBAAkBs1D,GAC1Bh3D,KAAKqb,eAAe9R,GADmBytD,EAAWh3D,KAAKqb,eAAe9R,GAE1EvJ,KAAKm2D,eAAerwD,UAAUqJ,aAAa5F,EAAKytD,OAGhDh3D,MAAKm2D,eAAerwD,UAAUqJ,aAAa5F,EAAKvJ,KAAKqb,eAAe9R,MAMxFwsD,EAAQn/C,UAAUmD,wBAA0B,WACxC,IAAKrY,oBAAkB1B,KAAKqb,gBACxB,IAAK,GAAIpK,GAAK,EAAGC,EAAKC,OAAOC,KAAKpR,KAAKqb,gBAAiBpK,EAAKC,EAAGrQ,OAAQoQ,IAAM,CAC1E,GAAI1H,GAAM2H,EAAGD,EACT6kD,IAAczpD,QAAQ9C,GAAO,GAC7BvJ,KAAKC,QAAQkP,aAAa5F,EAAKvJ,KAAKqb,eAAe9R,MAKnEwsD,EAAQn/C,UAAUmG,eAAiB,SAAUC,EAAUlK,GACnDpG,QAAM2E,YAAYrR,KAAK42D,uBAAuB55C,IAAYhd,KAAKm2D,eAAerwD,WAAY9F,KAAK42D,uBAAuB9jD,KAE1HijD,EAAQn/C,UAAUggD,uBAAyB,SAAUK,GACjD,GAAIxkD,GAASwkD,CAIb,OAHKv1D,qBAAkBu1D,IAAsC,KAAnBA,IACtCxkD,EAAUwkD,EAAex1D,QAAQ,OAAQ,KAAM+I,QAE5CiI,GAEXsjD,EAAQn/C,UAAUkgD,gBAAkB,WAC3B92D,KAAKkK,WACNlK,KAAKo2D,kBAAkBjnD,aAAa,QAASnP,KAAK62D,eAG1Dd,EAAQn/C,UAAUvU,WAAa,WAC3BC,eAAaC,IAAIvC,KAAKo2D,kBAAmB,QAASp2D,KAAKof,aAAcpf,MACrEsC,eAAaC,IAAIvC,KAAKo2D,kBAAmB,OAAQp2D,KAAKqf,gBAAiBrf,MACvEsC,eAAaC,IAAIvC,KAAKo2D,kBAAmB,QAASp2D,KAAKwf,aAAcxf,MACrEsC,eAAaC,IAAIvC,KAAKo2D,kBAAmB,SAAUp2D,KAAK0f,cAAe1f,MACnEA,KAAKkuB,QACL5rB,eAAaC,IAAIvC,KAAKqD,YAAa,QAASrD,KAAK+yC,UAAW/yC,MAEhEA,KAAKoD,kBACA1B,oBAAkB1B,KAAKm2D,eAAerwD,UAAUW,cAAc,mBAA6C,SAAxBzG,KAAKgG,gBACtFhG,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,eACpDhE,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,cACjD1B,eAAaC,IAAKvC,KAAKm2D,eAAerwD,UAAUW,cAAc,iBAAmB,iBAAkBzG,KAAKk3D,iBAAkBl3D,OAGlI+1D,EAAQn/C,UAAUsgD,iBAAmB,WACjCl3D,KAAKm2D,eAAerwD,UAAU/B,UAAUxB,IAAI,gBAC5C,IAAIsN,GAAQ7P,KAAKm2D,eAAerwD,UAAUW,cAAc,gBACnD/E,qBAAkBmO,KACnBA,EAAM9L,UAAUxB,IAAI,eAChBsN,EAAM9L,UAAUC,SAAS,mBACzB6L,EAAM9L,UAAUP,OAAO,oBAInCuyD,EAAQn/C,UAAUugD,WAAa,SAAU/0D,GACrC,GAAIuH,GAAe3J,KAAK4J,mBACxB5J,MAAK4J,qBAAsB,EAC3B5J,KAAKoC,MAAQA,EACbpC,KAAK4J,oBAAsBD,GAE/BosD,EAAQn/C,UAAUm8B,UAAY,WAO1B,GANI/yC,KAAKkK,UACLlK,KAAKm3D,WAAW,IAGhBn3D,KAAKm3D,WAAWn3D,KAAK62D,eAEpBn1D,oBAAkB1B,KAAKm2D,gBAAiB,CACzC,GAAItmD,GAAQ7P,KAAKm2D,eAAerwD,UAAUW,cAAc,gBACnD/E,qBAAkBmO,KACdnO,oBAAkB1B,KAAK62D,eAAuC,KAAtB72D,KAAK62D,cAC9ChnD,EAAM9L,UAAUxB,IAAI,kBACpBsN,EAAM9L,UAAUP,OAAO,gBAEI,KAAtBxD,KAAK62D,eACVhnD,EAAM9L,UAAUxB,IAAI,eACpBsN,EAAM9L,UAAUP,OAAO,sBAKvCuyD,EAAQn/C,UAAUwI,aAAe,SAAUvS,GACvC,GAAIjH,IACAE,UAAW9F,KAAKm2D,eAAerwD,UAC/B5B,MAAO2I,EACPzK,MAAOpC,KAAKoC,MAEhBpC,MAAKoG,QAAQ,QAASR,IAE1BmwD,EAAQn/C,UAAUyI,gBAAkB,SAAUxS,GACb,OAAvB7M,KAAKqgB,eAAyC,OAAfrgB,KAAKoC,OAAmD,KAAjCpC,KAAKo2D,kBAAkBh0D,OAC9EpC,KAAKqgB,gBAAkBrgB,KAAKo2D,kBAAkBh0D,OAC/CpC,KAAK2e,iBAAiB9R,GAAM,EAEhC,IAAIjH,IACAE,UAAW9F,KAAKm2D,eAAerwD,UAC/B5B,MAAO2I,EACPzK,MAAOpC,KAAKoC,MAEhBpC,MAAKoG,QAAQ,OAAQR,IAEzBmwD,EAAQn/C,UAAU4I,aAAe,SAAU3S,GAEvC,GAAIuqD,GAAap3D,KACb4F,GACA1B,MAAO2I,EACPzK,MAAOpC,KAAKo2D,kBAAkBh0D,MAC9Bie,cAAergB,KAAKi2D,mBACpBnwD,UAAW9F,KAAKm2D,eAAerwD,UAEnC9F,MAAKi2D,mBAAqBj2D,KAAKo2D,kBAAkBh0D,MAE7CpC,KAAKkK,YACLktD,EAAWt1C,aAAc1f,MAAOpC,KAAKo2D,kBAAkBh0D,QACvDpC,KAAKmK,eAAgB,GAErBnK,KAAK+X,QACL/X,KAAKmK,eAAgB,GAEzBnK,KAAKoG,QAAQ,QAASR,GACtBiH,EAAKsT,mBAET41C,EAAQn/C,UAAU8I,cAAgB,SAAU7S,GACxC7M,KAAKwZ,eAAgBpX,MAAOpC,KAAKo2D,kBAAkBh0D,QAAS,GAC5DpC,KAAK2e,iBAAiB9R,GAAM,GAC5BA,EAAKsT,mBAET41C,EAAQn/C,UAAU+H,iBAAmB,SAAUza,EAAOmzD,GAClD,GAAIzxD,IACA1B,MAAOA,EACP9B,MAAOpC,KAAKoC,MACZie,cAAergB,KAAKqgB,cACpBva,UAAW9F,KAAKm2D,eAAerwD,UAC/BiE,cAAestD,IAA4B,EAC3CrtD,aAAcqtD,IAA4B,EAE9Cr3D,MAAKmK,eAAgB,EACrBnK,KAAKoG,QAAQ,SAAUR,GACvB5F,KAAKqgB,cAAgBrgB,KAAKoC,OAE9B2zD,EAAQn/C,UAAUxT,eAAiB,WAC3BpD,KAAKyD,iBAAsD,aAAnCzD,KAAKo2D,kBAAkBzxD,UAC3C3E,KAAKmD,QACLb,eAAaC,IAAIvC,KAAKm2D,eAAexyD,YAAa,uBAAwB3D,KAAKs3D,kBAAmBt3D,MAGlGsC,eAAakB,OAAOxD,KAAKm2D,eAAexyD,YAAa,uBAAwB3D,KAAKs3D,qBAI9FvB,EAAQn/C,UAAU0gD,kBAAoB,SAAUpzD,GAE5C,GADAA,EAAMJ,kBACA9D,KAAKm2D,eAAexyD,YAAYI,UAAUC,SAlevC,qBAke8D,CACnE0I,QAAMC,SAAS,GAAI3M,KAAKo2D,kBAAmBp2D,KAAKgG,eAAgBhG,KAAKyD,iBACjEzD,KAAKg2D,gBACLh2D,KAAKC,QAAQmC,MAAQpC,KAAKo2D,kBAAkBh0D,OAEhDpC,KAAKwZ,eAAgBpX,MAAOpC,KAAKo2D,kBAAkBh0D,QAAS,EAC5D,IAAIwD,IACA1B,MAAOA,EACP9B,MAAOpC,KAAKo2D,kBAAkBh0D,MAC9Bie,cAAergB,KAAKi2D,mBACpBnwD,UAAW9F,KAAKm2D,eAAerwD,UAEnC9F,MAAKoG,QAAQ,QAASR,GACtB5F,KAAKi2D,mBAAqBj2D,KAAKo2D,kBAAkBh0D,MACjDpC,KAAK2e,iBAAiBza,GAAO,KAGrC6xD,EAAQn/C,UAAUo8B,aAAe,WAC7B1wC,eAAakB,OAAOxD,KAAKo2D,kBAAmB,QAASp2D,KAAKof,cAC1D9c,eAAakB,OAAOxD,KAAKo2D,kBAAmB,OAAQp2D,KAAKqf,iBACzD/c,eAAakB,OAAOxD,KAAKo2D,kBAAmB,QAASp2D,KAAKwf,cAC1Dld,eAAakB,OAAOxD,KAAKo2D,kBAAmB,SAAUp2D,KAAK0f,eACvD1f,KAAKkuB,QACL5rB,eAAakB,OAAOxD,KAAKqD,YAAa,QAASrD,KAAK+yC,YAEnDrxC,oBAAkB1B,KAAKm2D,eAAerwD,UAAUW,cAAc,mBAA6C,SAAxBzG,KAAKgG,gBACtFhG,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,cACpDhE,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,eACjD1B,eAAakB,OAAQxD,KAAKm2D,eAAerwD,UAAUW,cAAc,iBAAmB,iBAAkBzG,KAAKk3D,mBAUnHnB,EAAQn/C,UAAUsP,QAAU,WACxBlmB,KAAKgzC,eACwB,UAAzBhzC,KAAKC,QAAQ0E,SAAuB3E,KAAKs2D,YACzCniD,SAAOnU,KAAKm2D,eAAerwD,UAAUkK,qBAAqB,YAAY,IACtEhQ,KAAKo2D,kBAAoBp2D,KAAKC,QAC9BD,KAAKC,QAAQ2Q,gBAAgB,SAEjC5Q,KAAKo2D,kBAAkBh0D,MAAQpC,KAAKo2D,kBAAkBW,aACtD/2D,KAAKo2D,kBAAkBryD,UAAUP,OAAO,WACxCxD,KAAK6T,kBAAkB,mBAAoB,gBAAiB,gBAAiB,oBACxEnS,oBAAkB1B,KAAKm2D,kBACxBn2D,KAAKm2D,eAAerwD,UAAUkM,sBAAsB,WAAYhS,KAAKo2D,mBACrEjiD,SAAOnU,KAAKm2D,eAAerwD,YAE/B9F,KAAKm2D,eAAiB,KACtBt+C,EAAOjB,UAAUsP,QAAQjlB,KAAKjB,OAUlC+1D,EAAQn/C,UAAUrB,QAAU,SAAUC,EAAUC,GAC5C/I,QAAM6I,QAAQC,EAAUC,EAAOzV,KAAKm2D,eAAerwD,UAAW9F,KAAKo2D,kBAAmBp2D,KAAKsO,gBAO/FynD,EAAQn/C,UAAU4P,eAAiB,WAC/B,GAAIC,IAAa,QACjB,OAAOzmB,MAAK0mB,aAAaD,IAS7BsvC,EAAQn/C,UAAU9C,cAAgB,SAAU/T,GACxC,IAAK,GAAIkR,GAAK,EAAGC,EAAKC,OAAOC,KAAKrR,GAAakR,EAAKC,EAAGrQ,OAAQoQ,IAAM,CACjE,GAAI1H,GAAM2H,EAAGD,EACD,cAAR1H,GACAvJ,KAAKwZ,eAAgBrW,SAAS,IAAS,GACvCuJ,QAAM6E,WAAWvR,KAAKmD,QAASnD,KAAKo2D,kBAAmBp2D,KAAKgG,eAAgBhG,KAAKm2D,eAAerwD,YAEnF,aAARyD,GACLvJ,KAAKwZ,eAAgB5S,UAAU,IAAQ,GACvC8F,QAAMiF,YAAY3R,KAAK4G,SAAU5G,KAAKo2D,oBAEzB,UAAR7sD,EACLvJ,KAAKo2D,kBAAkBryD,UAAUxB,IAAIxC,EAAWwJ,IAEnC,gBAARA,GACLvJ,KAAKwZ,eAAgBvT,YAAalG,EAAWwJ,KAAQ,GACrDmD,QAAMgF,eAAe1R,KAAKiG,YAAajG,KAAKo2D,qBAE/B,SAAR7sD,GAAkBvJ,KAAKo2D,kBAAkBzxD,QAC9C3E,KAAKo2D,kBAAkBjnD,aAAa5F,EAAKxJ,EAAWwJ,OAahEwsD,EAAQn/C,UAAU/C,iBAAmB,SAAU9T,GAC3C,IAAK,GAAIkR,GAAK,EAAGmK,EAAerb,EAAYkR,EAAKmK,EAAava,OAAQoQ,IAAM,CACxE,GAAI1H,GAAM6R,EAAanK,EACX,cAAR1H,GACAvJ,KAAKwZ,eAAgBrW,SAAS,IAAQ,GACtCuJ,QAAM6E,WAAWvR,KAAKmD,QAASnD,KAAKo2D,kBAAmBp2D,KAAKgG,eAAgBhG,KAAKm2D,eAAerwD,YAEnF,aAARyD,GACLvJ,KAAKwZ,eAAgB5S,UAAU,IAAS,GACxC8F,QAAMiF,YAAY3R,KAAK4G,SAAU5G,KAAKo2D,oBAEzB,gBAAR7sD,GACLvJ,KAAKwZ,eAAgBvT,YAAa,OAAQ,GAC1CyG,QAAMgF,eAAe1R,KAAKiG,YAAajG,KAAKo2D,oBAG5Cp2D,KAAKo2D,kBAAkBxlD,gBAAgBrH,KASnDwsD,EAAQn/C,UAAUyP,QAAU,WACpBlU,SAASC,gBAAkBpS,KAAKo2D,mBAAqBp2D,KAAKmD,UAC1DnD,KAAKo2D,kBAAkB/jD,SACnBrS,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,kBAC9ChE,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,cACjDhE,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,cACpDiI,YAAUjM,KAAKm2D,eAAerwD,YAlnB1B,oBA2nBhBiwD,EAAQn/C,UAAU0P,SAAW,WACrBnU,SAASC,gBAAkBpS,KAAKo2D,mBAAqBp2D,KAAKmD,UAC1DnD,KAAKo2D,kBAAkB7vC,QACnBvmB,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,kBAC9ChE,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,cACjDhE,KAAKm2D,eAAerwD,UAAU/B,UAAUC,SAAS,cACpD2C,eAAa3G,KAAKm2D,eAAerwD,YAjoB7B,oBAqoBhBgR,IACIqQ,WAAS,SACV4uC,EAAQn/C,UAAW,WAAQ,IAC9BE,IACIqQ,YAAS,IACV4uC,EAAQn/C,UAAW,eAAY,IAClCE,IACIqQ,WAAS,OACV4uC,EAAQn/C,UAAW,YAAS,IAC/BE,IACIqQ,WAAS,UACV4uC,EAAQn/C,UAAW,qBAAkB,IACxCE,IACIqQ,WAAS,KACV4uC,EAAQn/C,UAAW,eAAY,IAClCE,IACIqQ,WAAS,OACV4uC,EAAQn/C,UAAW,kBAAe,IACrCE,IACIqQ,WAAS,OACV4uC,EAAQn/C,UAAW,mBAAgB,IACtCE,IACIqQ,gBACD4uC,EAAQn/C,UAAW,qBAAkB,IACxCE,IACIqQ,YAAS,IACV4uC,EAAQn/C,UAAW,gBAAa,IACnCE,IACIqQ,YAAS,IACV4uC,EAAQn/C,UAAW,cAAW,IACjCE,IACIqQ,YAAS,IACV4uC,EAAQn/C,UAAW,sBAAmB,IACzCE,IACIqQ,YAAS,IACV4uC,EAAQn/C,UAAW,wBAAqB,IAC3CE,IACIqQ,WAAS,OACV4uC,EAAQn/C,UAAW,YAAS,IAC/BE,IACIsQ,WACD2uC,EAAQn/C,UAAW,cAAW,IACjCE,IACIsQ,WACD2uC,EAAQn/C,UAAW,gBAAa,IACnCE,IACIsQ,WACD2uC,EAAQn/C,UAAW,aAAU,IAChCE,IACIsQ,WACD2uC,EAAQn/C,UAAW,WAAQ,IAC9BE,IACIsQ,WACD2uC,EAAQn/C,UAAW,YAAS,IAC/BE,IACIsQ,WACD2uC,EAAQn/C,UAAW,YAAS,IAC/Bm/C,EAAUj/C,IACNuQ,yBACD0uC,IAELzuC"}
|