@syncfusion/ej2-base 21.1.39 → 21.2.3
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 -1
- package/bin/syncfusion-license.js +1 -1
- package/dist/ej2-base.min.js +2 -2
- package/dist/ej2-base.umd.min.js +2 -2
- package/dist/ej2-base.umd.min.js.map +1 -1
- package/dist/es6/ej2-base.es2015.js +17 -20
- package/dist/es6/ej2-base.es2015.js.map +1 -1
- package/dist/es6/ej2-base.es5.js +17 -20
- package/dist/es6/ej2-base.es5.js.map +1 -1
- package/dist/global/ej2-base.min.js +2 -2
- package/dist/global/ej2-base.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +18 -51
- package/src/browser.js +2 -3
- package/src/draggable.js +1 -1
- package/src/sanitize-helper.js +12 -14
- package/src/validate-lic.js +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-base.min.js","sources":["../../src/util.js","../../src/intl/parser-base.js","../../src/internationalization.js","../../src/dom.js","../../src/base.js","../../src/notify-property-change.js","../../src/animation.js","../../src/validate-lic.js","../../src/component.js","../../src/template.js","../../src/template-engine.js","../../src/hijri-parser.js","../../src/intl/date-formatter.js","../../src/intl/number-formatter.js","../../src/intl/date-parser.js","../../src/intl/number-parser.js","../../src/observer.js","../../src/intl/intl-base.js","../../src/ajax.js","../../src/browser.js","../../src/event-handler.js","../../src/module-loader.js","../../src/child-property.js","../../src/draggable.js","../../src/droppable.js","../../src/keyboard.js","../../src/l10n.js","../../src/touch.js","../../src/sanitize-helper.js"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\nvar isBlazorPlatform = false;\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function disableBlazorMode() {\n isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n *\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n *\n * @param {Function} handler - callback function to be triggered.\n * @returns {Function} ?\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n // eslint-disable-next-line\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n // eslint-disable-next-line\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getValue(nameSpace, obj) {\n // eslint-disable-next-line\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[parseInt(i.toString(), 10)]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n // eslint-disable-next-line\n var start = obj || {};\n // eslint-disable-next-line\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[parseInt(i.toString(), 10)];\n if (i + 1 === length) {\n fromObj[\"\" + key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[\"\" + key])) {\n fromObj[\"\" + key] = {};\n }\n fromObj = fromObj[\"\" + key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n *\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} key - String value to the get the inner object\n * @returns {void} ?\n * @private\n */\n// eslint-disable-next-line\nexport function deleteObject(obj, key) {\n delete obj[\"\" + key];\n}\n/**\n *@private\n */\n// eslint-disable-next-line\nexport var containerObject = typeof window !== 'undefined' ? window : {};\n/**\n * Check weather the given argument is only object.\n *\n * @param {any} obj - Object which is need to check.\n * @returns {boolean} ?\n * @private\n */\n// eslint-disable-next-line\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n *\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getEnumValue(enumObject, enumValue) {\n // eslint-disable-next-line\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n *\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @returns {void} ?\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[\"\" + deepmerge]) && (temrObj[\"\" + deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[\"\" + key]) || Array.isArray(tempProp[\"\" + key]))) {\n extend(temrObj[\"\" + key], temrObj[\"\" + key], tempProp[\"\" + key], true);\n }\n else {\n temrObj[\"\" + key] = tempProp[\"\" + key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n *\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @param {boolean} deep ?\n * @returns {Object} ?\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied && typeof copied === 'object' ? copied : {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n // eslint-disable-next-line\n if (!arguments_1[i]) {\n return \"continue\";\n }\n // eslint-disable-next-line\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[\"\" + key];\n var copy = obj1[\"\" + key];\n var clone;\n var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n // eslint-disable-next-line\n var blazorEventExtend = isBlazor() ? (!(src instanceof Event) && !isArrayChanged) : true;\n if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n // eslint-disable-next-line\n if (Array.isArray(clone) && clone.hasOwnProperty('isComplexArray')) {\n extend(clone, {}, copy, deep);\n }\n else {\n result[\"\" + key] = extend(clone, {}, copy, deep);\n }\n }\n else {\n /* istanbul ignore next */\n clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];\n // eslint-disable-next-line\n result[\"\" + key] = extend([], clone, copy, (clone && clone.length) || (copy && copy.length));\n }\n }\n else {\n result[\"\" + key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n *\n * @param {Object} value - To check the object is null or undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n *\n * @param {Object} value - To check the object is undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n *\n * @param {string} definedName - To concatenate the unique id to provided name\n * @returns {string} ?\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n *\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @returns {Function} ?\n * @private\n */\nexport function debounce(eventFunction, delay) {\n // eslint-disable-next-line\n var out;\n return function () {\n var _this = this;\n // eslint-disable-next-line\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n/**\n * To convert the object to string for query url\n *\n * @param {Object} data ?\n * @returns {string} ?\n * @private\n */\n// eslint-disable-next-line\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[\"\" + key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n *\n * @param {any} value - Specifies the T type array to be checked.\n * @returns {boolean} ?\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n *\n * @param {Element} child - Specifies the child element to compare with parent.\n * @param {Element} parent - Specifies the parent element.\n * @returns {boolean} ?\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n *\n * @param {string} message - Specifies the error message to be thrown.\n * @returns {void} ?\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n // eslint-disable-next-line\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n *\n * @param {Element} element - Specifies the print content element.\n * @param {Window} printWindow - Specifies the print window.\n * @returns {Window} ?\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('base, link, style'));\n var blinks = [].slice.call(document.getElementsByTagName('body')[0].querySelectorAll('link, style'));\n if (blinks.length) {\n for (var l = 0, len = blinks.length; l < len; l++) {\n links.push(blinks[parseInt(l.toString(), 10)]);\n }\n }\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[parseInt(i.toString(), 10)].outerHTML;\n }\n printWindow.document.write('<!DOCTYPE html> <html><head>' + reference + '</head><body>' + div.innerHTML +\n '<script> (function() { window.ready = true; })(); </script>' + '</body></html>');\n printWindow.document.close();\n printWindow.focus();\n // eslint-disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n *\n * @param {number|string} value ?\n * @returns {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result.match(/auto|cm|mm|in|px|pt|pc|%|em|ex|ch|rem|vw|vh|vmin|vmax/)) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function enableBlazorMode() {\n isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {boolean} result\n * @private\n */\nexport function isBlazor() {\n return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n *\n * @returns {HTMLElement} result\n * @param {HTMLElement | object} element ?\n * @private\n */\nexport function getElement(element) {\n var xPath = 'xPath';\n if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[\"\" + xPath])) {\n return document.evaluate(element[\"\" + xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n }\n return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n *\n * @param {string | HTMLElement} element ?\n * @param {any} component ?\n * @returns {Object} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getInstance(element, component) {\n // eslint-disable-next-line\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n for (var _i = 0, _a = elem[\"\" + instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n *\n * @param {string | HTMLElement} element ?\n * @param {Object} instance ?\n * @returns {void} ?\n * @private\n */\nexport function addInstance(element, instance) {\n // eslint-disable-next-line\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n elem[\"\" + instances].push(instance);\n }\n else {\n elem[\"\" + instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n *\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\n // eslint-disable-next-line\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\n/**\n *\n * @param {Int16Array} num ?\n * @returns {string} ?\n */\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[parseInt(i.toString(), 10)];\n }\n return ret;\n}\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n *\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n *\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object} ?\n */\n ParserBase.getMainObject = function (obj, cName) {\n var value = isBlazor() ? cName : 'main.' + cName;\n return getValue(value, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n *\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object} ?\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n *\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object} ?\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n // eslint-disable-next-line\n if (!res.hasOwnProperty(prop[key])) {\n // eslint-disable-next-line\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n *\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp} ?\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n }).join('|');\n var regExp = RegExp;\n return new regExp(regexStr, 'g');\n };\n /**\n *\n * @param {Object} prop ?\n * @returns {Object} ?\n */\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n // eslint-disable-next-line\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n *\n * @param {string} val ?\n * @returns {string} ?\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[parseInt(i.toString(), 10)] + '|';\n }\n else {\n ret += val[parseInt(i.toString(), 10)];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string} ?\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n // eslint-disable-next-line\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n *\n * @param {Object} obj ?\n * @returns {NumericObject} ?\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} needSymbols ?\n * @param {boolean} blazorMode ?\n * @returns {Object} ?\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem) || blazorMode) {\n var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n var regExp = RegExp;\n ret.numberParseRegex = new regExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue(blazorMode ? 'numberSymbols' : 'symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} isNumber ?\n * @returns {NumberMapper} ?\n */\n // eslint-disable-next-line\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n // eslint-disable-next-line\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n/**\n * @private\n */\nvar blazorCurrencyData = {\n 'DJF': 'Fdj',\n 'ERN': 'Nfk',\n 'ETB': 'Br',\n 'NAD': '$',\n 'ZAR': 'R',\n 'XAF': 'FCFA',\n 'GHS': 'GH₵',\n 'XDR': 'XDR',\n 'AED': 'د.إ.',\n 'BHD': 'د.ب.',\n 'DZD': 'د.ج.',\n 'EGP': 'ج.م.',\n 'ILS': '₪',\n 'IQD': 'د.ع.',\n 'JOD': 'د.ا.',\n 'KMF': 'CF',\n 'KWD': 'د.ك.',\n 'LBP': 'ل.ل.',\n 'LYD': 'د.ل.',\n 'MAD': 'د.م.',\n 'MRU': 'أ.م.',\n 'OMR': 'ر.ع.',\n 'QAR': 'ر.ق.',\n 'SAR': 'ر.س.',\n 'SDG': 'ج.س.',\n 'SOS': 'S',\n 'SSP': '£',\n 'SYP': 'ل.س.',\n 'TND': 'د.ت.',\n 'YER': 'ر.ي.',\n 'CLP': '$',\n 'INR': '₹',\n 'TZS': 'TSh',\n 'EUR': '€',\n 'AZN': '₼',\n 'RUB': '₽',\n 'BYN': 'Br',\n 'ZMW': 'K',\n 'BGN': 'лв.',\n 'NGN': '₦',\n 'XOF': 'CFA',\n 'BDT': '৳',\n 'CNY': '¥',\n 'BAM': 'КМ',\n 'UGX': 'USh',\n 'USD': '$',\n 'CZK': 'Kč',\n 'GBP': '£',\n 'DKK': 'kr.',\n 'KES': 'Ksh',\n 'CHF': 'CHF',\n 'MVR': 'ރ.',\n 'BTN': 'Nu.',\n 'XCD': 'EC$',\n 'AUD': '$',\n 'BBD': '$',\n 'BIF': 'FBu',\n 'BMD': '$',\n 'BSD': '$',\n 'BWP': 'P',\n 'BZD': '$',\n 'CAD': '$',\n 'NZD': '$',\n 'FJD': '$',\n 'FKP': '£',\n 'GIP': '£',\n 'GMD': 'D',\n 'GYD': '$',\n 'HKD': '$',\n 'IDR': 'Rp',\n 'JMD': '$',\n 'KYD': '$',\n 'LRD': '$',\n 'MGA': 'Ar',\n 'MOP': 'MOP$',\n 'MUR': 'Rs',\n 'MWK': 'MK',\n 'MYR': 'RM',\n 'PGK': 'K',\n 'PHP': '₱',\n 'PKR': 'Rs',\n 'RWF': 'RF',\n 'SBD': '$',\n 'SCR': 'SR',\n 'SEK': 'kr',\n 'SGD': '$',\n 'SHP': '£',\n 'SLL': 'Le',\n 'ANG': 'NAf.',\n 'SZL': 'E',\n 'TOP': 'T$',\n 'TTD': '$',\n 'VUV': 'VT',\n 'WST': 'WS$',\n 'ARS': '$',\n 'BOB': 'Bs',\n 'BRL': 'R$',\n 'COP': '$',\n 'CRC': '₡',\n 'CUP': '$',\n 'DOP': '$',\n 'GTQ': 'Q',\n 'HNL': 'L',\n 'MXN': '$',\n 'NIO': 'C$',\n 'PAB': 'B/.',\n 'PEN': 'S/',\n 'PYG': '₲',\n 'UYU': '$',\n 'VES': 'Bs.S',\n 'IRR': 'ريال',\n 'GNF': 'FG',\n 'CDF': 'FC',\n 'HTG': 'G',\n 'XPF': 'FCFP',\n 'HRK': 'kn',\n 'HUF': 'Ft',\n 'AMD': '֏',\n 'ISK': 'kr',\n 'JPY': '¥',\n 'GEL': '₾',\n 'CVE': '',\n 'KZT': '₸',\n 'KHR': '៛',\n 'KPW': '₩',\n 'KRW': '₩',\n 'KGS': 'сом',\n 'AOA': 'Kz',\n 'LAK': '₭',\n 'MZN': 'MTn',\n 'MKD': 'ден',\n 'MNT': '₮',\n 'BND': '$',\n 'MMK': 'K',\n 'NOK': 'kr',\n 'NPR': 'रु',\n 'AWG': 'Afl.',\n 'SRD': '$',\n 'PLN': 'zł',\n 'AFN': '؋',\n 'STN': 'Db',\n 'MDL': 'L',\n 'RON': 'lei',\n 'UAH': '₴',\n 'LKR': 'රු.',\n 'ALL': 'Lekë',\n 'RSD': 'дин.',\n 'TJS': 'смн',\n 'THB': '฿',\n 'TMT': 'm.',\n 'TRY': '₺',\n 'UZS': 'сўм',\n 'VND': '₫',\n 'TWD': 'NT$'\n};\n/**\n *\n * @param {string} currencyCode ?\n * @returns {string} ?\n */\nexport function getBlazorCurrencySymbol(currencyCode) {\n return getValue(currencyCode || '', blazorCurrencyData);\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue, isBlazor } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n *\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n *\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n *\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberParser = function (options) {\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n *\n * @param {number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n *\n * @param {Date} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date} ?\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number} ?\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n *\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n *\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @param {boolean} isExcel ?\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n };\n /**\n * Returns the First Day of the Week\n *\n * @returns {number} ?\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n /**\n * Returns the culture\n *\n * @returns {string} ?\n */\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n *\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n *\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n *\n * @param {Object[]} data Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void} ?\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void} ?\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} type ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n // eslint-disable-next-line\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = isBlazor() ? getValue('numberSymbols', numObject) : getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the numeric CLDR number base object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @returns {string} ?\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n // eslint-disable-next-line\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n *\n * @param {string} mode ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n // eslint-disable-next-line\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n *\n * @param {string} tagName - Name of the tag, id and class names.\n * @param {ElementProperties} properties - Object to set properties in the element.\n * @param {ElementProperties} properties.id - To set the id to the created element.\n * @param {ElementProperties} properties.className - To add classes to the element.\n * @param {ElementProperties} properties.innerHTML - To set the innerHTML to element.\n * @param {ElementProperties} properties.styles - To set the some custom styles to element.\n * @param {ElementProperties} properties.attrs - To set the attributes to element.\n * @returns {any} ?\n * @private\n */\nexport function createElement(tagName, properties) {\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n var regExp = RegExp;\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (isObject(ele)) {\n var curClass = getValue('attributes.className', ele);\n if (isNullOrUndefined(curClass)) {\n setValue('attributes.className', className, ele);\n }\n else if (!new regExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n setValue('attributes.className', curClass + ' ' + className, ele);\n }\n }\n else {\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n var flag = isObject(ele);\n var canRemove = flag ? getValue('attributes.className', ele) : ele.className !== '';\n if (canRemove) {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n if (flag) {\n var classes_1 = getValue('attributes.className', ele);\n var classArr = classes_1.split(' ');\n var index = classArr.indexOf(className);\n if (index !== -1) {\n classArr.splice(index, 1);\n }\n setValue('attributes.className', classArr.join(' '), ele);\n }\n else {\n ele.classList.remove(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to get classlist.\n *\n * @param {string | string[]} classes - An element the need to check visibility\n * @returns {string[]} ?\n * @private\n */\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n *\n * @param {Element|Node} element - An element the need to check visibility\n * @returns {boolean} ?\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n if (fromElements instanceof NodeList) {\n while (fromElements.length > 0) {\n docFrag.appendChild(fromElements[0]);\n }\n }\n else {\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n *\n * @param {Element} ele - An element is going to evaluate the script\n * @returns {void} ?\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from parentnode\n *\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function detach(element) {\n var parentNode = element.parentNode;\n if (parentNode) {\n return parentNode.removeChild(element);\n }\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n *\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @returns {void} ?\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n *\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {string} attributes - JSON Object that is going to as attributes.\n * @returns {Element} ?\n * @private\n */\n// eslint-disable-next-line\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (isObject(ele)) {\n var iKey = key;\n if (key === 'tabindex') {\n iKey = 'tabIndex';\n }\n ele.attributes[\"\" + iKey] = attributes[\"\" + key];\n }\n else {\n ele.setAttribute(key, attributes[\"\" + key]);\n }\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function select(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {HTMLElement[]} ?\n * @private\n */\n// eslint-disable-next-line\nexport function selectAll(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * The function selects an id of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @returns {string} ?\n * @private\n */\nfunction querySelectId(selector) {\n var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n var idList = selector.split(',');\n for (var i = 0; i < idList.length; i++) {\n var list = idList[parseInt(i.toString(), 10)].split(' ');\n for (var j = 0; j < list.length; j++) {\n if (list[parseInt(j.toString(), 10)].indexOf('#') > -1) {\n if (!list[parseInt(j.toString(), 10)].match(/\\[.*\\]/)) {\n var splitId = list[parseInt(j.toString(), 10)].split('#');\n if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n var setId = list[parseInt(j.toString(), 10)].split('.');\n setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n list[parseInt(j.toString(), 10)] = setId.join('.');\n }\n }\n }\n }\n idList[parseInt(i.toString(), 10)] = list.join(' ');\n }\n return idList.join(',');\n }\n return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n *\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @returns {Element} ?\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n *\n * @param {Element|Node} element - An element that need to get siblings.\n * @returns {Element[]} ?\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n *\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @returns {string} ?\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal;\n var isObj = isObject(element);\n if (isObj) {\n attrVal = getValue('attributes.' + property, element);\n }\n else {\n attrVal = element.getAttribute(property);\n }\n if (isNullOrUndefined(attrVal) && value) {\n if (!isObj) {\n element.setAttribute(property, value.toString());\n }\n else {\n element.attributes[\"\" + property] = value;\n }\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n *\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @returns {void} ?\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // eslint-disable-next-line\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n *\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @returns {void} ?\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function matches(element, selector) {\n // eslint-disable-next-line\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n/**\n * Method to get the html text from DOM.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} innerHTML - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function includeInnerHTML(ele, innerHTML) {\n ele.innerHTML = innerHTML;\n}\n/**\n * Method to get the containsclass.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} className - String selector which element will satisfy.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n // eslint-disable-next-line\n return new RegExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n }\n else {\n return ele.classList.contains(className);\n }\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Object} element - Element to compare with the selector.\n * @param {boolean} deep ?\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function cloneNode(element, deep) {\n if (isObject(element)) {\n if (deep) {\n return extend({}, {}, element, true);\n }\n }\n else {\n return element.cloneNode(deep);\n }\n}\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n *\n * @param {Object} options ?\n * @param {string} element ?\n */\n function Base(options, element) {\n this.isRendered = false;\n this.isComplexArraySetter = false;\n this.isServerRendered = false;\n this.allowServerDataBinding = true;\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.bulkChanges = {};\n this.refreshing = false;\n this.ignoreCollectionWatch = false;\n // eslint-disable-next-line\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n *\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange ? - Specifies to true when we set properties.\n * @returns {void} ?\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n else if (isBlazor() && this.isRendered) {\n this.serverDataBind(prop);\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n /**\n * Calls for child element data bind\n *\n * @param {Object} obj ?\n * @param {Object} parent ?\n * @returns {void} ?\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[\"\" + key] instanceof Array) {\n for (var _a = 0, _b = parent[\"\" + key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[\"\" + key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n *\n * @returns {void} ?\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n /* tslint:disable:no-any */\n Base.prototype.serverDataBind = function (newChanges) {\n if (!isBlazor()) {\n return;\n }\n newChanges = newChanges ? newChanges : {};\n extend(this.bulkChanges, {}, newChanges, true);\n var sfBlazor = 'sfBlazor';\n if (this.allowServerDataBinding && window[\"\" + sfBlazor].updateModel) {\n window[\"\" + sfBlazor].updateModel(this);\n this.bulkChanges = {};\n }\n };\n /* tslint:enable:no-any */\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\n // tslint:disable-next-line:no-any\n var newChanges = {};\n newChanges[\"\" + key] = newValue;\n this.serverDataBind(newChanges);\n }\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} handler - Specifies the call to run when the event occurs.\n * @returns {void} ?\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} handler - Specifies the function to remove\n * @returns {void} ?\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n *\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n * @returns {void} ?\n */\n Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n var _this = this;\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n var blazor = 'Blazor';\n if (window[\"\" + blazor]) {\n var promise = handler.call(this, eventProp);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n data = promise;\n }\n else {\n promise.then(function (data) {\n if (successHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n JSON.parse(data) : data;\n successHandler.call(_this, data);\n }\n }).catch(function (data) {\n if (errorHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n errorHandler.call(_this, data);\n }\n });\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n return data;\n }\n };\n /**\n * To maintain instance in base class\n *\n * @returns {void} ?\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n *\n * @returns {void} ?\n */\n Base.prototype.destroy = function () {\n var _this = this;\n // eslint-disable-next-line\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n *\n * @param {HTMLElement} elem Specifies the HTMLElement or element id string.\n * @param {string} comp Specifies the component module name or Component.\n * @returns {any} ?\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[parseInt(i.toString(), 10)];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @return {void}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function removeChildInstance(element) {\n // tslint:disable-next-line:no-any\n var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n for (var i = 0; i < childEle.length; i++) {\n var compName = childEle[parseInt(i.toString(), 10)].classList[1].split('e-')[1];\n // tslint:disable-next-line:no-any\n var compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n *\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type ?\n * @returns {ClassObject} ?\n */\n// eslint-disable-next-line\nfunction getObject(instance, curKey, defaultValue, type) {\n // eslint-disable-next-line\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[\"\" + curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[\"\" + curKey];\n}\n/**\n * Returns object array\n *\n * @param {ClassObject} instance ?\n * @param {string} curKey ?\n * @param {Object[]} defaultValue ?\n * @param {Object} type ?\n * @param {boolean} isSetter ?\n * @param {boolean} isFactory ?\n * @returns {Object[]} ?\n */\n// eslint-disable-next-line\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue ? defaultValue.length : 0;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[parseInt(i.toString(), 10)], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[parseInt(i.toString(), 10)], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[parseInt(i.toString(), 10)], false]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[\"\" + curKey] = defaultValue;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n * Set the properties for the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[\"\" + curKey] !== newValue) {\n // eslint-disable-next-line\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[\"\" + curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\n// eslint-disable-next-line\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\n// eslint-disable-next-line\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n // eslint-disable-next-line\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[\"\" + curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n var _this = this;\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n var ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)\n || this.ignoreCollectionWatch);\n // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('push') && !ignore) {\n ['push', 'pop'].forEach(function (extendFunc) {\n var descriptor = {\n value: complexArrayDefinedCallback(extendFunc, curKey, type, _this.properties[\"\" + curKey]).bind(_this),\n configurable: true\n };\n Object.defineProperty(_this.properties[\"\" + curKey], extendFunc, descriptor);\n });\n }\n // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {\n Object.defineProperty(this.properties[\"\" + curKey], 'isComplexArray', { value: true });\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n this.isComplexArraySetter = true;\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.isComplexArraySetter = false;\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n // eslint-disable-next-line\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {string} dFunc ?\n * @param {string} curKey ?\n * @param {Object} type ?\n * @param {Object} prop ?\n * @returns {Object} ?\n */\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n /* tslint:disable no-function-expression */\n return function () {\n var newValue = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newValue[_i] = arguments[_i];\n }\n var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n switch (dFunc) {\n case 'push':\n for (var i = 0; i < newValue.length; i++) {\n Array.prototype[\"\" + dFunc].apply(prop, [newValue[parseInt(i.toString(), 10)]]);\n var model_1 = getArrayModel(keyString + (prop.length - 1), newValue[parseInt(i.toString(), 10)], !this.controlParent, dFunc);\n this.serverDataBind(model_1, newValue[parseInt(i.toString(), 10)], false, dFunc);\n }\n break;\n case 'pop':\n Array.prototype[\"\" + dFunc].apply(prop);\n // eslint-disable-next-line\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\n return prop;\n };\n}\n/**\n *\n * @param {string} keyString ?\n * @param {Object} value ?\n * @param {boolean} isControlParent ?\n * @param {string} arrayFunction ?\n * @returns {Object} ?\n */\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n var modelObject = keyString;\n if (isControlParent) {\n modelObject = {};\n modelObject[\"\" + keyString] = value;\n if (value && typeof value === 'object') {\n var action = 'ejsAction';\n modelObject[\"\" + keyString][\"\" + action] = arrayFunction;\n }\n }\n return modelObject;\n}\n// eslint-disable-next-line\n/**\n * Method used to create property. General syntax below.\n *\n * @param {Object} defaultValue - Specifies the default value of property.\n * @returns {PropertyDecorator} ?\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Complex<Type>({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n *\n * @param {Function} type - Specifies the class factory type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n *\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyCollectionInfo} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n *\n * @returns {PropertyDecorator} ?\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[\"\" + key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[\"\" + key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * @param {Function} classConstructor ?\n * @returns {void} ?\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\n// eslint-disable-next-line\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n *\n * @param {BuildInfo} target ?\n * @param {string} key ?\n * @param {string} propertyType ?\n * @param {Object} defaultValue ?\n * @param {Function} type ?\n * @returns {void} ?\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n // eslint-disable-next-line\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n // eslint-disable-next-line\n target.propList[propertyType + 'Names'].push(key);\n}\n/**\n * Returns an object containing the builder properties\n *\n * @param {Function} component ?\n * @returns {Object} ?\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[\"\" + key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n *\n * @param {any} component -specifies the target component for which builder to be created.\n * @returns {Object} ?\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n // eslint-disable-next-line\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n *\n * @param {Object} context ?\n * @param {string} prefix ?\n * @returns {ParentOption} ?\n * @private\n */\nfunction getParentContext(context, prefix) {\n // eslint-disable-next-line\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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 { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n *\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @returns {void} ?\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n *\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (animationMode === 'Disable') {\n if (model.begin) {\n model.begin.call(this, model);\n }\n if (model.end) {\n model.end.call(this, model);\n }\n }\n else {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n }\n };\n /**\n * Triggers animation\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element\n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame\n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n //startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n *\n * @param {AnimationModel} options ?\n * @returns {AnimationModel} ?\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n * @param {AnimationModel} newProp ?\n * @param {AnimationModel} oldProp ?\n * @returns {void} ?\n */\n // eslint-disable-next-line\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n * <div id='ripple'></div>\n * <script>\n * rippleEffect(document.getElementById('ripple'));\n * </script>\n * ```\n *\n * @private\n * @param {HTMLElement} element - Target element\n * @param {RippleOptions} rippleOptions - Ripple options .\n * @param {Function} done .\n * @returns {void} .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return (function () {\n // do nothing.\n });\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\n/**\n * Handler for ripple model\n *\n * @param {RippleOptions} rippleOptions ?\n * @returns {RippleOptions} ?\n */\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n *\n * @param {MouseEvent} e ?\n * @param {RippleArgs} eventArgs ?\n * @returns {void} ?\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n *\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean} ?\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n/**\n * Defines the Modes of Global animation.\n *\n * @private\n */\nexport var animationMode = '';\n/**\n * Method for set the Global animation modes for Syncfusion Blazor components.\n *\n * @param {string} value - Specifies the animation mode.\n * @returns {void}\n */\nexport function setGlobalAnimation(value) {\n animationMode = value;\n}\n","import { createElement } from './dom';\nimport { getValue, containerObject, setValue, isNullOrUndefined } from './util';\nexport var componentList = ['grid', 'pivotview', 'treegrid', 'spreadsheet', 'rangeNavigator', 'DocumentEditor', 'listbox', 'inplaceeditor', 'PdfViewer', 'richtexteditor', 'DashboardLayout', 'chart', 'stockChart', 'circulargauge', 'diagram', 'heatmap', 'lineargauge', 'maps', 'slider', 'smithchart', 'barcode', 'sparkline', 'treemap', 'bulletChart', 'kanban', 'daterangepicker', 'schedule', 'gantt', 'signature', 'query-builder', 'drop-down-tree', 'carousel', 'filemanager', 'uploader', 'accordion', 'tab', 'treeview'];\nvar bypassKey = [115, 121, 110, 99, 102, 117, 115, 105,\n 111, 110, 46, 105, 115, 76, 105, 99, 86, 97, 108,\n 105, 100, 97, 116, 101, 100];\nvar accountURL;\n/**\n * License validation module\n *\n * @private\n */\nvar LicenseValidator = /** @class */ (function () {\n function LicenseValidator(key) {\n this.isValidated = false;\n this.isLicensed = true;\n this.version = '21.1';\n this.platform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats/i;\n this.errors = {\n noLicense: '<span>This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.</span>',\n trailExpired: '<span>This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.</span>',\n versionMismatched: '<span>The included Syncfusion license key is invalid.</span>',\n platformMismatched: '<span>The included Syncfusion license key is invalid.</span>',\n invalidKey: '<span>The included Syncfusion license key is invalid.</span>'\n };\n /**\n * To manage licensing operation.\n */\n this.manager = (function () {\n var licKey = null;\n /**\n * Sets the license key.\n *\n * @param {string} key - Specifies the license key.\n * @returns {void}\n */\n function set(key) { licKey = key; }\n /**\n * Gets the license key.\n *\n * @returns {string} -Gets the license key.\n */\n function get() { return licKey; }\n return {\n setKey: set,\n getKey: get\n };\n })();\n /**\n * To manage npx licensing operation.\n */\n this.npxManager = (function () {\n var npxLicKey = 'npxKeyReplace';\n /**\n * Gets the license key.\n *\n * @returns {string} - Gets the license key.\n */\n function get() { return npxLicKey; }\n return {\n getKey: get\n };\n })();\n this.manager.setKey(key);\n }\n /**\n * To validate the provided license key.\n */\n LicenseValidator.prototype.validate = function () {\n var contentKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 108, 105, 99, 101, 110, 115, 101, 67, 111, 110, 116, 101, 110, 116];\n var URLKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 99, 108, 97, 105, 109, 65, 99, 99, 111, 117, 110, 116, 85, 82, 76];\n if (!this.isValidated && (containerObject && !getValue(convertToChar(bypassKey), containerObject) && !getValue('Blazor', containerObject))) {\n var validateMsg = void 0;\n var validateURL = void 0;\n if ((this.manager && this.manager.getKey()) || (this.npxManager && this.npxManager.getKey() !== 'npxKeyReplace')) {\n var result = this.getInfoFromKey();\n if (result && result.length) {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n if (!this.platform.test(res.platform) || res.invalidPlatform) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (res.version.indexOf(this.version) === -1) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else if (res.expiryDate) {\n var expDate = new Date(res.expiryDate);\n var currDate = new Date();\n if (expDate !== currDate && expDate < currDate) {\n validateMsg = this.errors.trailExpired;\n }\n else {\n break;\n }\n }\n }\n }\n else {\n validateMsg = this.errors.invalidKey;\n }\n }\n else {\n var licenseContent = getValue(convertToChar(contentKey), containerObject);\n validateURL = getValue(convertToChar(URLKey), containerObject);\n if (licenseContent && licenseContent !== '') {\n validateMsg = licenseContent;\n }\n else {\n validateMsg = this.errors.noLicense;\n }\n }\n if (validateMsg && typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n accountURL = (validateURL && validateURL !== '') ? validateURL : \"https://www.syncfusion.com/account/claim-license-key?pl=SmF2YVNjcmlwdA==&vs=MjEuMQ==\";\n var errorDiv = createElement('div', {\n innerHTML: \"<img src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE5OV80KSI+CjxwYXRoIGQ9Ik0xMiAyMUMxNi45NzA2IDIxIDIxIDE2Ljk3MDYgMjEgMTJDMjEgNy4wMjk0NCAxNi45NzA2IDMgMTIgM0M3LjAyOTQ0IDMgMyA3LjAyOTQ0IDMgMTJDMyAxNi45NzA2IDcuMDI5NDQgMjEgMTIgMjFaIiBzdHJva2U9IiM3MzczNzMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMS4yNSAxMS4yNUgxMlYxNi41SDEyLjc1IiBmaWxsPSIjNjE2MDYzIi8+CjxwYXRoIGQ9Ik0xMS4yNSAxMS4yNUgxMlYxNi41SDEyLjc1IiBzdHJva2U9IiM3MzczNzMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMS44MTI1IDlDMTIuNDMzOCA5IDEyLjkzNzUgOC40OTYzMiAxMi45Mzc1IDcuODc1QzEyLjkzNzUgNy4yNTM2OCAxMi40MzM4IDYuNzUgMTEuODEyNSA2Ljc1QzExLjE5MTIgNi43NSAxMC42ODc1IDcuMjUzNjggMTAuNjg3NSA3Ljg3NUMxMC42ODc1IDguNDk2MzIgMTEuMTkxMiA5IDExLjgxMjUgOVoiIGZpbGw9IiM3MzczNzMiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xOTlfNCI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K' style=\\\"top: 6px;\\n position: absolute;\\n left: 16px;\\n width: 24px;\\n height: 24px;\\\"/>\" + validateMsg + ' ' + '<a style=\"text-decoration: none;color: #0D6EFD;font-weight: 500;\" href=' + accountURL + '>Claim your free account</a>'\n });\n errorDiv.setAttribute('style', \"position: fixed;\\n top: 10px;\\n left: 10px;\\n right: 10px;\\n font-size: 14px;\\n background: #EEF2FF;\\n color: #222222;\\n z-index: 999999999;\\n text-align: left;\\n border: 1px solid #EEEEEE;\\n padding: 10px 11px 10px 50px;\\n border-radius: 8px;\\n font-family: Helvetica Neue, Helvetica, Arial;\");\n document.body.appendChild(errorDiv);\n this.isLicensed = false;\n }\n this.isValidated = true;\n setValue(convertToChar(bypassKey), this.isValidated, containerObject);\n }\n return this.isLicensed;\n };\n LicenseValidator.prototype.getDecryptedData = function (key) {\n try {\n return atob(key);\n }\n catch (error) {\n return '';\n }\n };\n /**\n * Get license information from key.\n *\n * @returns {IValidator} - Get license information from key.\n */\n LicenseValidator.prototype.getInfoFromKey = function () {\n try {\n var licKey = '';\n var pkey = [5439488, 7929856, 5111808, 6488064, 4587520, 7667712, 5439488,\n 6881280, 5177344, 7208960, 4194304, 4456448, 6619136, 7733248, 5242880, 7077888,\n 6356992, 7602176, 4587520, 7274496, 7471104, 7143424];\n var decryptedStr = [];\n var resultArray = [];\n var invalidPlatform = false;\n var isNpxKey = false;\n if (this.manager.getKey()) {\n licKey = this.manager.getKey();\n }\n else {\n isNpxKey = true;\n licKey = this.npxManager.getKey().split('npxKeyReplace')[1];\n }\n var licKeySplit = licKey.split(';');\n for (var _i = 0, licKeySplit_1 = licKeySplit; _i < licKeySplit_1.length; _i++) {\n var lKey = licKeySplit_1[_i];\n var decodeStr = this.getDecryptedData(lKey);\n if (!decodeStr) {\n continue;\n }\n var k = 0;\n var buffr = '';\n if (!isNpxKey) {\n for (var i = 0; i < decodeStr.length; i++, k++) {\n if (k === pkey.length) {\n k = 0;\n }\n var c = decodeStr.charCodeAt(i);\n buffr += String.fromCharCode(c ^ (pkey[parseInt(k.toString(), 10)] >> 16));\n }\n }\n else {\n var charKey = decodeStr[decodeStr.length - 1];\n var decryptedKey = [];\n for (var i = 0; i < decodeStr.length; i++) {\n decryptedKey[parseInt(i.toString(), 10)] = decodeStr[parseInt(i.toString(), 10)].charCodeAt(0) - charKey.charCodeAt(0);\n }\n for (var i = 0; i < decryptedKey.length; i++) {\n buffr += String.fromCharCode(decryptedKey[parseInt(i.toString(), 10)]);\n }\n }\n if (this.platform.test(buffr)) {\n decryptedStr = buffr.split(';');\n invalidPlatform = false;\n // checked the length to verify the key in proper strucutre\n if (decryptedStr.length > 3) {\n resultArray.push({ platform: decryptedStr[0],\n version: decryptedStr[1],\n expiryDate: decryptedStr[2] });\n }\n }\n else if (buffr && buffr.split(';').length > 3) {\n invalidPlatform = true;\n }\n }\n if (invalidPlatform && !resultArray.length) {\n return [{ invalidPlatform: invalidPlatform }];\n }\n else {\n return resultArray.length ? resultArray : null;\n }\n }\n catch (error) {\n return null;\n }\n };\n return LicenseValidator;\n}());\nvar licenseValidator = new LicenseValidator();\n/**\n * Converts the given number to characters.\n *\n * @param {number} cArr - Specifies the license key as number.\n * @returns {string}\n */\nfunction convertToChar(cArr) {\n var ret = '';\n for (var _i = 0, cArr_1 = cArr; _i < cArr_1.length; _i++) {\n var arr = cArr_1[_i];\n ret += String.fromCharCode(arr);\n }\n return ret;\n}\n/**\n * To set license key.\n *\n * @param {string} key - license key\n * @returns {void}\n */\nexport function registerLicense(key) {\n licenseValidator = new LicenseValidator(key);\n}\nexport var validateLicense = function (key) {\n if (key) {\n registerLicense(key);\n }\n return licenseValidator.validate();\n};\nexport var getVersion = function () {\n return licenseValidator.version;\n};\n// Method for create overlay over the sample\nexport var createLicenseOverlay = function () {\n var bannerTemplate = \"\\n <div style=\\\"\\n position: fixed;\\n width: 100%;\\n height: 100%;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background-color: rgba(0, 0, 0, 0.5);\\n z-index: 99999;\\n \\\">\\n <div style=\\\"\\n background: #FFFFFF;\\n height: 455px;\\n width: 840px;\\n font-family: Helvetica Neue, Helvetica, Arial;\\n color: #000000;\\n box-shadow: 0px 4.8px 14.4px rgb(0 0 0 / 18%), 0px 25.6px 57.6px rgb(0 0 0 / 22%);\\n display: block;\\n margin: 8% auto;\\n border-radius: 20px;\\n \\\">\\n <div style=\\\"\\n position: absolute;\\nwidth: 838px;\\nheight: 62px;\\nbackground-color: #F9F9F9;\\nborder: 1px solid #EEEEEE;\\nborder-top-left-radius: 20px;\\nborder-top-right-radius: 20px;\\n\\\">\\n <img src=\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ2IiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMTQ2IDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDAuNTk2NSAxNS4wMDc4SDMyLjQyNUMzMS41NTU3IDE1LjAwNzggMzAuOTAzNyAxNS4xODEyIDMwLjUxMjUgMTUuNDg0NkMzMC4xMjEzIDE1LjgzMTQgMjkuOTA0IDE2LjMwODIgMjkuOTA0IDE3LjA0NTFDMjkuOTA0IDE3LjYwODYgMzAuMDc3OCAxOC4wNDIxIDMwLjQyNTYgMTguMzAyMkMzMC43NzMzIDE4LjYwNTYgMzEuMjk0OSAxOC43MzU2IDMxLjk5MDMgMTguNzM1NkgzNi4zMzY5QzM4LjExODkgMTguNzM1NiAzOS40MjI5IDE5LjA4MjQgNDAuMTYxOCAxOS43MzI2QzQwLjk0NDIgMjAuNDI2MiA0MS4yOTE5IDIxLjU1MzIgNDEuMjkxOSAyMy4xMTM3QzQxLjI5MTkgMjQuNzE3NiA0MC44NTcyIDI1Ljg4OCAzOS45ODc5IDI2LjY2ODJDMzkuMTE4NiAyNy40MDUxIDM3LjcyNzcgMjcuNzk1MyAzNS44NTg3IDI3Ljc5NTNIMjcuMDc4N1YyNS4wMjFIMzUuMzM3MkMzNi4yOTM0IDI1LjAyMSAzNi45NDU0IDI0Ljg5MSAzNy4zMzY2IDI0LjYzMDlDMzcuNzI3NyAyNC4zNzA4IDM3LjkwMTYgMjMuODk0IDM3LjkwMTYgMjMuMjg3MUMzNy45MDE2IDIyLjYzNjkgMzcuNzI3NyAyMi4xNjAxIDM3LjM4IDIxLjlDMzcuMDMyMyAyMS42Mzk5IDM2LjQyMzggMjEuNDY2NSAzNS41NTQ1IDIxLjQ2NjVIMzEuNjQyNkMyOS44NjA1IDIxLjQ2NjUgMjguNTEzMSAyMS4xMTk4IDI3LjY4NzMgMjAuMzgyOEMyNi44NjE0IDE5LjY0NTkgMjYuNDI2OCAxOC41MTg5IDI2LjQyNjggMTcuMDAxN0MyNi40MjY4IDE1LjM1NDUgMjYuODYxNCAxNC4xNDA4IDI3LjczMDcgMTMuMzYwNkMyOC42IDEyLjU4MDMgMjkuOTkwOSAxMi4yMzM1IDMxLjkwMzQgMTIuMjMzNUg0MC41OTY1VjE1LjAwNzhaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik00OC4wNzI3IDI1LjI4MTFINTAuNTA2OFYxNi4zOTQ5SDUzLjU0OTNWMjcuNTM1MkM1My41NDkzIDI5LjA1MjQgNTMuMjAxNiAzMC4xNzk0IDUyLjUwNjIgMzAuOTE2M0M1MS44MTA3IDMxLjY1MzIgNTAuNzI0MSAzMiA0OS4yNDYzIDMySDQzLjMzNVYyOS42NTkySDQ4LjcyNDdDNDkuMjg5NyAyOS42NTkyIDQ5Ljc2NzkgMjkuNTI5MiA1MC4wNzIxIDI5LjIyNThDNTAuMzc2NCAyOC45NjU3IDUwLjU1MDIgMjguNTMyMiA1MC41NTAyIDI4LjAxMlYyNy44Mzg2SDQ3Ljg5ODlDNDYuMjAzNyAyNy44Mzg2IDQ0Ljk0MzIgMjcuNDkxOSA0NC4yNDc4IDI2Ljg0MTZDNDMuNTA4OSAyNi4xNDgxIDQzLjE2MTEgMjUuMDY0NCA0My4xNjExIDIzLjQ2MDVWMTYuMzk0OUg0Ni4xNjAyVjIzLjIwMDVDNDYuMTYwMiAyNC4wNjc0IDQ2LjI5MDYgMjQuNjMwOSA0Ni41NTE0IDI0Ljg5MUM0Ni43MjUzIDI1LjE1MTEgNDcuMjQ2OSAyNS4yODExIDQ4LjA3MjcgMjUuMjgxMVoiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTU1Ljg5NjUgMTYuMzk0OUg2MS41OTA0QzYzLjMyOTEgMTYuMzk0OSA2NC41NDYxIDE2LjY5ODMgNjUuMjg1IDE3LjM0ODVDNjYuMDIzOSAxNy45OTg4IDY2LjM3MTYgMTkuMDgyNCA2Ni4zNzE2IDIwLjU1NjNWMjcuNzk1M0g2My4zMjkxVjIwLjk0NjRDNjMuMzI5MSAyMC4wNzk0IDYzLjE5ODcgMTkuNTE1OSA2Mi45Mzc5IDE5LjI5OTJDNjIuNjc3MSAxOS4wMzkxIDYyLjE1NTUgMTguOTA5MSA2MS4zMjk3IDE4LjkwOTFINTguODk1NlYyNy44Mzg2SDU1Ljg1M1YxNi4zOTQ5SDU1Ljg5NjVaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03NC45MzQyIDI1LjM2NzhINzguMTUwNlYyNy43OTUySDc0LjAyMTRDNzIuOTc4MiAyNy43OTUyIDcyLjEwODkgMjcuNjY1MiA3MS40NTcgMjcuNDkxOEM3MC44MDUgMjcuMjc1IDcwLjE5NjUgMjYuOTI4MyA2OS43MTgzIDI2LjQ1MTRDNjkuMTk2OCAyNS45MzEzIDY4Ljc2MjEgMjUuMjgxMSA2OC40NTc4IDI0LjU0NDJDNjguMTUzNiAyMy44MDcyIDY4LjAyMzIgMjIuOTgzNiA2OC4wMjMyIDIyLjE2QzY4LjAyMzIgMjEuMjkzMSA2OC4xNTM2IDIwLjQ2OTUgNjguNDU3OCAxOS42ODkyQzY4Ljc2MjEgMTguOTA5IDY5LjE1MzMgMTguMzAyMSA2OS43MTgzIDE3Ljc4MTlDNzAuMjM5OSAxNy4zMDUxIDcwLjgwNSAxNi45NTgzIDcxLjUwMDQgMTYuNzQxNkM3Mi4xOTU5IDE2LjUyNDkgNzMuMDIxNyAxNi40MzgyIDc0LjA2NDkgMTYuNDM4Mkg3OC4xOTQxVjE4LjkwOUg3NC45MzQyQzczLjQ5OTggMTguOTA5IDcyLjU0MzYgMTkuMTY5MSA3MS45Nzg1IDE5LjY0NTlDNzEuNDU2OSAyMC4xMjI3IDcxLjE1MjcgMjAuOTg5NyA3MS4xNTI3IDIyLjIwMzRDNzEuMTUyNyAyMi44OTY5IDcxLjI4MzEgMjMuNDYwNSA3MS41MDA0IDIzLjkzNzNDNzEuNzE3NyAyNC40MTQxIDcyLjA2NTUgMjQuNzYwOSA3Mi41MDAxIDI1LjA2NDNDNzIuNzE3NCAyNS4xOTQ0IDcyLjk3ODIgMjUuMjgxMSA3My4yODI1IDI1LjM2NzhDNzMuNjMwMiAyNS4zMjQ0IDc0LjE1MTggMjUuMzY3OCA3NC45MzQyIDI1LjM2NzhaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik04MC44NDU2IDE4LjY0ODlINzguNjcyNFYxNi4zNTE1SDgwLjg0NTZWMTUuMTgxMUM4MC44NDU2IDE0LjAxMDggODEuMDYzIDEzLjIzMDUgODEuNDk3NiAxMi44NDA0QzgxLjkzMjMgMTIuNDUwMyA4Mi43NTgxIDEyLjIzMzUgODMuOTc1MSAxMi4yMzM1SDg2Ljg0MzhWMTQuNDAwOUg4NS40MDk1Qzg0Ljg4NzkgMTQuNDAwOSA4NC41NDAyIDE0LjQ4NzYgODQuMzIyOSAxNC42NjFDODQuMTA1NSAxNC44MzQ0IDgzLjk3NTEgMTUuMDk0NSA4My45NzUxIDE1LjQ0MTJWMTYuMzUxNUg4Ni44NDM4VjE4LjY0ODlIODMuOTc1MVYyNy43OTUzSDgwLjg0NTZWMTguNjQ4OVoiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTk4LjQwNTYgMjcuNzk1M0g5Mi43MTE2QzkxLjAxNjUgMjcuNzk1MyA4OS44NDI5IDI3LjQ0ODUgODkuMDYwNSAyNi43OTgzQzg4LjMyMTYgMjYuMTQ4MSA4Ny45MzA0IDI1LjA2NDQgODcuOTMwNCAyMy41OTA2VjE2LjM5NDlIOTAuOTI5NVYyMy40MTcyQzkwLjkyOTUgMjQuMTk3NCA5MS4wNTk5IDI0LjY3NDMgOTEuMzIwNyAyNC45MzQ0QzkxLjU4MTUgMjUuMTk0NCA5Mi4xMDMxIDI1LjMyNDUgOTIuOTI4OSAyNS4zMjQ1SDk1LjM2M1YxNi4zOTQ5SDk4LjQwNTZWMjcuNzk1M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTEwMC42MjIgMjUuNDExMkgxMDcuMDExQzEwNy41NzcgMjUuNDExMiAxMDguMDExIDI1LjMyNDUgMTA4LjI3MiAyNS4xNTExQzEwOC41MzMgMjQuOTc3NyAxMDguNjYzIDI0LjY3NDMgMTA4LjY2MyAyNC4zMjc1QzEwOC42NjMgMjMuOTM3NCAxMDguNTMzIDIzLjY3NzMgMTA4LjI3MiAyMy40NjA1QzEwOC4wMTEgMjMuMjg3MSAxMDcuNTc3IDIzLjIwMDUgMTA3LjA1NSAyMy4yMDA1SDEwNC40NDdDMTAyLjg4MiAyMy4yMDA1IDEwMS44MzkgMjIuOTgzNyAxMDEuMzE4IDIyLjUwNjlDMTAwLjc1MiAyMi4wMzAxIDEwMC40OTIgMjEuMjA2NSAxMDAuNDkyIDE5Ljk5MjdDMTAwLjQ5MiAxOC43NzkgMTAwLjgzOSAxNy44Njg3IDEwMS40OTEgMTcuMjYxOEMxMDIuMTQzIDE2LjY5ODMgMTAzLjE4NyAxNi4zOTQ5IDEwNC41MzQgMTYuMzk0OUgxMTEuMDU0VjE4Ljc3OUgxMDUuNzA4QzEwNC44MzggMTguNzc5IDEwNC4yNzMgMTguODY1NyAxMDQuMDEyIDE4Ljk5NTdDMTAzLjc1MiAxOS4xNjkxIDEwMy42MjEgMTkuNDI5MiAxMDMuNjIxIDE5LjgxOTRDMTAzLjYyMSAyMC4xNjYxIDEwMy43NTIgMjAuNDI2MiAxMDMuOTY5IDIwLjU5OTZDMTA0LjE4NiAyMC43NzMgMTA0LjU3NyAyMC44NTk3IDEwNS4wNTYgMjAuODU5N0gxMDcuNzk0QzEwOS4wNTQgMjAuODU5NyAxMTAuMDExIDIxLjE2MzEgMTEwLjY2MyAyMS43MjY2QzExMS4zMTUgMjIuMjkwMiAxMTEuNjYyIDIzLjE1NzEgMTExLjY2MiAyNC4yNDA4QzExMS42NjIgMjUuMjgxMSAxMTEuMzU4IDI2LjE0ODEgMTEwLjc5MyAyNi43OTgzQzExMC4yMjggMjcuNDQ4NSAxMDkuNDQ2IDI3Ljc5NTMgMTA4LjUzMyAyNy43OTUzSDEwMC43MDlWMjUuNDExMkgxMDAuNjIyWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTE2LjU3NCAxNS4wOTQ0SDExMy40MDFWMTIuMjc2OUgxMTYuNTc0VjE1LjA5NDRaTTExNi41NzQgMjcuNzk1M0gxMTMuNDAxVjE2LjM5NDlIMTE2LjU3NFYyNy43OTUzWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTMwLjMwOSAyMi4xMTY3QzEzMC4zMDkgMjMuODkzOSAxMjkuNzQ0IDI1LjMyNDQgMTI4LjY1NyAyNi40MDgxQzEyNy41NzEgMjcuNDkxOCAxMjYuMDkzIDI4LjAxMiAxMjQuMjI0IDI4LjAxMkMxMjIuMzU1IDI4LjAxMiAxMjAuODc3IDI3LjQ5MTggMTE5Ljc5IDI2LjQwODFDMTE4LjcwNCAyNS4zMjQ0IDExOC4xMzkgMjMuODkzOSAxMTguMTM5IDIyLjExNjdDMTE4LjEzOSAyMC4zMzk0IDExOC43MDQgMTguOTA5IDExOS43OSAxNy44MjUzQzEyMC44NzcgMTYuNzQxNiAxMjIuMzk4IDE2LjIyMTQgMTI0LjIyNCAxNi4yMjE0QzEyNi4wNDkgMTYuMjIxNCAxMjcuNTI3IDE2Ljc0MTYgMTI4LjY1NyAxNy44MjUzQzEyOS43NDQgMTguODY1NiAxMzAuMzA5IDIwLjI5NjEgMTMwLjMwOSAyMi4xMTY3Wk0xMjEuMjY4IDIyLjExNjdDMTIxLjI2OCAyMy4yMDA0IDEyMS41MjkgMjQuMDY3MyAxMjIuMDUxIDI0LjY3NDJDMTIyLjU3MiAyNS4yODExIDEyMy4yNjggMjUuNTg0NSAxMjQuMTggMjUuNTg0NUMxMjUuMDkzIDI1LjU4NDUgMTI1Ljc4OSAyNS4yODExIDEyNi4zMSAyNC42NzQyQzEyNi44MzIgMjQuMDY3MyAxMjcuMDkzIDIzLjIwMDQgMTI3LjA5MyAyMi4xMTY3QzEyNy4wOTMgMjEuMDMzIDEyNi44MzIgMjAuMTY2MSAxMjYuMzEgMTkuNjAyNUMxMjUuNzg5IDE4Ljk5NTcgMTI1LjA5MyAxOC42OTIyIDEyNC4xMzcgMTguNjkyMkMxMjMuMjI0IDE4LjY5MjIgMTIyLjUyOSAxOC45OTU3IDEyMi4wMDcgMTkuNjAyNUMxMjEuNTI5IDIwLjE2NjEgMTIxLjI2OCAyMS4wMzMgMTIxLjI2OCAyMi4xMTY3WiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTMxLjc4NyAxNi4zOTQ5SDEzNy40ODFDMTM5LjIxOSAxNi4zOTQ5IDE0MC40MzYgMTYuNjk4MyAxNDEuMTc1IDE3LjM0ODVDMTQxLjkxNCAxNy45OTg4IDE0Mi4yNjIgMTkuMDgyNCAxNDIuMjYyIDIwLjU1NjNWMjcuNzk1M0gxMzkuMjE5VjIwLjk0NjRDMTM5LjIxOSAyMC4wNzk0IDEzOS4wODkgMTkuNTE1OSAxMzguODI4IDE5LjI5OTJDMTM4LjU2NyAxOS4wMzkxIDEzOC4wNDYgMTguOTA5MSAxMzcuMjIgMTguOTA5MUgxMzQuNzg2VjI3LjgzODZIMTMxLjc0M1YxNi4zOTQ5SDEzMS43ODdaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03LjEyODMxIDMuNzM3NDNIMFYxMC44NDY0SDcuMTI4MzFWMy43Mzc0M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTIzLjI1MTMgLTIuMTU3MjVlLTA1TDE4LjU1MTMgNS41MTY4NUwyNC4wODMxIDEwLjIwNDFMMjguNzgzMSA0LjY4NzI1TDIzLjI1MTMgLTIuMTU3MjVlLTA1WiIgZmlsbD0iI0ZGODYwMCIvPgo8cGF0aCBkPSJNMTUuNjA0MSAzLjczNzQzSDguNDc1ODNWMTAuODQ2NEgxNS42MDQxVjMuNzM3NDNaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03LjEyODMxIDEyLjE5MDJIMFYxOS4yOTkySDcuMTI4MzFWMTIuMTkwMloiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTE1LjYwNDEgMTIuMTkwMkg4LjQ3NTgzVjE5LjI5OTJIMTUuNjA0MVYxMi4xOTAyWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMjQuMDc5NyAxMi4xOTAySDE2Ljk1MTRWMTkuMjk5MkgyNC4wNzk3VjEyLjE5MDJaIiBmaWxsPSIjRkY4NjAwIi8+CjxwYXRoIGQ9Ik03LjEyODMxIDIwLjY4NjNIMFYyNy43OTUzSDcuMTI4MzFWMjAuNjg2M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTE1LjYwNDEgMjAuNjg2M0g4LjQ3NTgzVjI3Ljc5NTNIMTUuNjA0MVYyMC42ODYzWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMjQuMTIzMiAyMC42ODYzSDE2Ljk5NDlWMjcuNzk1M0gyNC4xMjMyVjIwLjY4NjNaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik0xNDYgMTUuODMxM0MxNDYgMTYuODcxNyAxNDUuMTc0IDE3LjY5NTMgMTQ0LjEzMSAxNy42OTUzQzE0My4wODggMTcuNjk1MyAxNDIuMjYyIDE2Ljg3MTcgMTQyLjI2MiAxNS44MzEzQzE0Mi4yNjIgMTQuNzkxIDE0My4wODggMTQuMDEwNyAxNDQuMTMxIDE0LjAxMDdDMTQ1LjEzMSAxMy45Njc0IDE0NiAxNC43OTEgMTQ2IDE1LjgzMTNaTTE0Mi45NTcgMTQuNzkxQzE0Mi42OTcgMTUuMDUxMSAxNDIuNTY2IDE1LjQ0MTIgMTQyLjU2NiAxNS44MzEzQzE0Mi41NjYgMTYuNjk4MyAxNDMuMjYyIDE3LjM5MTggMTQ0LjEzMSAxNy4zOTE4QzE0NSAxNy4zOTE4IDE0NS42OTYgMTYuNjk4MyAxNDUuNjk2IDE1LjgzMTNDMTQ1LjY5NiAxNS4wMDc3IDE0NSAxNC4yNzA4IDE0NC4xNzQgMTQuMjcwOEMxNDMuNjUzIDE0LjI3MDggMTQzLjI2MiAxNC40NDQyIDE0Mi45NTcgMTQuNzkxWk0xNDQuODcgMTYuOTE1SDE0NC40NzlMMTQzLjkxNCAxNi4wOTE0VjE2LjkxNUgxNDMuNjA5VjE0Ljc0NzZIMTQzLjk1N0MxNDQuNDM1IDE0Ljc0NzYgMTQ0LjY1MyAxNC45NjQ0IDE0NC42NTMgMTUuMzU0NUMxNDQuNjUzIDE1LjY1NzkgMTQ0LjQ3OSAxNS44NzQ3IDE0NC4xNzQgMTUuOTYxNEwxNDQuODcgMTYuOTE1Wk0xNDQuMDQ0IDE1LjY1NzlDMTQ0LjI2MSAxNS42NTc5IDE0NC4zOTIgMTUuNTI3OSAxNDQuMzkyIDE1LjM1NDVDMTQ0LjM5MiAxNS4xMzc4IDE0NC4yNjEgMTUuMDUxMSAxNDQuMDAxIDE1LjA1MTFIMTQzLjkxNFYxNS42NTc5SDE0NC4wNDRaIiBmaWxsPSIjMzU0M0E4Ii8+Cjwvc3ZnPgo=\\\" style=\\\"\\n text-align: left;\\n width: 146px;\\n position: absolute;\\n top: 14px;\\n left: 31px;\\n\\\">\\n </div>\\n <div style=\\\"\\n position: relative;\\n top: 80px;\\n left: 32px;\\n font-size: 20px;\\n text-align: left;\\n font-weight: 700;\\n letter-spacing: 0.02em;\\n font-style: normal;\\n line-height: 125%;\\n \\\">Claim your FREE account and get a key in less than a minute</div>\\n <ul style=\\\"\\n font-size: 15px;\\n font-weight: 400;\\n color: #333333;\\n letter-spacing: 0.01em;\\n position: relative;\\n left: 32px;\\n top: 88px;\\n line-height: 180%;\\n \\\">\\n <li><span>Access to a 30-day free trial of any of our products.</span></li>\\n <li><span>Access to 24x5 support by developers via the <a href=\\\"https://support.syncfusion.com/create\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">support tickets</a>, <a href=\\\"https://www.syncfusion.com/forums\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">forum</a>, <a href=\\\"https://www.syncfusion.com/feedback\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">feature & feedback page</a> and chat.</span></li>\\n <li><span>200+ <a href=\\\"https://www.syncfusion.com/succinctly-free-ebooks\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">ebooks </a>on the latest technologies, industry trends, and research topics.</span>\\n </li>\\n <li><span>Largest collection of over 7,000 flat and wireframe icons for free with Syncfusion <a href=\\\"https://www.syncfusion.com/succinctly-free-ebooks\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">Metro Studio.</a></span></li>\\n <li><span>Free and unlimited access to Syncfusion technical <a href=\\\"https://www.syncfusion.com/blogs/\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">blogs</a> and <a href=\\\"https://www.syncfusion.com/resources/techportal/whitepapers\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">whitepapers.</a></span></li>\\n </ul>\\n <div style=\\\"\\n font-size: 18px;\\n font-weight: 700;\\n position: relative;\\n line-height: 125%;\\n letter-spacing: 0.02em;\\n top: 90px;\\n left: 32px;\\n \\\">Syncfusion is trusted by 29,000+ businesses worldwide</div>\\n <img src=\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODIwIiBoZWlnaHQ9IjU2IiB2aWV3Qm94PSIwIDAgODIwIDU2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MjcuNjE3IDIyLjU2NTlWMjQuNzIyNkM0MjYuNTU4IDI0LjM2MzggNDI1LjM5OCAyNC4xNTQ0IDQyNC40NzQgMjQuMTU0NEM0MjMuMzMzIDI0LjE1NDQgNDIyLjY5OCAyNC40OTEyIDQyMi42OTggMjUuMDk2M0M0MjIuNjk4IDI1LjQ4MjQgNDIyLjk3NiAyNS43MzgzIDQyMy43NzMgMjYuMDg1NEw0MjUuOTE3IDI3LjAxNzRDNDI3LjYzMyAyNy43NjM5IDQyOC40OTcgMjguODUzIDQyOC40OTcgMzAuMjY4MUM0MjguNDk3IDMyLjQ1MjIgNDI2LjU0NiAzMy44MyA0MjMuNDUyIDMzLjgzQzQyMi4zMjQgMzMuODMgNDIxLjAxOCAzMy42NzM2IDQxOS42MzYgMzMuMzcwOVYzMS4xNDE2QzQyMS4wMDYgMzEuNTAyOCA0MjIuMjYyIDMxLjY5NTcgNDIzLjIzOSAzMS42OTU3QzQyNC41MTggMzEuNjk1NyA0MjUuMjAzIDMxLjM1MDYgNDI1LjIwMyAzMC43MDc0QzQyNS4yMDMgMzAuMzIwOCA0MjQuOTM1IDMwLjAzNjcgNDI0LjMyMiAyOS43NzE3TDQyMS45NzUgMjguNzU5M0M0MjAuMjM2IDI4LjAwNzggNDE5LjQzMyAyNi45OTU0IDQxOS40MzMgMjUuNTUyMUM0MTkuNDMzIDIzLjQ4MzcgNDIxLjMxNCAyMi4xNjQ5IDQyNC4yNjUgMjIuMTY0OUM0MjUuMjk4IDIyLjE2NDkgNDI2LjU3IDIyLjMxNzEgNDI3LjYxNyAyMi41NjU5VjIyLjU2NTlaTTQzMC4xNjcgMjIuMzkwOUg0MzMuNjM1VjMzLjYwMzlINDMwLjE2N1YyMi4zOTA5Wk00NDQuOTExIDIyLjM5MDlWMjQuNDQ1MUg0MzkuNjc1VjI2Ljk3NDJINDQ0LjI0OVYyOC44MzIzSDQzOS42NzVWMzEuNDU0M0g0NDQuOTc4VjMzLjYwMzlINDM2LjMwNVYyMi4zOTA5SDQ0NC45MTFaTTQ2MS4yOTQgMjIuMzkwOVYzMy42MDM5SDQ1Ny45MzlWMjYuMjIzNkw0NTQuNjUyIDMzLjY5MTVINDUyLjUzMUw0NDkuMjY2IDI2LjIyMzZWMzMuNjAzOUg0NDYuOTQ5VjIyLjM5MDlINDUxLjE4NEw0NTQuMTc4IDI5LjIxMTRMNDU3LjE1NiAyMi4zOTA5SDQ2MS4yOTRWMjIuMzkwOVpNNDcyLjU3OSAyMi4zOTA5VjI0LjQ0NTFINDY3LjMzNVYyNi45NzQySDQ3MS45MDhWMjguODMyM0g0NjcuMzM1VjMxLjQ1NDNINDcyLjYzOFYzMy42MDM5SDQ2My45NTdWMjIuMzkwOUg0NzIuNTc5Wk00ODQuNzk0IDIyLjM5MDlWMzMuNjAzOUg0ODEuMDkzTDQ3Ni45MjYgMjYuNDEyM1YzMy42MDM5SDQ3NC42MDhWMjIuMzkwOUg0NzguNDA3TDQ4Mi40ODQgMjkuNDg3NlYyMi4zOTA5SDQ4NC43OTRaTTQ5NC44NTggMjIuNTY1OVYyNC43MjI2QzQ5My44MDcgMjQuMzY2MyA0OTIuNjQgMjQuMTU0NCA0OTEuNzMyIDI0LjE1NDRDNDkwLjU3MyAyNC4xNTQ0IDQ4OS45MzkgMjQuNDg1OCA0ODkuOTM5IDI1LjA5M0M0ODkuOTM5IDI1LjQ4ODYgNDkwLjE5OCAyNS43MjUgNDkxLjAyMyAyNi4wODU5TDQ5My4xNTcgMjcuMDE3OEM0OTQuODg1IDI3Ljc3MjIgNDk1LjczOSAyOC44NTE4IDQ5NS43MzkgMzAuMjgzNUM0OTUuNzM5IDMyLjQ1NTkgNDkzLjc4NiAzMy44MzA4IDQ5MC42OTkgMzMuODMwOEM0ODkuNTY5IDMzLjgzMDggNDg4LjI1OSAzMy42NzM2IDQ4Ni44NzggMzMuMzcxN1YzMS4xNDI0QzQ4OC4yNDcgMzEuNTAyOCA0ODkuNDk5IDMxLjY5NjUgNDkwLjQ3IDMxLjY5NjVDNDkxLjc0IDMxLjY5NjUgNDkyLjQ0NCAzMS4zNTE1IDQ5Mi40NDQgMzAuNzI4NUM0OTIuNDQ0IDMwLjMxNjMgNDkyLjE5NyAzMC4wNTA0IDQ5MS41NTUgMjkuNzcyNUw0ODkuMjE4IDI4Ljc2MDFDNDg3LjQ2NyAyOC4wMDI4IDQ4Ni42NzQgMjcuMDAyIDQ4Ni42NzQgMjUuNTUzM0M0ODYuNjc0IDIzLjQ4NjIgNDg4LjU1NiAyMi4xNjY1IDQ5MS41IDIyLjE2NjVDNDkyLjUzNiAyMi4xNjUzIDQ5My44MTMgMjIuMzE3MSA0OTQuODU4IDIyLjU2NTlWMjIuNTY1OVoiIGZpbGw9IiMwMEEwQjAiLz4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzUyLjQxMyAyNi44MTlDMzUwLjk5MiAyNS4yNzU5IDM0OS42MzggMjMuODMxNSAzNDguMzQ5IDIyLjE1NzRMMzQ3LjkyIDIxLjU5OTVDMzQ5LjQwNiAyMS4zNjkzIDM1MC42OTUgMjAuMzg0OCAzNTAuNjk1IDE4Ljc0MzNDMzUwLjY5NSAxNy4yMzMxIDM0OS41MzkgMTYuMjQ4MiAzNDcuODIxIDE2LjI0ODJDMzQ2LjU5OCAxNi4yNDgyIDM0NS43MDYgMTYuMzEzNyAzNDUuMjQzIDE2LjMxMzdDMzQ0LjcxNSAxNi4zMTM3IDM0NC4yODUgMTYuMzEzNyAzNDMuNzkgMTYuMjgwOEMzNDMuODU2IDE4LjE1MjEgMzQzLjg4OSAxOC4yODM0IDM0My44ODkgMTkuNDMyMlYyMy42MzQzQzM0My44ODkgMjQuNDU1MyAzNDMuODU2IDI1LjI3NTkgMzQzLjc5IDI2LjgxODZDMzQ0LjE1MyAyNi43MjAyIDM0NC41MTcgMjYuNzIwMiAzNDQuNzgxIDI2LjcyMDJDMzQ1LjA0NSAyNi43MjAyIDM0NS40MDkgMjYuNzUzMSAzNDUuNzA2IDI2LjgxODZDMzQ1LjY0IDI1Ljc2NzkgMzQ1LjYwNyAyNC4wMjgzIDM0NS42MDcgMjMuNjM0M1YyMS4yMDUxQzM0Ny4xNiAyMy4yMDc3IDM0OS4yMDkgMjUuNjY5NSAzNTAuMDAxIDI2LjgxODZDMzUwLjM5OCAyNi43MjAyIDM1MC43MjggMjYuNzIwMiAzNTEuMTI0IDI2LjcyMDJDMzUxLjQ1NSAyNi43MjA2IDM1MS45MTggMjYuNzIwNiAzNTIuNDEzIDI2LjgxOVYyNi44MTlaTTM0OC44NzggMTkuMDA2QzM0OC44NzggMjAuMDIzNCAzNDguMzE3IDIxLjIwNTQgMzQ2Ljc5NyAyMS4yMDU0QzM0Ni40IDIxLjIwNTQgMzQ2LjAwMyAyMS4yMDU0IDM0NS42MDcgMjEuMTcyNVYxNy4wNjg4QzM0Ni4wMDMgMTYuOTcwNCAzNDYuNDk5IDE2LjkwNDYgMzQ2Ljc2MyAxNi45MDQ2QzM0OC4wODUgMTYuOTA0OSAzNDguODc4IDE3LjY2IDM0OC44NzggMTkuMDA2VjE5LjAwNlpNMzgyLjM4IDI2Ljg4NDVDMzgxLjgxOSAyNi4yOTM2IDM4MC45NiAyNS4zNDE3IDM4MC4xMzQgMjQuNDIyM0MzODAuODI4IDIzLjY2NzIgMzgxLjU1NSAyMi41NTEgMzgxLjk4NCAyMS41OTkxQzM4MS43MTkgMjEuNDY3OCAzODEuMzU2IDIxLjIwNTEgMzgxLjA5MiAyMC45NzUzQzM4MC45OTMgMjEuNzk1OSAzODAuNDMyIDIyLjg3OTIgMzc5LjYzOSAyMy44MzE1QzM3OC41MTUgMjIuNTE4NSAzNzguMjE4IDIyLjE1NzQgMzc3LjE5MyAyMC43Nzg1QzM3OC41ODEgMTkuODkyMSAzNzkuMjQyIDE4Ljg3NDMgMzc5LjI0MiAxOC4wNTM3QzM3OS4yNDIgMTcuMTAxNyAzNzguNTgxIDE2LjExNjkgMzc2Ljk2MiAxNi4xMTY5QzM3NS4yMTEgMTYuMTE2OSAzNzQuMzUyIDE3LjIwMDIgMzc0LjM1MiAxOC40ODAzQzM3NC4zNTIgMTkuMjM1NCAzNzQuNTUgMTkuODkxNyAzNzUuMzc2IDIwLjk3NTNDMzc0LjA1NCAyMS42OTc1IDM3Mi43NjYgMjIuNzQ3OSAzNzIuNzY2IDI0LjQyMjNDMzcyLjc2NiAyNi4wNjM5IDM3NC4wODcgMjYuOTE3NCAzNzUuNzA3IDI2LjkxNzRDMzc3LjE5MyAyNi45MTc0IDM3OC4xNTEgMjYuMzI2NiAzNzguOTEyIDI1LjYzNjlMMzc5LjkwMiAyNi44MTlDMzgwLjIgMjYuNzg2MSAzODAuNTMxIDI2LjcyMDYgMzgwLjg2MSAyNi43MjA2QzM4MS4zMjQgMjYuNzIwNiAzODEuODUyIDI2Ljc4NjEgMzgyLjM4IDI2Ljg4NDVWMjYuODg0NVpNMzgzLjM3MiA0MC4wMTU4QzM4MS45MTggMzguNDczIDM4MC41OTcgMzcuMDYxMiAzNzkuMzA4IDM1LjM4NzFMMzc4Ljg3OCAzNC44Mjg4QzM4MC4zMzIgMzQuNTk5MSAzODEuNjU0IDMzLjYxNSAzODEuNjU0IDMxLjk0MDFDMzgxLjY1NCAzMC40NjMyIDM4MC40OTggMjkuNDQ1NCAzNzguNzc5IDI5LjQ0NTRDMzc3LjU1NyAyOS40NDU0IDM3Ni42MzIgMjkuNTQzNSAzNzYuMTY5IDI5LjU0MzVDMzc1LjY3MyAyOS41NDM1IDM3NS4yNDQgMjkuNTQzNSAzNzQuNzQ4IDI5LjQ3NzZDMzc0LjgxNCAzMS4zODIyIDM3NC44NDggMzEuNDgwMiAzNzQuODQ4IDMyLjYyOTRWMzYuODMxMUMzNzQuODQ4IDM3LjY1MjQgMzc0LjgxNCAzOC41MDUyIDM3NC43NDggNDAuMDE1NEMzNzUuMTEyIDM5Ljk0OTYgMzc1LjQ3NSAzOS45NDk2IDM3NS43MDcgMzkuOTQ5NkMzNzYuMDA0IDM5Ljk0OTYgMzc2LjM2OCAzOS45NDk2IDM3Ni42MzIgNDAuMDE1NEMzNzYuNTY1IDM4Ljk5OCAzNzYuNTMzIDM3LjI1ODEgMzc2LjUzMyAzNi44MzExVjM0LjQzNDhDMzc4LjExOSAzNi40MDQyIDM4MC4xNjcgMzguODk5NiAzODAuOTYgNDAuMDE1NEMzODEuMzU2IDM5Ljk0OTYgMzgxLjY4NyAzOS45NDk2IDM4Mi4wODMgMzkuOTQ5NkMzODIuMzggMzkuOTUgMzgyLjg3NiAzOS45NSAzODMuMzcyIDQwLjAxNThaTTM2Mi4xNiAyNi44MTlDMzYwLjk3MSAyNS41NzE1IDM1OC44ODkgMjIuOTc4IDM1OC4wNjMgMjEuOTkzNUwzNTcuMjM3IDIwLjk3NTdDMzU4LjA5NiAxOS45NTgzIDM1OC42OSAxOS4zMzQxIDM1OS4zMTkgMTguNTc5QzM2MC4wNDUgMTcuNzkxIDM2MC43MDYgMTYuOTcwNCAzNjEuNDk5IDE2LjI0ODJDMzYxLjEzNiAxNi4zMTM3IDM2MC45MzcgMTYuMzEzNyAzNjAuNzM5IDE2LjMxMzdDMzYwLjU0MSAxNi4zMTM3IDM2MC4zNDMgMTYuMzEzNyAzNjAuMTQ0IDE2LjI0ODJDMzU5LjkxMyAxNi42MDkzIDM1OS41NSAxNy4wNjg4IDM1OS4xNTMgMTcuNTI4N0MzNTguNzU2IDE3Ljk1NTYgMzU4LjM2IDE4LjM4MjIgMzU4LjA2MyAxOC43NDMzQzM1Ny4yMzYgMTkuNjk1MiAzNTYuNzc0IDIwLjE1NDcgMzU1LjU4NSAyMS4yNzA5VjE5LjQ2NTVDMzU1LjU4NSAxOC40MTUxIDM1NS41ODUgMTcuNzI1NSAzNTUuNjUxIDE2LjI0ODJDMzU1LjMyMSAxNi4zMTM3IDM1NC45NTcgMTYuMzEzNyAzNTQuNzI2IDE2LjMxMzdDMzU0LjQ2MSAxNi4zMTM3IDM1NC4wMzIgMTYuMzEzNyAzNTMuNzY4IDE2LjI0ODJDMzUzLjgzMyAxNy44MjM5IDM1My44NjcgMTguMjgzNCAzNTMuODY3IDE5LjQzMjVWMjMuNjM0N0MzNTMuODY3IDI0LjY4NSAzNTMuODMzIDI1LjMwODggMzUzLjc2OCAyNi44MTlDMzU0LjE2NCAyNi43MjA2IDM1NC40OTUgMjYuNzIwNiAzNTQuNzI2IDI2LjcyMDZDMzU0Ljk1NyAyNi43MjA2IDM1NS4zNTMgMjYuNzUzNSAzNTUuNjUxIDI2LjgxOUMzNTUuNTg1IDI1LjE0NDkgMzU1LjU4NSAyNC4xNTk3IDM1NS41ODUgMjMuNjM0N1YyMS40MzUyQzM1Ni44MDcgMjIuODc5NiAzNTguNjkgMjUuMjQzMyAzNTkuNzQ4IDI2LjgxOUMzNjAuMTMgMjYuNzU2MyAzNjAuNTE3IDI2LjcyMzQgMzYwLjkwNSAyNi43MjA2QzM2MS4yMDIgMjYuNzIwNiAzNjEuNjY1IDI2LjcyMDYgMzYyLjE2IDI2LjgxOVYyNi44MTlaTTM3Mi42MDEgNDAuMDE1OEMzNzIuNTY4IDM5Ljg1MTkgMzcyLjUzNSAzOS43MjA2IDM3Mi41MzUgMzkuNTIzNEMzNzIuNTM1IDM5LjM5MjggMzcyLjU2OCAzOS4yMjgxIDM3Mi42MDEgMzkuMDk2NEMzNzEuMjggMzkuMTI5NyAzNjguOTAxIDM5LjE5NTIgMzY4LjM3MiAzOS4xOTUyVjM0LjY2NDlDMzY5LjY5NCAzNC42NjQ5IDM3MC45ODIgMzQuNjY0OSAzNzIuMjcgMzQuNzk2M0MzNzIuMjM4IDM0LjYzMjQgMzcyLjIwNCAzNC40Njc3IDM3Mi4yMDQgMzQuMzM2NEMzNzIuMjA0IDM0LjIwNTggMzcyLjIwNCAzNC4wNDE5IDM3Mi4yNyAzMy44NDQ3QzM3MS4zNDYgMzMuOTQyOCAzNjkuMTk4IDMzLjk3NiAzNjguMzcyIDMzLjk3NlYzMC4yNjZDMzY5LjgyNiAzMC4yNjYgMzcwLjY4NSAzMC4yNjYgMzcxLjE4IDMwLjI5OTNMMzcyLjUwMiAzMC4zNjUxQzM3Mi40MzYgMzAuMTY3OSAzNzIuNDM2IDMwLjA2OTIgMzcyLjQzNiAyOS45MDUzQzM3Mi40MzYgMjkuNzQxNCAzNzIuNDM2IDI5LjcwODEgMzcyLjUwMiAyOS40NDU4QzM3MS40MTEgMjkuNDc4MyAzNjkuOTI1IDI5LjU0MzggMzY5LjI2NCAyOS41NDM4QzM2OC44MDIgMjkuNTQzOCAzNjcuMzQ4IDI5LjUxMTMgMzY2LjU4NyAyOS40NDU4QzM2Ni42NTQgMzAuMjY2NCAzNjYuNjg2IDMxLjYxMjMgMzY2LjY4NiAzMi41NjQyVjM2Ljg2NTFDMzY2LjY4NiAzNy40ODg1IDM2Ni42MiAzOC43MzU3IDM2Ni41ODcgNDAuMDE2MkMzNjcuNTEzIDM5Ljk1MDMgMzY4LjgwMiAzOS45NTAzIDM2OS4yNjQgMzkuOTUwM0MzNzAuMDI0IDM5Ljk1IDM3MS42NDMgMzkuOTUgMzcyLjYwMSA0MC4wMTU4Wk0zNjQuNjA1IDM5LjEyOTRDMzY0LjQ0IDM4LjgwMDggMzY0LjM0MSAzOC4zMDg4IDM2NC4yNzUgMzguMDQ2MUMzNjIuOTIgMzkuMTYxOSAzNjEuOTk1IDM5LjM5MjQgMzYwLjkzOCAzOS4zOTI0QzM1OC41OTIgMzkuMzkyNCAzNTcuMzM3IDM3LjI5MTMgMzU3LjMzNyAzNC42NjQ5QzM1Ny4zMzcgMzEuNzQzNiAzNTguNzU3IDMwLjAzNjIgMzYxLjE2OSAzMC4wMzYyQzM2Mi40MjUgMzAuMDM2MiAzNjMuNjE0IDMwLjU5NDUgMzY0LjE3NiAzMS4xNTI4QzM2NC4yMDggMzAuODg5OCAzNjQuMzA4IDMwLjM2NDggMzY0LjQ3MyAzMC4wNjg4QzM2My4zMTYgMjkuNTExMyAzNjIuMjU5IDI5LjM0NjYgMzYxLjEwMiAyOS4zNDY2QzM1Ny4yMzcgMjkuMzQ2NiAzNTUuNDUzIDMxLjc0MzYgMzU1LjQ1MyAzNC44Mjg4QzM1NS40NTMgMzguMzA5MSAzNTcuNzk4IDQwLjE0NzEgMzYwLjczOSA0MC4xNDcxQzM2Mi40MjUgNDAuMTQ3MSAzNjMuODEyIDM5LjYyMjIgMzY0LjYwNSAzOS4xMjk0VjM5LjEyOTRaTTM0Mi4zMDMgMjYuODE5QzM0MC41MTkgMjMuNDA0OSAzMzguOCAxOS4xMzczIDMzNy41NzggMTYuMTE2OUgzMzcuMzhDMzM2LjU4NyAxOC4wMjA3IDMzNS4xMzMgMjEuMjcwOSAzMzQuNzM3IDIyLjE4OTlDMzM0LjI3NCAyMy4zMDYxIDMzMy4yNSAyNS41MDU2IDMzMi41ODkgMjYuODE4NkMzMzIuODAzIDI2Ljc1MzggMzMzLjAyNiAyNi43MjA2IDMzMy4yNSAyNi43MjAyQzMzMy40NDggMjYuNzIwMiAzMzMuNjEzIDI2Ljc1MzEgMzMzLjg0NSAyNi44MTg2QzMzNC4xNzUgMjUuOTMyMiAzMzQuNjM4IDI0LjgxNiAzMzUuMTMzIDIzLjYzNDNDMzM1Ljc5NCAyMy42MDE0IDMzNi4zODkgMjMuNTY4OCAzMzYuOTg0IDIzLjU2ODhDMzM3LjYxMiAyMy41Njg4IDMzOC4yNzIgMjMuNjAxNCAzMzguOTMzIDIzLjYzNDNMMzM5LjU5NCAyNS4yMUwzNDAuMjU1IDI2LjgxODZDMzQwLjcxNyAyNi43MjAyIDM0MS4wOCAyNi43MjAyIDM0MS4zMTIgMjYuNzIwMkMzNDEuNjA5IDI2LjcyMDYgMzQxLjg3MyAyNi43MjA2IDM0Mi4zMDMgMjYuODE5VjI2LjgxOVpNMzUzLjYzNiAyOS40NDU0QzM1My40MzggMjkuNTExMyAzNTMuMjczIDI5LjU0MzUgMzUzLjEwNyAyOS41NDM1QzM1Mi45MDkgMjkuNTQzNSAzNTIuNzQ0IDI5LjUxMDkgMzUyLjU0NiAyOS40NDU0QzM1Mi42NDQgMzAuNzU4NCAzNTIuNjc4IDMyLjA3MTQgMzUyLjY3OCAzMy4zNTE5VjM2LjczMzRDMzUyLjE0OSAzNi4yNzM2IDM1MC44NiAzNS4wOTE5IDM0OS4zNzQgMzMuNzEzQzM0Ny44NiAzMi4zMDc0IDM0Ni4zOTQgMzAuODUxMSAzNDQuOTc5IDI5LjM0NjZIMzQ0Ljc0OEMzNDQuNzgxIDMwLjgyNDMgMzQ0LjgxNCAzMi40IDM0NC44MTQgMzMuODExNFYzNS44Nzk5QzM0NC44MTQgMzcuNjUyOCAzNDQuODE0IDM4LjYwNDcgMzQ0LjcxNSA0MC4wMTYyQzM0NC45OCAzOS45NTAzIDM0NS4xMTIgMzkuOTUwMyAzNDUuMzEgMzkuOTUwM0MzNDUuNDQyIDM5Ljk1MDMgMzQ1LjU3NSAzOS45NTAzIDM0NS44MDYgNDAuMDE2MkMzNDUuNzQgMzguNjcwNiAzNDUuNzA3IDM2LjQ3MDggMzQ1LjcwNyAzNS44Nzk5VjMyLjU5NjhDMzQ4LjE4NSAzNC44NjI1IDM1MS4yMjQgMzcuODgyNiAzNTMuNDcxIDQwLjE0NzVIMzUzLjYwM0MzNTMuNjAzIDM4LjkzMjkgMzUzLjUzNyAzNy43MTc5IDM1My41MzcgMzYuNTA0VjM0LjYzMjdDMzUzLjUzNiAzMi40MzI1IDM1My41MzYgMzEuMzQ5MyAzNTMuNjM2IDI5LjQ0NTRaTTM0Mi41NjcgNDAuMDE1OEMzNDIuNTM0IDM5Ljg1MTkgMzQyLjUwMSAzOS43MjA2IDM0Mi41MDEgMzkuNTIzNEMzNDIuNTAxIDM5LjM5MjggMzQyLjUzNCAzOS4yMjgxIDM0Mi41NjcgMzkuMDk2NEMzNDEuMjQ2IDM5LjEyOTcgMzM4Ljg2NyAzOS4xOTUyIDMzOC4zNzEgMzkuMTk1MlYzNC42NjQ5QzMzOS42NiAzNC42NjQ5IDM0MC45NDggMzQuNjY0OSAzNDIuMjM3IDM0Ljc5NjNDMzQyLjIwNCAzNC42MzI0IDM0Mi4xNzEgMzQuNDY3NyAzNDIuMTcxIDM0LjMzNjRDMzQyLjE3MSAzNC4yMDU4IDM0Mi4xNzEgMzQuMDQxOSAzNDIuMjM3IDMzLjg0NDdDMzQxLjMxMiAzMy45NDI4IDMzOS4xOTcgMzMuOTc2IDMzOC4zNzEgMzMuOTc2VjMwLjI2NkMzMzkuNzkyIDMwLjI2NiAzNDAuNjUxIDMwLjI2NiAzNDEuMTc5IDMwLjI5OTNMMzQyLjQ2OCAzMC4zNjUxQzM0Mi40MzUgMzAuMTY3OSAzNDIuNDM1IDMwLjA2OTIgMzQyLjQzNSAyOS45MDUzQzM0Mi40MzUgMjkuNzQxNCAzNDIuNDM1IDI5LjY3NTUgMzQyLjQ2OCAyOS40NDU4QzM0MS4zNzggMjkuNDc4MyAzMzkuODkxIDI5LjU0MzggMzM5LjIzIDI5LjU0MzhDMzM4Ljc2NyAyOS41NDM4IDMzNy4zMTQgMjkuNTExMyAzMzYuNTU0IDI5LjQ0NThDMzM2LjYyIDMwLjI2NjQgMzM2LjY1MyAzMS42MTIzIDMzNi42NTMgMzIuNTY0MlYzNi44NjUxQzMzNi42NTMgMzcuNDg4NSAzMzYuNTg3IDM4LjczNTcgMzM2LjU1NCA0MC4wMTYyQzMzNy41MTIgMzkuOTUwMyAzMzguNzY3IDM5Ljk1MDMgMzM5LjIzIDM5Ljk1MDNDMzM5Ljk5IDM5Ljk1IDM0MS42NDIgMzkuOTUgMzQyLjU2NyA0MC4wMTU4VjQwLjAxNThaTTMzMS4yMDEgMjYuODE5QzMzMC42NzMgMjMuMjQwNiAzMzAuMjEgMTkuNDk4NCAzMjkuODQ3IDE2LjExNjlDMzI5Ljc0OCAxNi4xNDk4IDMyOS43MTQgMTYuMTQ5OCAzMjkuNjQ5IDE2LjExNjlDMzI4Ljk1NSAxNy4zMzE1IDMyOC4xNjIgMTguNjQ0NSAzMjcuNTY3IDE5LjU2MzlDMzI3LjAwNiAyMC40NTAzIDMyNi4zNDUgMjEuNTAwNyAzMjUuNTg1IDIyLjYxNjlDMzIzLjk5OSAyMC41ODE3IDMyMi4zNDcgMTguMDIxMSAzMjEuMjU2IDE2LjExNjlDMzIxLjE5IDE2LjE0OTggMzIxLjE1NyAxNi4xMTY5IDMyMS4wOTEgMTYuMTE2OUMzMjAuNzI4IDE5LjQ5OCAzMjAuMjMyIDIzLjI3MzIgMzE5LjczNiAyNi44MTlDMzIwLjAwMSAyNi43MjA2IDMyMC4xNjYgMjYuNzIwNiAzMjAuMjk4IDI2LjcyMDZDMzIwLjQ5NiAyNi43MjA2IDMyMC42MjggMjYuNzUzNSAzMjAuODU5IDI2LjgxOUMzMjAuOTkyIDI0LjQ1NTMgMzIxLjI1NiAyMi4xMjQ0IDMyMS41NTMgMTkuNjYyM0MzMjIuODQyIDIxLjUzMzYgMzIzLjk2NSAyMy4xNDIyIDMyNS4yMjEgMjQuODQ5M0MzMjYuMjc4IDIzLjIwNzcgMzI3LjM2OCAyMS40MzQ4IDMyOC41NTggMTkuNjI5NEMzMjguODg4IDIyLjE1NyAzMjkuMTg2IDI0LjQ1NTMgMzI5LjM1MSAyNi44MTlDMzI5Ljc4IDI2LjcyMDYgMzMwLjA3OCAyNi43MjA2IDMzMC4yNzYgMjYuNzIwNkMzMzAuNTQgMjYuNzIwNiAzMzAuODA1IDI2LjcyMDYgMzMxLjIwMSAyNi44MTlWMjYuODE5Wk0zMzQuOTY4IDMyLjIwMjhDMzM0Ljk2OCAzMC4yOTg5IDMzMy40NDggMjkuNDQ1NCAzMzEuNTk4IDI5LjQ0NTRDMzMwLjc3MiAyOS40NDU0IDMyOS44OCAyOS41NDM1IDMyOS4yNTIgMjkuNTQzNUMzMjkuMDIxIDI5LjU0MzUgMzI4LjUyNSAyOS41NDM1IDMyNy45OTcgMjkuNDc3NkMzMjguMDMgMzAuNTI4MyAzMjguMDk2IDMxLjQxNDggMzI4LjA5NiAzMi40MzIyVjM2LjkyOTVDMzI4LjA5NiAzNy45MTQ4IDMyOC4wMyAzOC45OTggMzI3Ljk5NyA0MC4wMTU0QzMyOC40MjYgMzkuOTQ5NiAzMjguNzI0IDM5Ljk0OTYgMzI4LjkyMiAzOS45NDk2QzMyOS4xNTMgMzkuOTQ5NiAzMjkuNDg0IDM5Ljk0OTYgMzI5Ljg4IDQwLjAxNTRDMzI5LjgxNSAzOS4wMzE5IDMyOS43ODIgMzguMDQ2NSAzMjkuNzgxIDM3LjA2MDlWMzUuNDJDMzMwLjE0NSAzNS40NTI2IDMzMC41MDggMzUuNDUyNiAzMzAuOTA1IDM1LjQ1MjZDMzMyLjgyIDM1LjQ1MjYgMzM0Ljk2OCAzNC43MzA0IDMzNC45NjggMzIuMjAyOFYzMi4yMDI4Wk0zMjYuMDE0IDM2Ljg5NzNDMzI2LjAxNCAzNS4yNTU4IDMyNC45MjQgMzQuNTMzNiAzMjMuMDQgMzMuNzQ1NkMzMjEuNjg2IDMzLjE4OCAzMjAuOTkyIDMyLjY5NTYgMzIwLjk5MiAzMS42NDQ1QzMyMC45OTIgMzAuNjYgMzIxLjc1MiAzMC4wMzYyIDMyMy4wMDggMzAuMDM2MkMzMjMuODM0IDMwLjAzNjIgMzI0LjU2MSAzMC4zMzE1IDMyNS4yMjIgMzAuODU2OEMzMjUuMjg3IDMwLjQ5NTcgMzI1LjQ1MyAzMC4xMzQ3IDMyNS42NTEgMjkuODM5NEMzMjQuODU4IDI5LjQ3ODMgMzIzLjk5OSAyOS4zNDcgMzIzLjA3NCAyOS4zNDdDMzIwLjM2NSAyOS4zNDcgMzE5LjUwNSAzMC44OTA1IDMxOS41MDUgMzIuMjAzNUMzMTkuNTA1IDMzLjgxMTggMzIwLjI5OSAzNC41NjcyIDMyMi4zNDcgMzUuMzU1M0MzMjMuNjM2IDM1Ljg0NyAzMjQuMjk2IDM2LjQ3MTEgMzI0LjI5NiAzNy41NTQ0QzMyNC4yOTYgMzguNzAzNSAzMjMuNDM3IDM5LjQyNTcgMzIyLjI0OCAzOS40MjU3QzMyMS41NTQgMzkuNDI1NyAzMjAuMzY1IDM5LjA2NDYgMzE5LjUzOSAzOC4zMDk5QzMxOS41MDUgMzguNzM2MSAzMTkuNTA1IDM5LjEzMDQgMzE5LjM3MyAzOS40OTE1QzMxOS45MDIgMzkuNzU0NiAzMjEuMTI1IDQwLjE0NzkgMzIyLjIxNSA0MC4xNDc5QzMyNC45OSA0MC4xNDcxIDMyNi4wMTQgMzguNDM5NyAzMjYuMDE0IDM2Ljg5NzNWMzYuODk3M1pNMzc4LjE1MiAxNy45ODgyQzM3OC4xNTIgMTguOTczIDM3Ny40NTggMTkuNjYyMyAzNzYuNzY0IDIwLjIyMDJDMzc2LjMwMSAxOS41NjM5IDM3NS43NCAxOC42NzcxIDM3NS43NCAxNy45ODgyQzM3NS43NCAxNy4yMzMxIDM3Ni4yNjggMTYuODA2MSAzNzYuOTk1IDE2LjgwNjFDMzc3Ljk4NyAxNi44MDY1IDM3OC4xNTIgMTcuNjkyNiAzNzguMTUyIDE3Ljk4ODJWMTcuOTg4MlpNMzc4LjQ4MiAyNS4wMTMyQzM3OC4xMTkgMjUuMzQxNyAzNzcuMjYgMjUuOTY1NSAzNzYuNTMzIDI1Ljk2NTVDMzc1LjU3NCAyNS45NjU1IDM3NC40MTggMjUuMjc1OSAzNzQuNDE4IDIzLjc5ODZDMzc0LjQxOCAyMi40ODU1IDM3NS4yNzcgMjEuODk0NyAzNzUuODA2IDIxLjU2NjVDMzc3LjAyOCAyMy4yNDA2IDM3Ny4wOTUgMjMuMzM5MSAzNzguNDgyIDI1LjAxMzJaTTM3OS44MDQgMzIuMjAyOEMzNzkuODA0IDMzLjI1MzUgMzc5LjI3NSAzNC40MDI2IDM3Ny43NTUgMzQuNDAyNkMzNzcuMzI2IDM0LjQwMjYgMzc2LjkyOSAzNC40MDI2IDM3Ni41MzMgMzQuMzY5M1YzMC4yNjU2QzM3Ni45MjkgMzAuMTY3NiAzNzcuNDI1IDMwLjEzNDMgMzc3LjcyMiAzMC4xMzQzQzM3OS4wMTEgMzAuMTM0MyAzNzkuODA0IDMwLjg4OTggMzc5LjgwNCAzMi4yMDI4Wk0zMzguNjAyIDIyLjgxNDFDMzM3LjkwOSAyMi44NDY2IDMzNy41NDUgMjIuODQ2NiAzMzcuMDgyIDIyLjg0NjZDMzM2LjUyMSAyMi44NDY2IDMzNi4xOSAyMi44NDY2IDMzNS40NjMgMjIuODE0MUwzMzcuMDgyIDE5LjAwNkwzMzguNjAyIDIyLjgxNDFaTTMzMy4xNTEgMzIuMzAwOEMzMzMuMTUxIDMzLjgxMTEgMzMyLjI1OCAzNC43OTU5IDMzMC44MDUgMzQuNzk1OUMzMzAuNTA3IDM0Ljc5NTkgMzMwLjE3NyAzNC43OTU5IDMyOS43OCAzNC43MzAxVjMwLjIzMjdDMzMwLjI0MyAzMC4xNjY5IDMzMC42MzkgMzAuMTMzOSAzMzEuMDM2IDMwLjEzMzlDMzMyLjQyNCAzMC4xMzQzIDMzMy4xNTEgMzEuMDIxMSAzMzMuMTUxIDMyLjMwMDhaTTM2OS41MjggMjMuNjY3NkMzNjkuNTI4IDIyLjAyNiAzNjguNDM4IDIxLjMwMzkgMzY2LjU1NSAyMC41MTYyQzM2NS4yIDE5Ljk1ODMgMzY0LjUwNiAxOS40OTg4IDM2NC41MDYgMTguNDE1MUMzNjQuNTA2IDE3LjQ2MzIgMzY1LjI2NiAxNi44MDY1IDM2Ni41MjEgMTYuODA2NUMzNjcuMzQ4IDE2LjgwNjUgMzY4LjA3NSAxNy4xMDE3IDM2OC43MzUgMTcuNjI3NUMzNjguODAyIDE3LjI2NjQgMzY4Ljk2NyAxNi45MDQ5IDM2OS4xMzEgMTYuNjQyMkMzNjguMzcyIDE2LjI4MTEgMzY3LjQ3OSAxNi4xMTcyIDM2Ni41ODcgMTYuMTE3MkMzNjMuOTQ0IDE2LjExNzIgMzYyLjk4NiAxNy42NiAzNjIuOTg2IDE5LjAwNkMzNjIuOTg2IDIwLjU4MTcgMzYzLjgxMiAyMS4zMzY4IDM2NS44NjEgMjIuMTI0NEMzNjcuMTQ5IDIyLjYxNjkgMzY3LjgxIDIzLjI0MDYgMzY3LjgxIDI0LjM1NjhDMzY3LjgxIDI1LjQ3MyAzNjYuOTUxIDI2LjE5NTIgMzY1Ljc2MiAyNi4xOTUyQzM2NS4wMzUgMjYuMTk1MiAzNjMuODc5IDI1LjgzNDEgMzYzLjA1MiAyNS4xMTE5QzM2My4wMiAyNS41Mzg5IDM2Mi45ODYgMjUuOSAzNjIuODg3IDI2LjI2MTFDMzYzLjM4MyAyNi41MjM4IDM2NC42MDYgMjYuOTE3NCAzNjUuNzI5IDI2LjkxNzRDMzY4LjUwNCAyNi45MTc0IDM2OS41MjggMjUuMjQzMyAzNjkuNTI4IDIzLjY2NzZWMjMuNjY3NloiIGZpbGw9IiMwMzY1NTUiLz4NCjxwYXRoIGQ9Ik02NDAuNDE2IDIwLjU1NzNDNjM4LjY3MSAxOS44MzU0IDYzNy42MzEgMTkuNTU1MSA2MzYuNTk4IDE5LjU1NTFDNjM1LjUxNCAxOS41NTUxIDYzNC44MTkgMTkuOTE3IDYzNC44MTkgMjAuNDc2NUM2MzQuODE5IDIyLjE2NDUgNjQwLjk2MiAyMS42ODkzIDY0MC45NjIgMjUuNTkzNkM2NDAuOTYyIDI3Ljc0NjQgNjM5LjAyNCAyOC45OTc0IDYzNi4zMzIgMjguOTk3NEM2MzQuMjIgMjguOTk3NCA2MzMuMTggMjguNDg4IDYzMS45ODMgMjcuOTExNlYyNS40OTYyQzYzMy43MSAyNi41NjM1IDYzNC43NjggMjYuOTQwMSA2MzYuMTAxIDI2Ljk0MDFDNjM3LjI1NiAyNi45NDAxIDYzNy44NzkgMjYuNTYzNSA2MzcuODc5IDI1LjkwNjNDNjM3Ljg3OSAyNC4wNjg1IDYzMS43MzcgMjQuNzQxNSA2MzEuNzM3IDIwLjcyMTNDNjMxLjczNyAxOC43ODI3IDYzMy41MzQgMTcuNDk5IDYzNi4zMzIgMTcuNDk5QzYzNy42ODIgMTcuNDk5IDYzOC45MDEgMTcuNzYzNSA2NDAuNDE2IDE4LjM3MDdWMjAuNTU3M1pNNjQ5LjAxNiAyOC40ODQxQzY0Ny45OTIgMjguODMwNiA2NDcuMTI2IDI4Ljk5NTQgNjQ2LjI2MiAyOC45OTU0QzY0My40MDIgMjguOTk1NCA2NDEuNTUyIDI3LjQ0MjIgNjQxLjU1MiAyNS4wNzkyQzY0MS41NTIgMjIuNzU5NCA2NDMuNDczIDIxLjEyMDIgNjQ2LjE1NiAyMS4xMjAyQzY0Ni45ODUgMjEuMTIwMiA2NDguMDQ0IDIxLjMxODIgNjQ4Ljg5MSAyMS42MTIzVjIzLjM4ODFDNjQ4LjIyMSAyMy4wNTYyIDY0Ny40NDQgMjIuODc0MSA2NDYuODA5IDIyLjg3NDFDNjQ1LjI3MyAyMi44NzQxIDY0NC4yODYgMjMuNzM0MyA2NDQuMjg2IDI1LjA2MTlDNjQ0LjI4NiAyNi40MDggNjQ1LjI1NiAyNy4yOTQgNjQ2LjcyIDI3LjI5NEM2NDcuMzM3IDI3LjI5NCA2NDcuODg2IDI3LjE2MjMgNjQ5LjAxNiAyNi43NjhMNjQ5LjAxNiAyOC40ODQxWk02NzEuMzIgMjQuMjA5QzY3MS40MjUgMjMuMTU0OCA2NzIuMDgxIDIyLjU0NTcgNjczLjA4NyAyMi41NDU3QzY3NC4wNzYgMjIuNTQ1NyA2NzQuNzQ2IDIzLjE3MjEgNjc0Ljg1MiAyNC4yMDlINjcxLjMyWk02NzIuOTEgMjEuMTIyOUM2NzAuNCAyMS4xMjI5IDY2OC42MTQgMjIuNzc1NSA2NjguNjE0IDI1LjEwMTJDNjY4LjYxNCAyNy40NDQxIDY3MC40NzEgMjguOTk1NCA2NzMuMzM1IDI4Ljk5NTRDNjczLjk3IDI4Ljk5NTQgNjc1LjUwNCAyOC45OTU0IDY3Ni45NjYgMjcuOTg3VjI2LjUwNDJDNjc1Ljc2OSAyNy4yOTkzIDY3NC45NzcgMjcuNTczMSA2NzMuOTU1IDI3LjU3MzFDNjcyLjM0MSAyNy41NzMxIDY3MS4zNTQgMjYuNzk0OSA2NzEuMjY1IDI1LjQ2NjZINjc3LjExQzY3Ny4yMzIgMjIuNjkzOSA2NzUuMjc5IDIxLjEyMjkgNjcyLjkxIDIxLjEyMjlWMjEuMTIyOVpNNjc4LjA5OSAyOC44NTcySDY4MC42NTRWMjEuMjYyN0g2NzguMDk5VjI4Ljg1NzJaTTY4Ny43NjcgMjYuNzgxNUM2ODcuMjM0IDI3LjIyODEgNjg2Ljc5MiAyNy40MDcyIDY4Ni4yNDYgMjcuNDA3MkM2ODUuMDQzIDI3LjQwNzIgNjg0LjI4MSAyNi40ODM4IDY4NC4yODEgMjUuMTAwNEM2ODQuMjgxIDIzLjU4NDEgNjg1LjA0MyAyMi43MTAxIDY4Ni4zMzEgMjIuNzEwMUM2ODYuNzkyIDIyLjcxMDEgNjg3LjM5NCAyMi45MDggNjg3Ljc2NyAyMy4xNTU5VjI2Ljc4MTVaTTY4Ny43NjcgMTcuNjM5MVYyMS41OTU4QzY4Ny4wNzYgMjEuMjg0NyA2ODYuMzg4IDIxLjEyMDIgNjg1LjY0NCAyMS4xMjAyQzY4My4zMTMgMjEuMTIwMiA2ODEuNyAyMi43MjY2IDY4MS43IDI1LjA1MDdDNjgxLjcgMjcuMzI0OCA2ODMuMzEzIDI4Ljk5NzQgNjg1LjUgMjguOTk3NEM2ODYuMzY3IDI4Ljk5NzQgNjg3LjAzNyAyOC43ODU2IDY4Ny43NjcgMjguMjQzNVYyOC44NTQ5SDY5MC4zMjJWMTcuNjM5MUg2ODcuNzY3Wk02OTQuMTA1IDI0LjIwOUM2OTQuMjExIDIzLjE1NDggNjk0Ljg2NCAyMi41NDU3IDY5NS44NjggMjIuNTQ1N0M2OTYuODU4IDIyLjU0NTcgNjk3LjUzNSAyMy4xNzIxIDY5Ny42NDEgMjQuMjA5SDY5NC4xMDVaTTY5NS42OTQgMjEuMTIyOUM2OTMuMTg0IDIxLjEyMjkgNjkxLjQgMjIuNzc1NSA2OTEuNCAyNS4xMDEyQzY5MS40IDI3LjQ0NDEgNjkzLjI1OSAyOC45OTU0IDY5Ni4xMTkgMjguOTk1NEM2OTYuNzUzIDI4Ljk5NTQgNjk4LjI5IDI4Ljk5NTQgNjk5Ljc1NSAyNy45ODdWMjYuNTA0MkM2OTguNTU3IDI3LjI5OTMgNjk3Ljc2MyAyNy41NzMxIDY5Ni43MzYgMjcuNTczMUM2OTUuMTMxIDI3LjU3MzEgNjk0LjE0IDI2Ljc5NDkgNjk0LjA1MSAyNS40NjY2SDY5OS44OTRDNzAwLjAxNSAyMi42OTM5IDY5OC4wNjEgMjEuMTIyOSA2OTUuNjk0IDIxLjEyMjkiIGZpbGw9IiMwMDlFNEQiLz4NCjxwYXRoIGQ9Ik03MDMuNzIxIDIzLjQzNjhINzAzLjc1OEM3MDQuNTE3IDIxLjg1NjIgNzA1LjM2NiAyMS4xMTUgNzA2LjM1MiAyMS4xMTVDNzA2Ljg2MiAyMS4xMTUgNzA3LjMwMyAyMS4yOTY0IDcwOC4wNDQgMjEuODA3Nkw3MDcuMzQxIDIzLjkxMzNDNzA2LjY3IDIzLjUxODYgNzA2LjIyOSAyMy4zNTM1IDcwNS44MjMgMjMuMzUzNUM3MDQuODg2IDIzLjM1MzUgNzA0LjI4NiAyNC4xNzc1IDcwMy43MjEgMjUuNTcwNFYyOC44NDY2SDcwMS4xNjJWMjEuMjU0MUg3MDMuNzIxVjIzLjQzNjhaTTY4MC43NzUgMTguMDY3NEM2ODEuMDE1IDE4LjY1NzUgNjgwLjU4MyAxOS40ODA1IDY3OS44MTQgMTkuOTA0QzY3OS4wNDEgMjAuMzI3MSA2NzguMjI0IDIwLjE5MjggNjc3Ljk4NiAxOS42MDI3QzY3Ny43NDMgMTkuMDExNyA2NzguMTczIDE4LjE4NzcgNjc4Ljk0NSAxNy43NjY2QzY3OS43MTYgMTcuMzQxMSA2ODAuNTMzIDE3LjQ3NTkgNjgwLjc3NSAxOC4wNjc0WiIgZmlsbD0iIzAwOUU0RCIvPg0KPHBhdGggZD0iTTY1OC4yMiAyNC4wMjMxQzY1OC4yMiAyMS45NjUxIDY1Ni43MTkgMjEuMTIyNiA2NTUuMjM5IDIxLjEyMjZDNjU0LjIzMiAyMS4xMjI2IDY1My40MDQgMjEuNTE4NCA2NTIuNjY0IDIyLjM5MjFINjUyLjYyOVYxNy42MzkySDY1MC4wNzFWMjguODM1M0g2NTIuNjI5VjI0LjAyMzFDNjUzLjIyOCAyMy4yMTYxIDY1My43MzggMjIuODcxMSA2NTQuMzM4IDIyLjg3MTFDNjU1LjEzNCAyMi44NzExIDY1NS42NjIgMjMuMzk4NiA2NTUuNjYyIDI0LjUzMjlWMjcuMjAwOEM2NTYuNTIgMjYuNzg5NiA2NTcuMzkzIDI2LjUzNzQgNjU4LjIyIDI2LjQ0MzhWMjQuMDIzMVpNNjY0LjYzNiAyMS4xMTk5QzY2My41OTQgMjEuMTE5OSA2NjIuNzk5IDIxLjQ4MTEgNjYxLjk4NCAyMi4zNDkzVjIxLjI2MjRINjU5LjQyOFYyNi40MjM0QzY2MC4zMTMgMjYuNTA1OCA2NjEuNDQzIDI2Ljg4NDcgNjYxLjk4NCAyNy41MTA0VjIzLjk2MzRDNjYyLjY1NyAyMy4wMjMyIDY2My4xMzQgMjIuNzA5NyA2NjMuNzcgMjIuNzA5N0M2NjQuNDk0IDIyLjcwOTcgNjY1LjA0NSAyMy4xNTU2IDY2NS4wNDUgMjQuMjI2NFYyOC44MzcySDY2Ny42MDJWMjQuMDI4OUM2NjcuNjAyIDIxLjc5MjYgNjY1LjkwOCAyMS4xMTk5IDY2NC42MzYgMjEuMTE5OVYyMS4xMTk5Wk02NjkuMDE1IDMxLjAxODFINjY2LjA0M1YzMi45ODY0SDY2OC45MDlWMzMuODMxMkg2NjYuMDQzVjM1Ljg2MTlINjY5LjEwM1YzNi43MDU1SDY2NS4wNDZWMzAuMTc1Mkg2NjkuMDE1TDY2OS4wMTUgMzEuMDE4MVpNNjcxLjQ0MiAzNi43MDkzSDY3Mi4zNTJWMzAuMTczM0g2NzEuNDQyVjM2LjcwOTNaTTY3Ni44NTkgMzMuMDQ4NEM2NzcuNTA0IDMzLjA0ODQgNjc3LjkwNCAzMy40NjMxIDY3Ny45MzUgMzQuMTE0Mkg2NzUuNjE2QzY3NS43NDIgMzMuNDM0MiA2NzYuMTYxIDMzLjA0ODQgNjc2Ljg1OSAzMy4wNDg0Wk02NzUuNiAzNC42ODFINjc4Ljg0MkM2NzguODQyIDMzLjA4NjkgNjc4LjA2MiAzMi4zMTggNjc2LjgzOCAzMi4zMThDNjc1LjU2OSAzMi4zMTggNjc0LjY4OCAzMy4xOTI0IDY3NC42ODggMzQuNDk2OUM2NzQuNjg4IDM1LjY4OSA2NzUuNDg0IDM2Ljc4OTggNjc2LjkxNyAzNi43ODk4QzY3Ny42OTggMzYuNzg5OCA2NzguMjAzIDM2LjYyODEgNjc4Ljc2MyAzNi4yODJWMzUuNDU2QzY3OC4yMjIgMzUuNzg1NiA2NzcuNjk4IDM1Ljk3NTggNjc3LjE0NyAzNS45NzU4QzY3Ni4yNjUgMzUuOTc1OCA2NzUuNzQyIDM1LjUzNSA2NzUuNiAzNC42ODA2VjM0LjY4MVpNNjg0Ljc4NiAzMy41MzA5QzY4NC4yNjMgMzMuMTk2NiA2ODMuOTE0IDMzLjA5ODUgNjgzLjUxNSAzMy4wOTg1QzY4Mi42ODIgMzMuMDk4NSA2ODIuMTA1IDMzLjY5NDUgNjgyLjEwNSAzNC41NjdDNjgyLjEwNSAzNS40NTYgNjgyLjcxOSAzNS45OTE2IDY4My42NjggMzUuOTkxNkM2ODQuMDU4IDM1Ljk5MTYgNjg0LjQzIDM1Ljg5NzMgNjg0Ljg4OCAzNS43MDU5VjM2LjU0MjZDNjg0LjU4MiAzNi42Nzc0IDY4My45OTcgMzYuNzg5OCA2ODMuNTE1IDM2Ljc4OThDNjgyLjEzNiAzNi43ODk4IDY4MS4xOCAzNS45MDYyIDY4MS4xOCAzNC42NDMyQzY4MS4xOCAzMy4yMTc4IDY4Mi4wNTQgMzIuMzE4IDY4My40NTMgMzIuMzE4QzY4My45ODcgMzIuMzE4IDY4NC4zNDYgMzIuNDMzOSA2ODQuNzg3IDMyLjYxNDVMNjg0Ljc4NiAzMy41MzA5Wk02ODguOTM0IDMyLjQwMDRINjkwLjM5NVYzMy4xNjUxSDY4OC45MzRWMzUuMzc1MkM2ODguOTM0IDM1Ljg4MTEgNjg5LjMyNyAzNi4wMjc0IDY4OS41OTMgMzYuMDI3NEM2ODkuOTIyIDM2LjAyNzQgNjkwLjI2MiAzNS45MiA2OTAuNjMgMzUuNzA3OVYzNi41MDM3QzY5MC4zMSAzNi42Njc4IDY4OS44MiAzNi43ODk4IDY4OS41MTkgMzYuNzg5OEM2ODguNTI4IDM2Ljc4OTggNjg4LjAyNyAzNi4yMTYxIDY4OC4wMjcgMzUuNDM5MVYzMy4xNjUxSDY4Ny4yMjRWMzMuMDcwM0w2ODguOTM0IDMxLjUxMDJWMzIuNDAwNFpNNjkzLjg3NiAzMi40MDA0VjMzLjM5NjlINjkzLjg5NUM2OTQuMzU5IDMyLjYzNDUgNjk0LjggMzIuMzE4IDY5NS4yMyAzMi4zMThDNjk1LjYwMSAzMi4zMTggNjk1Ljk0NyAzMi40ODAxIDY5Ni4zMjkgMzIuODE2Nkw2OTUuODQ3IDMzLjU2NDRDNjk1LjU3IDMzLjMwOTEgNjk1LjIxMSAzMy4xMzMxIDY5NC45OTUgMzMuMTMzMUM2OTQuMzY4IDMzLjEzMzEgNjkzLjg3NiAzMy43MjY4IDY5My44NzYgMzQuNDYyNlYzNi43MDkzSDY5Mi45NjdWMzIuNDAwNEg2OTMuODc2Wk03MDUuNjU3IDMzLjUzMDlDNzA1LjEzMSAzMy4xOTY2IDcwNC43ODIgMzMuMDk4NSA3MDQuMzgxIDMzLjA5ODVDNzAzLjU0OSAzMy4wOTg1IDcwMi45NzcgMzMuNjk0NSA3MDIuOTc3IDM0LjU2N0M3MDIuOTc3IDM1LjQ1NiA3MDMuNTkyIDM1Ljk5MTYgNzA0LjUzNSAzNS45OTE2QzcwNC45MjUgMzUuOTkxNiA3MDUuMjk1IDM1Ljg5NzMgNzA1Ljc2IDM1LjcwNTlWMzYuNTQyNkM3MDUuNDQ3IDM2LjY3NzQgNzA0Ljg2MiAzNi43ODk4IDcwNC4zOCAzNi43ODk4QzcwMy4wMDQgMzYuNzg5OCA3MDIuMDQ0IDM1LjkwNjIgNzAyLjA0NCAzNC42NDMyQzcwMi4wNDQgMzMuMjE3OCA3MDIuOTIyIDMyLjMxOCA3MDQuMzIgMzIuMzE4QzcwNC44NTUgMzIuMzE4IDcwNS4yMTIgMzIuNDMzOSA3MDUuNjU3IDMyLjYxNDVMNzA1LjY1NyAzMy41MzA5Wk02OTguNzQyIDM2LjcwOTNINjk5LjY1MlYzMi40MDA4SDY5OC43NDJWMzYuNzA5M1oiIGZpbGw9IiMwMDlFNEQiLz4NCjxwYXRoIGQ9Ik02OTkuNjg0IDMwLjg1MjVDNjk5Ljc3MyAzMS4wNjA0IDY5OS42MTggMzEuMzU0NCA2OTkuMzQ0IDMxLjUwNDFDNjk5LjA2OCAzMS42NTQzIDY5OC43NzYgMzEuNjA2MiA2OTguNjkzIDMxLjM5NzhDNjk4LjYxIDMxLjE4NzQgNjk4Ljc2MSAzMC44OTU4IDY5OS4wMzggMzAuNzQ1NkM2OTkuMzExIDMwLjU5MzUgNjk5LjYwMSAzMC42NDIxIDY5OS42ODQgMzAuODUyNVYzMC44NTI1Wk02NTguOTQgMzEuMjAwOUM2NTguNzc5IDMxLjIwMDkgNjU4LjcxMSAzMS4yMjU1IDY1OC42NDYgMzEuMjkzOEM2NTguNjIgMzEuMzIwMyA2NTguNjEgMzEuMzQ3MiA2NTguNiAzMS40MDExTDY1Ny43ODQgMzQuMjg3QzY1Ny41OTMgMzUuMjk5MiA2NTYuMjU5IDM2LjMwOTkgNjU0LjUyMSAzNi4zMDk5SDY1Mi4xMDRMNjUyLjUyMyAzNC44MjdINjU0LjA3NkM2NTQuMjM0IDM0LjgyNyA2NTQuMzU4IDM0Ljc3MjEgNjU0LjQ2MiAzNC42NjQzQzY1NC41IDM0LjYyMjUgNjU0LjU1IDM0LjU1NyA2NTQuNTU2IDM0LjQ4OTZMNjU1LjIwMSAzMS45NjgxQzY1NS4zOTEgMzAuOTU1NSA2NTYuNTM4IDI5LjgzNjkgNjU4LjI3NiAyOS44MzY5SDY2MC43NTFMNjYwLjQzNSAzMS4yMDA5SDY1OC45NFpNNjU5LjQ5NyAzMi45NTk2TDY1OS43NzMgMzIuMDI1OUg2NjIuMjg4QzY2Mi41OTggMzAuNjcyIDY2Mi4zNTQgMjkuNDE3NyA2NjEuNDczIDI4LjU5NjFDNjU5LjY4OSAyNi45MzMyIDY1NS45NTcgMjcuNDk4MyA2NTMuMTc3IDI5Ljk3NzlDNjUyLjc0MyAzMC4zNjMgNjUyLjM3NiAzMC43NzkzIDY1Mi4wNDIgMzEuMjA0OEg2NTMuNTU2TDY1My4yMDQgMzIuMTQwNEg2NTEuMzk1QzY1MS4yMjIgMzIuNDM1NCA2NTEuMDYgMzIuNzI4MSA2NTAuOTM2IDMzLjAyNUg2NTMuMDgxTDY1Mi43MzcgMzMuOTYwN0g2NTAuNjNDNjUwLjI2OSAzNS4zOTAxIDY1MC40OTkgMzYuNzIzMyA2NTEuNDA2IDM3LjU2OTlDNjUzLjE2NyAzOS4yMTE2IDY1Ni44ODggMzguNjM0NiA2NTkuNjY3IDM2LjE1NTRDNjYwLjE1MyAzNS43MjQyIDY2MC41NTUgMzUuMjU4NyA2NjAuOTE4IDM0Ljc4MDhINjU4Ljk3M0w2NTkuMjY5IDMzLjg0NzFINjYxLjU0M0M2NjEuNzEgMzMuNTUwMSA2NjEuODYzIDMzLjI1NjUgNjYxLjk4MyAzMi45NTk2SDY1OS40OTdaIiBmaWxsPSIjMDA5RTREIi8+DQo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfNThfMTExKSI+DQo8cGF0aCBkPSJNNzc1LjA2OCA0MS4yMjc0Qzc2Ni4yODUgNDIuMDQ2MyA3NTcuMTMxIDQwLjc1NjQgNzU1Ljg0OCAzMy44MTlDNzU1LjIyMSAzMC4zOTkgNzU2Ljc2NSAyNi43NzI1IDc1OC44MSAyNC41MTg0VjIzLjMxNDhDNzU1LjEyNiAyNi41OCA3NTMuMTMgMzAuNzExNSA3NTQuMjggMzUuNTkyQzc1NS43NDggNDEuODUxOCA3NjMuNjAzIDQ1LjM5NjcgNzc1LjU5NSA0NC4yMTk1Qzc4MC4zNDIgNDMuNzU0NSA3ODYuNTUgNDIuMjEyIDc5MC44NjkgMzkuODE0NFYzNi40MTA5Qzc4Ni45NDkgMzguNzcxMyA3ODAuNDY4IDQwLjcyMTEgNzc1LjA2OCA0MS4yMjc0VjQxLjIyNzRaTTc5OC4yMDUgMjMuMjMzNUM3OTYuMTIyIDEyLjk1MzMgNzc2LjM3MyAxMi4zMDE2IDc2My42NDMgMjAuMTMzOFYyMC45OTg5Qzc3Ni4zNTkgMTQuMzkxNSA3OTQuMzk1IDE0LjQzMTcgNzk2LjAzNyAyMy45MDE2Qzc5Ni41ODkgMjcuMDM0MiA3OTQuODQzIDMwLjI5NzggNzkxLjcyMyAzMi4xNzdWMzQuNjM0MkM3OTUuNDc2IDMzLjI0MzIgNzk5LjMyNCAyOC43NDQyIDc5OC4yMDUgMjMuMjMzNVYyMy4yMzM1WiIgZmlsbD0iIzBFN0RDMiIvPg0KPHBhdGggZD0iTTc5MC4xNTkgMjEuNzM2OEg3ODcuODU2VjMyLjEwM0M3ODcuODU2IDMzLjMxNzkgNzg4LjQzNyAzNC4zNzQ0IDc5MC4xNTkgMzQuNTQzMlYyMS43MzY4Wk03NjIuNzM5IDI1LjUyMTdINzYwLjQzMkw3NjAuNDMxIDMyLjI5NDNDNzYwLjQzMSAzMy41MTM0IDc2MS4wMTMgMzQuNTY4OCA3NjIuNzM5IDM0LjczNDRWMjUuNTIxN1YyNS41MjE3Wk03NjAuNDMyIDIyLjA1MjFINzYyLjczMlYyNC4yNTg0SDc2MC40MzJWMjIuMDUyMVpNNzc2LjUzIDM0LjYyNzJDNzc0LjY2NiAzNC42MjcyIDc3My44NzcgMzMuMzE3NyA3NzMuODc3IDMyLjAyOFYyMy4wMzU1SDc3Ni4xNlYyNS41MjE3SDc3Ny44NzlWMjcuMzg1M0g3NzYuMTZWMzEuODg1NEM3NzYuMTYgMzIuNDExMyA3NzYuNDA3IDMyLjcwNDQgNzc2Ljk1IDMyLjcwNDRINzc3Ljg3OVYzNC42MjcyTDc3Ni41MyAzNC42MjcyVjM0LjYyNzJaTTc4MC43MzEgMzAuNzk2MUM3ODAuNzMxIDMxLjk3NjggNzgxLjQ2MSAzMi44NDQ2IDc4Mi43NTQgMzIuODQ0NkM3ODMuNzY2IDMyLjg0NDYgNzg0LjI2NiAzMi41NjA1IDc4NC44NSAzMS45NzY4TDc4Ni4yNjEgMzMuMzM0OUM3ODUuMzU3IDM0LjIzNzkgNzg0LjQwOSAzNC43ODcgNzgyLjczNyAzNC43ODdDNzgwLjU1MiAzNC43ODcgNzc4LjQ1OSAzMy41ODE5IDc3OC40NTkgMzAuMDY4NkM3NzguNDU5IDI3LjA2NTEgNzgwLjI4OCAyNS4zNjczIDc4Mi42ODYgMjUuMzY3M0M3ODUuMTI0IDI1LjM2NzMgNzg2LjUyNSAyNy4zNTQ5IDc4Ni41MjUgMjkuOTYzOVYzMC43OTYzSDc4MC43MzFWMzAuNzk2MVpNNzgyLjU4NiAyNy4yNzU2Qzc4MS44MDUgMjcuMjc1NiA3ODEuMjA0IDI3LjY4MjMgNzgwLjk1IDI4LjIzMDlDNzgwLjgwMiAyOC41NjA3IDc4MC43NDcgMjguODE3NyA3ODAuNzMxIDI5LjIyMjlINzg0LjI0OUM3ODQuMjA0IDI4LjIzMDkgNzgzLjc1OSAyNy4yNzU2IDc4Mi41ODYgMjcuMjc1NlpNNzY4LjkzOSAyNy4zODUzQzc2OS42MDggMjcuMzg1MyA3NjkuODg3IDI3LjcxOTggNzY5Ljg4NyAyOC4yNjI2VjM0LjY0MDZINzcyLjE3VjI4LjI0OTJDNzcyLjE3IDI2Ljk1NDIgNzcxLjQ4NyAyNS41MjQxIDc2OS40ODIgMjUuNTI0MUw3NjQuNzY2IDI1LjUyMTdWMzQuNjQwNkg3NjcuMDVWMjcuMzg1M0g3NjguOTM5VjI3LjM4NTNaTTc5Mi42MzcgMjMuNTg5MUM3OTIuMTI5IDIzLjU4OTEgNzkxLjcyNCAyMy4xNzU0IDc5MS43MjQgMjIuNjYyOUM3OTEuNzI0IDIyLjE1MjkgNzkyLjEyOSAyMS43MzY4IDc5Mi42MzcgMjEuNzM2OEM3OTMuMTQyIDIxLjczNjggNzkzLjU1NiAyMi4xNTI5IDc5My41NTYgMjIuNjYyOUM3OTMuNTU2IDIzLjE3NTQgNzkzLjE0MiAyMy41ODkxIDc5Mi42MzcgMjMuNTg5MVpNNzkyLjYzNyAyMS44OTEyQzc5Mi4yMTggMjEuODkxMiA3OTEuODgyIDIyLjI0MDcgNzkxLjg4MiAyMi42NjI5Qzc5MS44ODIgMjMuMDg3NiA3OTIuMjE4IDIzLjQzMDkgNzkyLjYzNyAyMy40MzA5Qzc5My4wNTUgMjMuNDMwOSA3OTMuNDAyIDIzLjA4NzYgNzkzLjQwMiAyMi42NjI5Qzc5My40MDIgMjIuMjQwNyA3OTMuMDU1IDIxLjg5MTIgNzkyLjYzNyAyMS44OTEyWk03OTMuMDQzIDIzLjIxOEg3OTIuODcyQzc5Mi44NjQgMjMuMjE3OSA3OTIuODU3IDIzLjIxNTcgNzkyLjg1MSAyMy4yMTE2Qzc5Mi44NDUgMjMuMjA3NSA3OTIuODQgMjMuMjAxNyA3OTIuODM3IDIzLjE5NDlMNzkyLjYwNSAyMi43OTdDNzkyLjU5OCAyMi43ODg1IDc5Mi41NzkgMjIuNzc4OCA3OTIuNTczIDIyLjc3ODhINzkyLjQ2N1YyMy4xNzU0Qzc5Mi40NjcgMjMuMTk1IDc5Mi40NTMgMjMuMjE4MSA3OTIuNDI4IDIzLjIxODFINzkyLjI3NEM3OTIuMjUxIDIzLjIxODEgNzkyLjIzNSAyMy4xOTUgNzkyLjIzNSAyMy4xNzU0VjIyLjE3NDlDNzkyLjIzNSAyMi4xMTY0IDc5Mi4yNTQgMjIuMDkyNCA3OTIuMzA1IDIyLjA4NUM3OTIuMzYxIDIyLjA3OSA3OTIuNTA1IDIyLjA3MTYgNzkyLjU4NiAyMi4wNzE2Qzc5Mi44NzIgMjIuMDcxNiA3OTMuMDM5IDIyLjE1NjYgNzkzLjAzOSAyMi40MjQ0VjIyLjQ0NEM3OTMuMDM5IDIyLjYwOTQgNzkyLjk1OSAyMi42OTk1IDc5Mi44MzMgMjIuNzM5N0w3OTMuMDc0IDIzLjE1NDdDNzkzLjA3OCAyMy4xNjQgNzkzLjA4IDIzLjE3MzkgNzkzLjA4IDIzLjE4NEM3OTMuMDggMjMuMTk5NyA3OTMuMDcyIDIzLjIxOCA3OTMuMDQzIDIzLjIxOFYyMy4yMThaTTc5Mi44MjEgMjIuNDI0NEM3OTIuODIxIDIyLjMxMjcgNzkyLjc1MiAyMi4yNzczIDc5Mi42MDUgMjIuMjc3M0g3OTIuNDU5VjIyLjU5NDdDNzkyLjQ4MiAyMi41OTQ3IDc5Mi41ODYgMjIuNTk5NiA3OTIuNjA1IDIyLjU5OTZDNzkyLjc1MiAyMi41OTk2IDc5Mi44MjEgMjIuNTUgNzkyLjgyMSAyMi40NDRWMjIuNDI0NFoiIGZpbGw9IiMwRTdEQzIiLz4NCjwvZz4NCjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMV81OF8xMTEpIj4NCjxwYXRoIGQ9Ik01MzMuNzczIDIwLjk5MTFDNTI5LjI2MyAyMC45OTExIDUyNS41OTkgMjQuNjU0NyA1MjUuNTk5IDI5LjE2NDRDNTI1LjU5OSAzMy42NzQxIDUyOS4yNjMgMzcuMzM3NyA1MzMuNzczIDM3LjMzNzdDNTM4LjI4MiAzNy4zMzc3IDU0MS45NDYgMzMuNjc0MSA1NDEuOTQ2IDI5LjE2NDRDNTQxLjk0NiAyNC42NTQ3IDUzOC4yODIgMjAuOTkxMSA1MzMuNzczIDIwLjk5MTFaTTUzMy43NzMgMzYuNTE4NkM1MjkuNzEzIDM2LjUxODYgNTI2LjQxOSAzMy4yMTUgNTI2LjQxOSAyOS4xNjQ0QzUyNi40MTkgMjUuMTEzNyA1MjkuNzEzIDIxLjgxMDIgNTMzLjc3MyAyMS44MTAyQzUzNy44MzIgMjEuODEwMiA1NDEuMTI3IDI1LjExMzcgNTQxLjEyNyAyOS4xNjQ0QzU0MS4xMjcgMzMuMjE1IDUzNy44MzIgMzYuNTE4NiA1MzMuNzczIDM2LjUxODZaIiBmaWxsPSJibGFjayIvPg0KPHBhdGggZD0iTTUzNi42OSAyMy45MjUyQzUzNi42NjMgMjMuOTA3MiA1MzYuNjI3IDIzLjg5ODIgNTM2LjU5MSAyMy44OTgyQzUzNi40ODMgMjMuODk4MiA1MzYuNDAyIDIzLjk3OTIgNTM2LjQwMiAyNC4wODczVjI2LjY0MzdDNTM2LjQwMiAyNi43MzM3IDUzNi4zMyAyNi44MDU3IDUzNi4yNCAyNi44MDU3SDUzMS4yOUM1MzEuMiAyNi44MDU3IDUzMS4xMzcgMjYuNzMzNyA1MzEuMTI4IDI2LjY0MzdWMjQuMDg3M0M1MzEuMTI4IDI0LjA1MTMgNTMxLjExOSAyNC4wMjQyIDUzMS4xMDEgMjMuOTg4MkM1MzEuMDQ3IDIzLjg5ODIgNTMwLjkzIDIzLjg3MTIgNTMwLjgzOSAyMy45MjUyQzUyOS4wMTIgMjUuMDUwNCA1MjcuOTA1IDI3LjAwMzcgNTI3LjkwNSAyOS4xNjQxQzUyNy45MDUgMzEuMzI0NCA1MjkuMDEyIDMzLjI3NzcgNTMwLjg1NyAzNC40MDI5QzUzMC44ODUgMzQuNDIwOSA1MzAuOTIxIDM0LjQyOTkgNTMwLjk1NyAzNC40Mjk5QzUzMS4wNjUgMzQuNDI5OSA1MzEuMTQ2IDM0LjM0ODkgNTMxLjE0NiAzNC4yNDA5VjMxLjY4NDVDNTMxLjE0NiAzMS41OTQ0IDUzMS4yMTggMzEuNTMxNCA1MzEuMzA4IDMxLjUyMjRINTM2LjI1OEM1MzYuMzQ4IDMxLjUyMjQgNTM2LjQyIDMxLjU5NDQgNTM2LjQyIDMxLjY4NDVWMzQuMjQwOUM1MzYuNDIgMzQuMjc2OSA1MzYuNDI5IDM0LjMwMzkgNTM2LjQ0NyAzNC4zMzk5QzUzNi41MDEgMzQuNDI5OSA1MzYuNjE4IDM0LjQ1NjkgNTM2LjcwOCAzNC40MDI5QzUzOC41NTQgMzMuMjc3NyA1MzkuNjYxIDMxLjMyNDQgNTM5LjY2MSAyOS4xNjQxQzUzOS42NjEgMjcuMDAzNyA1MzguNTM2IDI1LjA1MDQgNTM2LjY5IDIzLjkyNTJWMjMuOTI1MlpNNTMwLjE5MSAzMi4zNjg2TDUzMC4yMTggMzIuNjc0Nkw1MzAuMDIgMzIuNDMxNkM1MjguNDk5IDMwLjUxNDMgNTI4LjQ5OSAyNy44MDQ4IDUzMC4wMiAyNS44ODc1TDUzMC4xOTEgMjUuNjcxNUw1MzAuMjE4IDI1LjY0NDVMNTMwLjE5MSAyNS45NTk2QzUzMC4xNjQgMjYuMjExNiA1MzAuMTU1IDI2LjQ3MjYgNTMwLjE1NSAyNi43MzM3VjMxLjU4NTRDNTMwLjE1NSAzMS44NDY1IDUzMC4xNzMgMzIuMTA3NSA1MzAuMTkxIDMyLjM2ODZaTTUzNi40MDIgMzAuMzg4M0M1MzYuNDAyIDMwLjQ3ODMgNTM2LjMzIDMwLjU1MDMgNTM2LjI0IDMwLjU1MDNINTMxLjI5QzUzMS4yIDMwLjU1MDMgNTMxLjEzNyAzMC40NzgzIDUzMS4xMjggMzAuMzg4M1YyNy45Mzk5QzUzMS4xMjggMjcuODQ5OSA1MzEuMiAyNy43Nzc4IDUzMS4yOSAyNy43Nzc4SDUzNi4yNEM1MzYuMzMgMjcuNzc3OCA1MzYuNDAyIDI3Ljg0OTkgNTM2LjQwMiAyNy45Mzk5VjMwLjM4ODNaTTUzNy41MTkgMzIuNDMxNkw1MzcuMzIxIDMyLjY3NDZMNTM3LjM0OCAzMi4zNjg2QzUzNy4zNzUgMzIuMTE2NSA1MzcuMzg0IDMxLjg1NTUgNTM3LjM4NCAzMS41OTQ0VjI2LjczMzdDNTM3LjM4NCAyNi40NzI2IDUzNy4zNzUgMjYuMjExNiA1MzcuMzQ4IDI1Ljk1OTZMNTM3LjMzOSAyNS44MjQ1TDUzNy4zMyAyNS42ODA1VjI1LjY0NDVMNTM3LjUxOSAyNS44ODc1QzUzOC4yNTcgMjYuODA1NyA1MzguNjYyIDI3Ljk3NTkgNTM4LjY2MiAyOS4xNTUxQzUzOC42NjIgMzAuMzM0MiA1MzguMjU3IDMxLjUxMzQgNTM3LjUxOSAzMi40MzE2VjMyLjQzMTZaIiBmaWxsPSJibGFjayIvPg0KPHBhdGggZD0iTTU1NC4yNzYgMjkuMDIwMkM1NTQuMjMxIDI5LjAwMjIgNTU0LjE3NyAyOC45ODQyIDU1NC4xNzcgMjguOTMwMkM1NTQuMTc3IDI4Ljg5NDIgNTU0LjE5NSAyOC44NjcyIDU1NC4yMzEgMjguODQ5MkM1NTQuMjk0IDI4LjgyMjIgNTU1Ljg1MSAyOC4yNjQxIDU1NS44NTEgMjYuNDI3OEM1NTUuODUxIDI0LjM4NDUgNTU0LjQ3NCAyMy4xNjkzIDU1Mi4xNTIgMjMuMTY5M0g1NDYuNTI2VjM1LjE3NzJINTUyLjY2NUM1NTQuNDU2IDM1LjE3NzIgNTU2LjM4MiAzMy45MDggNTU2LjM4MiAzMS44NjQ2QzU1Ni4zODIgMjkuOTExMyA1NTQuOTA2IDI5LjIyNzIgNTU0LjI3NiAyOS4wMjAyVjI5LjAyMDJaTTU0OS4zNjEgMjUuNjI2N0M1NDkuMzYxIDI1LjU4MTcgNTQ5LjM5NyAyNS41NDU2IDU0OS40NDIgMjUuNTQ1Nkg1NTEuNjc1QzU1Mi40MTMgMjUuNTQ1NiA1NTIuOTE3IDI2LjA0MDcgNTUyLjkxNyAyNi43Nzg4QzU1Mi45MTcgMjcuMzU0OSA1NTIuNDY3IDI3Ljk3NiA1NTEuNjIxIDI3Ljk3Nkg1NDkuNDQyQzU0OS4zOTcgMjcuOTc2IDU0OS4zNjEgMjcuOTQgNTQ5LjM2MSAyNy44OTVWMjUuNjI2N1pNNTUxLjY3NSAzMi44MDk4SDU0OS40NDJDNTQ5LjM5NyAzMi44MDk4IDU0OS4zNjEgMzIuNzczOCA1NDkuMzYxIDMyLjcyODhWMzAuMzM0NEM1NDkuMzYxIDMwLjI4OTQgNTQ5LjM5NyAzMC4yNTM0IDU0OS40NDIgMzAuMjUzNEg1NTEuNjIxQzU1Mi42OTIgMzAuMjUzNCA1NTMuMzA0IDMwLjcxMjUgNTUzLjMwNCAzMS41MjI2QzU1My4zMDQgMzIuMzU5NyA1NTIuNzM3IDMyLjgwOTggNTUxLjY3NSAzMi44MDk4VjMyLjgwOThaTTU3NS4zODQgMjcuOTQ5TDU3NC45NTIgMjcuODU5QzU3My45OCAyNy42NTIgNTczLjAzNSAyNy4zOTA5IDU3My4wMzUgMjYuNTUzOEM1NzMuMDM1IDI1LjcxNjcgNTczLjgxOCAyNS4zMzg2IDU3NC41OTIgMjUuMzM4NkM1NzUuNTAxIDI1LjMzODYgNTc2LjQwMSAyNS43NDM3IDU3Ny4wODYgMjYuNDQ1OEw1NzguODY4IDI0LjY4MTVDNTc4LjEwMyAyMy44MzU0IDU3Ni43NDQgMjIuODYzMiA1NzQuNTQ3IDIyLjg2MzJDNTcxLjkwMSAyMi44NjMyIDU3MC4xMTggMjQuMzY2NSA1NzAuMTE4IDI2LjYwNzhDNTcwLjExOCAyOC45NzUyIDU3MS45ODIgMjkuODY2MyA1NzMuNTQ4IDMwLjE5OTRMNTczLjk3MSAzMC4yODk0QzU3NS40OTIgMzAuNjEzNSA1NzYuMjEyIDMwLjg1NjUgNTc2LjIxMiAzMS43MjA2QzU3Ni4yMTIgMzIuNDk0NyA1NzUuNTE5IDMzLjAwNzggNTc0LjQ5MyAzMy4wMDc4QzU3My4yODcgMzMuMDA3OCA1NzIuMjE2IDMyLjQ3NjcgNTcxLjQwNiAzMS40Nzc2TDU2OS41NzggMzMuMjY4OUM1NzAuNTUxIDM0LjQyMTEgNTcxLjgzOCAzNS40NjUyIDU3NC41MjkgMzUuNDY1MkM1NzYuODI1IDM1LjQ2NTIgNTc5LjE1NiAzNC4xMzMgNTc5LjE1NiAzMS41NzY2QzU3OS4xNDcgMjguOTU3MiA1NzcuMzY1IDI4LjM2MzEgNTc1LjM4NCAyNy45NDlWMjcuOTQ5Wk01OTkuMTAzIDIzLjE2OTNWMjcuNTYyQzU5OS4xMDMgMjcuNjA3IDU5OS4wNjcgMjcuNjQzIDU5OS4wMjIgMjcuNjQzSDU5NS4zMzFDNTk1LjI4NiAyNy42NDMgNTk1LjI1IDI3LjYwNyA1OTUuMjUgMjcuNTYyVjIzLjE2OTNINTkyLjIyNlYzNS4xNzcySDU5NS4yNVYzMC40NjA0QzU5NS4yNSAzMC40MTU0IDU5NS4yODYgMzAuMzc5NCA1OTUuMzMxIDMwLjM3OTRINTk5LjAyMkM1OTkuMDY3IDMwLjM3OTQgNTk5LjEwMyAzMC40MTU0IDU5OS4xMDMgMzAuNDYwNFYzNS4xNzcySDYwMi4xNDZWMjMuMTY5M0g1OTkuMTAzWk01ODYuMTQxIDMyLjcxOThDNTg0Ljc4MiAzMi43MTk4IDU4My4zMTUgMzEuNTg1NiA1ODMuMzE1IDI5LjA5MjJDNTgzLjMxNSAyNi44MTQ4IDU4NC42OTIgMjUuNjI2NyA1ODYuMDUxIDI1LjYyNjdDNTg3LjA0MSAyNS42MjY3IDU4Ny43MzQgMjYuMDQwNyA1ODguMjgzIDI2Ljk1ODlMNTkwLjYwNiAyNS40MTk2QzU4OS40MTggMjMuNjczMyA1ODguMDA0IDIyLjg4MTIgNTg2LjAzMyAyMi44ODEyQzU4Mi4xNzEgMjIuODgxMiA1ODAuNDQzIDI2LjAwNDcgNTgwLjQ0MyAyOS4wOTIyQzU4MC40NDMgMzIuODQ1OCA1ODIuNzI5IDM1LjQ2NTIgNTg1Ljk5NyAzNS40NjUyQzU4OC40MjcgMzUuNDY1MiA1ODkuNTM1IDM0LjU3NDEgNTkwLjY5NiAzMi45MjY4TDU4OC4zNTUgMzEuMzUxNkM1ODcuODMzIDMyLjE5NzcgNTg3LjI2NiAzMi43MTk4IDU4Ni4xNDEgMzIuNzE5OFpNNTYzLjE3OCAyMi44NjMyQzU1OS44NzUgMjIuODYzMiA1NTcuNjYxIDI1LjM5MjYgNTU3LjY2MSAyOS4xNjQyQzU1Ny42NjEgMzIuOTM1OCA1NTkuODc1IDM1LjQ2NTIgNTYzLjE3OCAzNS40NjUyQzU2Ni40ODIgMzUuNDY1MiA1NjguNjk2IDMyLjkzNTggNTY4LjY5NiAyOS4xNjQyQzU2OC42OTYgMjUuMzkyNiA1NjYuNDgyIDIyLjg2MzIgNTYzLjE3OCAyMi44NjMyVjIyLjg2MzJaTTU2My4xNzggMzIuNzE5OEM1NjEuNTU4IDMyLjcxOTggNTYwLjUxNCAzMS4zMjQ2IDU2MC41MTQgMjkuMTY0MkM1NjAuNTE0IDI3LjAxMjkgNTYxLjU1OCAyNS42MjY3IDU2My4xNzggMjUuNjI2N0M1NjQuODA4IDI1LjYyNjcgNTY1Ljg2MSAyNy4wMTI5IDU2NS44NjEgMjkuMTY0MkM1NjUuODYxIDMxLjMyNDYgNTY0LjgwOCAzMi43MTk4IDU2My4xNzggMzIuNzE5OFoiIGZpbGw9IiNGODAwMDAiLz4NCjwvZz4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQ2LjM0NCAyMi4xODExQzE0Ny41OTUgMjIuMjg1NCAxNDguODQ1IDIxLjU1NTMgMTQ5LjYyNyAyMC42Mjk4QzE1MC4zOTUgMTkuNjc4MSAxNTAuOTAzIDE4LjQwMDUgMTUwLjc3MyAxNy4wOTY5QzE0OS42NjYgMTcuMTQ5MSAxNDguMjk4IDE3LjgyNjkgMTQ3LjUxNyAxOC43Nzg2QzE0Ni44IDE5LjU5OTkgMTQ2LjE4OCAyMC45Mjk2IDE0Ni4zNDQgMjIuMTgxMVpNMTQ3Ljg0MSAyMy4wNzk3QzE0OC42NTMgMjIuNzYwNiAxNDkuNjU4IDIyLjM2NTYgMTUwLjc2IDIyLjQyOTFDMTUxLjQ2MyAyMi40ODEyIDE1My40OTUgMjIuNjg5OCAxNTQuNzk4IDI0LjYxOTJDMTU0Ljc5MiAyNC42MjM3IDE1NC43NzggMjQuNjMyMyAxNTQuNzU5IDI0LjY0NUMxNTQuNDM2IDI0Ljg1NDggMTUyLjM5IDI2LjE4NzEgMTUyLjQxNCAyOC44MTY5QzE1Mi40MzkgMzEuOTQ5OSAxNTQuOTg4IDMzLjExODMgMTU1LjMyMiAzMy4yNzExQzE1NS4zNDQgMzMuMjgxMSAxNTUuMzU2IDMzLjI4NjcgMTU1LjM1OCAzMy4yODgzQzE1NS4zNTYgMzMuMjkyNiAxNTUuMzU0IDMzLjMwMSAxNTUuMzUgMzMuMzEzM0MxNTUuMjgzIDMzLjUyODggMTU0Ljg0NSAzNC45NDg5IDE1My44NDcgMzYuNDA0QzE1Mi45MjIgMzcuNzU5OCAxNTEuOTcxIDM5LjA4OTUgMTUwLjQ2IDM5LjExNTZDMTQ5Ljc0OSAzOS4xMjgzIDE0OS4yNyAzOC45MjExIDE0OC43NzIgMzguNzA1NEMxNDguMjQ3IDM4LjQ3ODUgMTQ3LjcwMSAzOC4yNDIyIDE0Ni44NCAzOC4yNDIyQzE0NS45NDcgMzguMjQyMiAxNDUuMzc2IDM4LjQ4NDggMTQ0LjgyNiAzOC43MTg0QzE0NC4zNDggMzguOTIxNCAxNDMuODg3IDM5LjExNzQgMTQzLjI0NSAzOS4xNDE3QzE0MS43ODYgMzkuMTkzOCAxNDAuNjc5IDM3LjcwNzcgMTM5Ljc1NCAzNi4zNTE5QzEzNy44NjYgMzMuNjE0MyAxMzYuNDIgMjguNjM0NCAxMzguMzc0IDI1LjI3MUMxMzkuMzI1IDIzLjU4OTMgMTQxLjA1NyAyMi41MzM0IDE0Mi45MTkgMjIuNTA3M0MxNDMuNzMyIDIyLjQ5MjUgMTQ0LjUwNyAyMi44MDA2IDE0NS4xODQgMjMuMDcwMUMxNDUuNzAyIDIzLjI3NTggMTQ2LjE2MiAyMy40NTg5IDE0Ni41NCAyMy40NTg5QzE0Ni44NzcgMjMuNDU4OSAxNDcuMzE5IDIzLjI4NTEgMTQ3Ljg0MSAyMy4wNzk3WiIgZmlsbD0iYmxhY2siLz4NCjxwYXRoIGQ9Ik0zNi44NTg3IDM3LjUyNDFIMzEuOTg3NEwzNS4wMzQyIDE5LjY2NjhIMzkuOTA1MkwzNi44NTg3IDM3LjUyNDFaIiBmaWxsPSIjMDA1NzlGIi8+DQo8cGF0aCBkPSJNNTQuNTE1NyAyMC4xMDQxQzUzLjU1NDkgMTkuNzQyOCA1Mi4wMzA5IDE5LjM0MzggNTAuMTQ2NiAxOS4zNDM4QzQ1LjMzNjEgMTkuMzQzOCA0MS45NDg2IDIxLjc3NTMgNDEuOTI3OCAyNS4yNTE2QzQxLjg4NzggMjcuODE2NSA0NC4zNTMxIDI5LjI0MSA0Ni4xOTcgMzAuMDk2MkM0OC4wODE2IDMwLjk3MDEgNDguNzIyMyAzMS41NDA1IDQ4LjcyMjMgMzIuMzE5NEM0OC43MDMxIDMzLjUxNTcgNDcuMTk5NCAzNC4wNjcyIDQ1Ljc5NjkgMzQuMDY3MkM0My44NTIxIDM0LjA2NzIgNDIuODEgMzMuNzgyOSA0MS4yMjY0IDMzLjExNzNMNDAuNTg1IDMyLjgzMkwzOS45MDMzIDM2Ljg0MDZDNDEuMDQ1OCAzNy4zMzM5IDQzLjE1MDcgMzcuNzcxNyA0NS4zMzYxIDM3Ljc5MDlDNTAuNDQ3MyAzNy43OTA5IDUzLjc3NDkgMzUuMzk3MSA1My44MTQzIDMxLjY5MjVDNTMuODMzOCAyOS42NTk3IDUyLjUzMiAyOC4xMDIgNDkuNzI1NCAyNi44MjkyQzQ4LjAyMTcgMjYuMDEyMSA0Ni45NzgzIDI1LjQ2MTIgNDYuOTc4MyAyNC42MjUyQzQ2Ljk5ODMgMjMuODY1MiA0Ny44NjA4IDIzLjA4NjggNDkuNzg0IDIzLjA4NjhDNTEuMzY3NyAyMy4wNDg2IDUyLjUzMTIgMjMuNDA5NCA1My40MTI2IDIzLjc3MDVMNTMuODUzMiAyMy45NjAxTDU0LjUxNTcgMjAuMTA0MVoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik02MC45OTI0IDMxLjE5NzlDNjEuMzkzNiAzMC4xNzIgNjIuOTM3MiAyNi4yMDE2IDYyLjkzNzIgMjYuMjAxNkM2Mi45MTcgMjYuMjM5NyA2My4zMzc2IDI1LjE1NjggNjMuNTc4MSAyNC40OTE5TDYzLjkxODYgMjYuMDMwNkM2My45MTg2IDI2LjAzMDYgNjQuODQxIDMwLjMwNTEgNjUuMDQxNCAzMS4xOTc5QzY0LjI4IDMxLjE5NzkgNjEuOTU0NiAzMS4xOTc5IDYwLjk5MjQgMzEuMTk3OVpNNjcuMDA1NCAxOS42NjY4SDYzLjIzNzRDNjIuMDc1NSAxOS42NjY4IDYxLjE5MjcgMTkuOTg5NSA2MC42OTE0IDIxLjE0ODRMNTMuNDU1OCAzNy41MjM5SDU4LjU2NzFDNTguNTY3MSAzNy41MjM5IDU5LjQwODUgMzUuMzE5OSA1OS41ODk0IDM0Ljg0NTJDNjAuMTUwMSAzNC44NDUyIDY1LjEyMjMgMzQuODQ1MiA2NS44NDM3IDM0Ljg0NTJDNjUuOTgzNSAzNS40NzIxIDY2LjQyNDkgMzcuNTIzOSA2Ni40MjQ5IDM3LjUyMzlINzAuOTM1Mkw2Ny4wMDU0IDE5LjY2NjhWMTkuNjY2OFoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik0yNy45MTggMTkuNjY2OEwyMy4xNDc1IDMxLjg0MzhMMjIuNjI2MiAyOS4zNzQxQzIxLjc0NDIgMjYuNTI0NSAxOC45NzgxIDIzLjQyODQgMTUuODkxNCAyMS44ODlMMjAuMjYxIDM3LjUwNTJIMjUuNDEyMkwzMy4wNjkgMTkuNjY2OEgyNy45MThWMTkuNjY2OFoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik0xOC43MTg0IDE5LjY2NjhIMTAuODgxMUwxMC44MDA5IDIwLjAyNzZDMTYuOTE0NSAyMS41MDk1IDIwLjk2MzUgMjUuMDgxNSAyMi42MjcgMjkuMzc0OUwyMC45MjMyIDIxLjE2NzlDMjAuNjQyNyAyMC4wMjc0IDE5Ljc4MDcgMTkuNzA0NCAxOC43MTg0IDE5LjY2NjhaIiBmaWxsPSIjRkFBNjFBIi8+DQo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDJfNThfMTExKSI+DQo8cGF0aCBkPSJNMjIxLjE1OCAxNy40OTlWMTguOTM1NkgyMzEuMzA2VjE3LjQ5OUgyMjEuMTU4Wk0yMzIuNzQ0IDE3LjQ5OVYxOC45MzU2SDI0Ny4yMDZDMjQ3LjIwNiAxOC45MzU2IDI0NS43MjkgMTcuNDk5IDI0My43NzMgMTcuNDk5SDIzMi43NDRaTTI1MC4wNDMgMTcuNDk5VjE4LjkzNTZIMjU4Ljc5M0wyNTguMjczIDE3LjQ5OUgyNTAuMDQzWk0yNjUuMDY1IDE3LjQ5OUwyNjQuNTQ2IDE4LjkzNTZIMjczLjIxNlYxNy40OTlIMjY1LjA2NVpNMjIxLjE1OCAyMC4yOTI5VjIxLjcyOTZIMjMxLjMwNlYyMC4yOTI5SDIyMS4xNThaTTIzMi43NDQgMjAuMjk1VjIxLjcyOTdIMjQ4Ljg4NEMyNDguODg0IDIxLjcyOTcgMjQ4LjY5NiAyMC42MjM5IDI0OC4zNjcgMjAuMjk1SDIzMi43NDRaTTI1MC4wNDMgMjAuMjk1VjIxLjcyOTdIMjU5Ljc1MkwyNTkuMjcxIDIwLjI5NUgyNTAuMDQzWk0yNjQuMDI3IDIwLjI5NUwyNjMuNTQ2IDIxLjcyOTdIMjczLjIxNlYyMC4yOTVIMjY0LjAyN1YyMC4yOTVaTTIyNC4wNzQgMjMuMDg2OVYyNC41MjU3SDIyOC40NjlWMjMuMDg2OUgyMjQuMDc0VjIzLjA4NjlaTTIzNS42NjEgMjMuMDg2OVYyNC41MjU3SDI0MC4wNTZWMjMuMDg2OUgyMzUuNjYxVjIzLjA4NjlaTTI0NC4zMzEgMjMuMDg2OVYyNC41MjU3SDI0OC43MjZDMjQ4LjcyNiAyNC41MjU3IDI0OS4wMDUgMjMuNzY1OSAyNDkuMDA1IDIzLjA4NjlIMjQ0LjMzMVYyMy4wODY5Wk0yNTIuOTYgMjMuMDg2OVYyNC41MjU3SDI2MC43NTJMMjYwLjIzMiAyMy4wODY5SDI1Mi45NlYyMy4wODY5Wk0yNjMuMDY5IDIzLjA4NjlMMjYyLjU0OCAyNC41MjU3SDI3MC4zNzlWMjMuMDg2OUgyNjMuMDY5VjIzLjA4NjlaTTIyNC4wNzQgMjUuODgzVjI3LjMxOTdIMjI4LjQ2OVYyNS44ODNIMjI0LjA3NFYyNS44ODNaTTIzNS42NjEgMjUuODgzVjI3LjMxOTdIMjQ2Ljg4N0MyNDYuODg3IDI3LjMxOTcgMjQ3LjgyNiAyNi41ODI1IDI0OC4xMjUgMjUuODgzSDIzNS42NjFaTTI1Mi45NiAyNS44ODNWMjcuMzE5N0gyNTcuMzU1VjI2LjUyTDI1Ny42MzQgMjcuMzE5N0gyNjUuNjg0TDI2NS45ODQgMjYuNTJWMjcuMzE5N0gyNzAuMzc5VjI1Ljg4M0gyNjIuMTI5TDI2MS42OTEgMjcuMDk5OUwyNjEuMjUxIDI1Ljg4M0gyNTIuOTZaTTIyNC4wNzQgMjguNjc3VjMwLjExMzdIMjI4LjQ2OVYyOC42NzdIMjI0LjA3NFpNMjM1LjY2MSAyOC42NzdWMzAuMTEzN0gyNDguMTI1QzI0Ny44MjYgMjkuNDE2NSAyNDYuODg3IDI4LjY3NyAyNDYuODg3IDI4LjY3N0gyMzUuNjYxWk0yNTIuOTYgMjguNjc3VjMwLjExMzdIMjU3LjM1NVYyOC42NzdIMjUyLjk2Wk0yNTguMTUzIDI4LjY3N0wyNTguNjg1IDMwLjExMzdIMjY0LjcyMUwyNjUuMjI2IDI4LjY3N0gyNTguMTUzWk0yNjUuOTg0IDI4LjY3N1YzMC4xMTM3SDI3MC4zNzlWMjguNjc3SDI2NS45ODRaTTIyNC4wNzQgMzEuNDcxVjMyLjkwNzZIMjI4LjQ2OVYzMS40NzFIMjI0LjA3NFpNMjM1LjY2MSAzMS40NzFWMzIuOTA3NkgyNDAuMDU2VjMxLjQ3MUgyMzUuNjYxWk0yNDQuMzMxIDMxLjQ3MVYzMi45MDc2SDI0OS4wMDVDMjQ5LjAwNSAzMi4yMjk2IDI0OC43MjYgMzEuNDcxIDI0OC43MjYgMzEuNDcxSDI0NC4zMzFWMzEuNDcxWk0yNTIuOTYgMzEuNDcxVjMyLjkwNzZIMjU3LjM1NVYzMS40NzFIMjUyLjk2Wk0yNTkuMTUxIDMxLjQ3MUwyNTkuNjY2IDMyLjkwNzZIMjYzLjcxM0wyNjQuMjMyIDMxLjQ3MUgyNTkuMTUxWk0yNjUuOTg0IDMxLjQ3MVYzMi45MDc2SDI3MC4zNzlWMzEuNDcxSDI2NS45ODRaTTIyMS4yMzcgMzQuMjY1VjM1LjcwMzdIMjMxLjM4NlYzNC4yNjVIMjIxLjIzN1pNMjMyLjc0NCAzNC4yNjVWMzUuNzAzN0gyNDguMzY3QzI0OC42OTYgMzUuMzc0MyAyNDguODg0IDM0LjI2NSAyNDguODg0IDM0LjI2NUgyMzIuNzQ0VjM0LjI2NVpNMjUwLjEyMyAzNC4yNjVWMzUuNzAzN0gyNTcuMzU1VjM0LjI2NUgyNTAuMTIzWk0yNjAuMTUxIDM0LjI2NUwyNjAuNjggMzUuNzAzN0gyNjIuNzM5TDI2My4yMzYgMzQuMjY1SDI2MC4xNTFaTTI2NS45ODQgMzQuMjY1VjM1LjcwMzdIMjczLjI5NVYzNC4yNjVIMjY1Ljk4NFpNMjIxLjIzNyAzNy4wNjFWMzguNDk3N0gyMzEuMzg2VjM3LjA2MUgyMjEuMjM3Wk0yMzIuNzQ0IDM3LjA2MVYzOC40OTU2SDI0My43NzNDMjQ1LjcyOSAzOC40OTU2IDI0Ny4yMDYgMzcuMDYxIDI0Ny4yMDYgMzcuMDYxSDIzMi43NDRaTTI1MC4xMjMgMzcuMDYxVjM4LjQ5NzdIMjU3LjM1NVYzNy4wNjFIMjUwLjEyM1pNMjYxLjE1NSAzNy4wNjFMMjYxLjY2NCAzOC40OTM2TDI2MS43NTIgMzguNDk1NkwyNjIuMjY5IDM3LjA2MUgyNjEuMTU1VjM3LjA2MVpNMjY1Ljk4NCAzNy4wNjFWMzguNDk3N0gyNzMuMjk1VjM3LjA2MUgyNjUuOTg0WiIgZmlsbD0iIzFGNzBDMSIvPg0KPC9nPg0KPGRlZnM+DQo8Y2xpcFBhdGggaWQ9ImNsaXAwXzU4XzExMSI+DQo8cmVjdCB3aWR0aD0iNDQuNDQ3MyIgaGVpZ2h0PSIyOS42MzE1IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUzLjk1NSAxNC44MTU1KSIvPg0KPC9jbGlwUGF0aD4NCjxjbGlwUGF0aCBpZD0iY2xpcDFfNThfMTExIj4NCjxyZWN0IHdpZHRoPSI3Ni41NDgxIiBoZWlnaHQ9IjE2LjM1MDciIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MjUuNTk5IDIwLjk4ODkpIi8+DQo8L2NsaXBQYXRoPg0KPGNsaXBQYXRoIGlkPSJjbGlwMl81OF8xMTEiPg0KPHJlY3Qgd2lkdGg9IjUyLjEzNzIiIGhlaWdodD0iMjAuOTk4NyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMS4xNTggMTcuNDk5KSIvPg0KPC9jbGlwUGF0aD4NCjwvZGVmcz4NCjwvc3ZnPg0K\\\" style=\\\"\\n width: 742.5px;\\n position: relative;\\n top: 107px;\\n left: 32px;\\n \\\">\\n <a href=\" + accountURL + \" style=\\\"\\n float: left;\\n border-radius: 56px;\\n background: #0D6EFD;\\n padding-top: 8px;\\n width: 280px;\\n height: 38px;\\n text-align: center;\\n position: relative;\\n top: 127px;\\n left: 274px;\\n font-size: 16px;\\n color: white;\\n text-decoration: none;\\n letter-spacing: 0.02em;\\n \\\">Claim your FREE account</a>\\n <div style=\\\"\\n font-size: 14px;\\n position: relative;\\n top: 180px;\\n left: 19px;\\n letter-spacing: 0.02em;\\n font-weight: 500;\\n line-height: 125%;\\n\\\">have a Syncfusion account? <a href=\\\"https://www.syncfusion.com/account/login?ReturnUrl=/account/login\\\" style=\\\"text-decoration: none;\\ncolor: #0D6EFD;\\nfont-weight: 500;\\\">Sign In</a></div>\\n </div>\\n </div>\";\n if (typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n var errorBackground = createElement('div', {\n innerHTML: bannerTemplate\n });\n document.body.appendChild(errorBackground);\n }\n};\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 { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, isBlazor } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass, select } from './dom';\nimport { validateLicense, createLicenseOverlay, componentList } from './validate-lic';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n// Decalre the static variable to count the instance\nvar instancecount = 0;\n// Decalre the static variable to find if control limit exceed or not\nvar isvalid = true;\n// We have added styles to inline type so here declare the static variable to detect if banner is added or not\nvar isBannerAdded = false;\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\nexport function enableVersionBasedPersistence(status) {\n versionBasedStatePersistence = status;\n}\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n *\n * @param {Object} options ?\n * @param {string} selector ?\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n /**\n * string template option for Blazor template rendering\n *\n * @private\n */\n _this.isStringTemplate = false;\n _this.needsID = false;\n _this.isReactHybrid = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n // Based on the considered control list we have count the instance\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\" && !validateLicense()) {\n if (componentList.indexOf(_this.getModuleName()) !== -1) {\n instancecount = instancecount + 1;\n if (instancecount > 5) {\n isvalid = false;\n }\n }\n }\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n /**\n * Destroys the sub modules while destroying the widget\n *\n * @returns {void} ?\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n removeClass([this.element], ['e-control']);\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n *\n * @returns {void} ?\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n Component.prototype.accessMount = function () {\n if (this.mount && !this.isReactHybrid) {\n this.mount();\n }\n };\n /**\n * Returns the route element of the component\n *\n * @returns {HTMLElement} ?\n */\n Component.prototype.getRootElement = function () {\n if (this.isReactHybrid) {\n // eslint-disable-next-line\n return this.actualElement;\n }\n else {\n return this.element;\n }\n };\n /**\n * Returns the persistence data for component\n *\n * @returns {any} ?\n */\n // eslint-disable-next-line\n Component.prototype.getLocalData = function () {\n var eleId = this.getModuleName() + this.element.id;\n if (versionBasedStatePersistence) {\n return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n }\n else {\n return window.localStorage.getItem(eleId);\n }\n };\n /**\n * Appends the control within the given HTML element\n *\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n * @returns {void} ?\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = select(selector, document);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n // Checked weather cases are valid or not. If control leads to more than five counts \n if (!isvalid && !isBannerAdded) {\n createLicenseOverlay();\n isBannerAdded = true;\n }\n this.render();\n if (!this.mount) {\n this.trigger('created');\n }\n else {\n this.accessMount();\n }\n }\n };\n /**\n * It is used to process the post rendering functionalities to a component.\n *\n * @param {Node} wrapperElement ?\n * @returns {void} ?\n */\n Component.prototype.renderComplete = function (wrapperElement) {\n if (isBlazor()) {\n var sfBlazor = 'sfBlazor';\n // eslint-disable-next-line\n window[sfBlazor].renderComplete(this.element, wrapperElement);\n }\n this.isRendered = true;\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n *\n * @returns {void} ?\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @returns {void} ?\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n *\n * @returns {Function} ?\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @param {Function} moduleList ?\n * @returns {void} ?\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[parseInt(i.toString(), 10)]) === -1) {\n this.prototype.injectedModules.push(moduleList[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * This is a instance method to create an element.\n *\n * @param {string} tagName ?\n * @param {ElementProperties} prop ?\n * @param {boolean} isVDOM ?\n * @returns {any} ?\n * @private\n */\n // eslint-disable-next-line\n Component.prototype.createElement = function (tagName, prop, isVDOM) {\n return createElement(tagName, prop);\n };\n /**\n *\n * @param {Function} handler - handler to be triggered after state Updated.\n * @param {any} argument - Arguments to be passed to caller.\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n // eslint-disable-next-line\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n // tslint: enable: no-any\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.detectFunction = function (args) {\n var prop = Object.keys(args);\n if (prop.length) {\n this[prop[0]] = args[prop[0]];\n }\n };\n Component.prototype.mergePersistData = function () {\n var data;\n if (versionBasedStatePersistence) {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n }\n else {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n }\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n if (versionBasedStatePersistence) {\n window.localStorage.setItem(this.getModuleName() +\n this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n }\n else {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n }\n };\n // eslint-disable-next-line\n Component.prototype.renderReactTemplates = function (callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\n // eslint-disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n // eslint-disable-next-line\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // eslint-disable-next-line\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n var regExp = RegExp;\n return new regExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[\"\" + key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[\"\" + key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection\n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(/if|/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s-+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\nvar SINGLE_SLASH = /\\\\/gi;\nvar DOUBLE_SLASH = /\\\\\\\\/gi;\nvar WORDFUNC = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar WINDOWFUNC = /\\window\\./gm;\n/**\n * The function to set regular expression for template expression string.\n *\n * @param {RegExp} value - Value expression.\n * @returns {RegExp} ?\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n *\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper - Helper functions as an object.\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n * @private\n */\nexport function compile(template, helper, ignorePrefix) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\n // eslint-disable-next-line\n var condtion = \"var valueRegEx = (/value=\\\\'([A-Za-z0-9 _]*)((.)([\\\\w)(!-;?-\\u25A0\\\\s]+)['])/g);\\n var hrefRegex = (/(?:href)([\\\\s='\\\"./]+)([\\\\w-./?=&\\\\\\\\#\\\"]+)((.)([\\\\w)(!-;/?-\\u25A0\\\\s]+)['])/g);\\n if(str.match(valueRegEx)){\\n var check = str.match(valueRegEx);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(valueRegEx)[i].split('value=')[1];\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n str = str.replace(str, str1);\\n }\\n else if (str.match(/(?:href='')/) === null) {\\n if(str.match(hrefRegex)) {\\n var check = str.match(hrefRegex);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(hrefRegex)[i].split('href=')[1];\\n if (check1) {\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n }\\n str = str.replace(str, str1);\\n }\\n }\\n \";\n var fnCode = 'var str=\\\"' + evalExpResult + '\\\";' + condtion + ' return str;';\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n/** function used to evaluate the function expression\n *\n * @param {string} str ?\n * @param {string} nameSpace ?\n * @param {Object} helper ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction evalExp(str, nameSpace, helper, ignorePrefix) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n var isClass = str.match(/class=\"([^\"]+|)\\s{2}/g);\n var singleSpace = '';\n if (isClass) {\n isClass.forEach(function (value) {\n singleSpace = value.replace(/\\s\\s+/g, ' ');\n str = str.replace(value, singleSpace);\n });\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, \n // eslint-disable-next-line\n function (match, cnt, offset, matchStr) {\n var SPECIAL_CHAR = /@|#|\\$/gm;\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n // eslint-disable-next-line\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n // eslint-disable-next-line\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n var ftArray = matches[1].split(',');\n if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n }\n var splRegexp = /@|\\$|#/gm;\n var arrObj = /\\]\\./gm;\n if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n var splArrRegexp = /@|\\$|#|\\]\\./gm;\n if (splArrRegexp.test(cnt)) {\n // tslint:disable-next-line\n cnt = '\"+ ' + (fNameSpace === 'global' ? '' : fNameSpace) + cnt.replace(matches[1], rlStr.replace(WORDFUNC, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '+ \"';\n }\n }\n else {\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys, ignorePrefix)) +\n '+\"';\n }\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n // handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n // eslint-disable-next-line\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition\n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else if (SPECIAL_CHAR.test(cnt)) {\n // template string with double slash with special character\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n }\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // template string with double slash\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = cnt !== '' ? '\"+' + addNameSpace(cnt.replace(/,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys, ignorePrefix) + '+\"' : ' ';\n }\n }\n return cnt;\n });\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, ignorePrefix) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1 && !ignorePrefix) ? nameSpace + '.' + str : str);\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n var arrObjReg = /^\\..*/gm;\n return ((addNS && !(NOT_NUMBER.test(str)) &&\n ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n// eslint-disable-next-line\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n // eslint-disable-next-line\n tempStr = tempStr;\n }\n else {\n tempStr = tempStr.replace(SINGLE_SLASH, double);\n }\n return tempStr;\n}\n/**\n *\n * @param {string} str ?\n * @param {string} nameSpaceNew ?\n * @param {string[]} keys ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, ignorePrefix) {\n str = str.trim();\n var windowFunc = /\\window\\./gm;\n if (!windowFunc.test(str)) {\n var quotes = /'|\"/gm;\n var splRegexp = /@|\\$|#/gm;\n if (splRegexp.test(str)) {\n str = NameSpaceForspecialChar(str, (keys.indexOf(str) === -1), nameSpaceNew, keys) + '\"]';\n }\n if (ARR_OBJ.test(str)) {\n return NameSpaceArrObj(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys);\n }\n else {\n return addNameSpace(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys, ignorePrefix);\n }\n }\n else {\n return str;\n }\n}\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined, isBlazor } from './util';\nvar HAS_ROW = /^[\\n\\r.]+<tr|^<tr/;\nvar HAS_SVG = /^[\\n\\r.]+<svg|^<path|^<g/;\nexport var blazorTemplates = {};\n/**\n *\n * @returns {string} ?\n */\nexport function getRandomId() {\n return '-' + Math.random().toString(36).substr(2, 5);\n}\n/**\n * Compile the template string into template function.\n *\n * @param {string} templateString - The template string which is going to convert.\n * @param {Object} helper - Helper functions as an object.\n * @param {boolean} ignorePrefix ?\n * @returns {NodeList} ?\n * @private\n */\n// eslint-disable-next-line\nexport function compile(templateString, helper, ignorePrefix) {\n var compiler = engineObj.compile(templateString, helper, ignorePrefix);\n // eslint-disable-next-line\n return function (data, component, propName, templateId, isStringTemplate, index, element, root) {\n var result = compiler(data, component, propName, element, root);\n var blazorTemplateId = 'BlazorTemplateId';\n if (isBlazor() && !isStringTemplate) {\n var randomId = getRandomId();\n var blazorId = templateId + randomId;\n if (!blazorTemplates[\"\" + templateId]) {\n blazorTemplates[\"\" + templateId] = [];\n }\n if (!isNullOrUndefined(index)) {\n var keys = Object.keys(blazorTemplates[\"\" + templateId][parseInt(index.toString(), 10)]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key !== blazorTemplateId && data[\"\" + key]) {\n blazorTemplates[\"\" + templateId][parseInt(index.toString(), 10)][\"\" + key] = data[\"\" + key];\n }\n if (key === blazorTemplateId) {\n blazorId = blazorTemplates[\"\" + templateId][parseInt(index.toString(), 10)][\"\" + key];\n }\n }\n }\n else {\n data[\"\" + blazorTemplateId] = blazorId;\n blazorTemplates[\"\" + templateId].push(data);\n }\n // eslint-disable-next-line\n return propName === 'rowTemplate' ? [createElement('tr', { id: blazorId, className: 'e-blazor-template' })] :\n // eslint-disable-next-line\n [createElement('div', { id: blazorId, className: 'e-blazor-template' })];\n }\n if (typeof result === 'string') {\n if (HAS_SVG.test(result)) {\n var ele = createElement('svg', { innerHTML: result });\n return ele.childNodes;\n }\n else {\n var ele = createElement((HAS_ROW.test(result) ? 'table' : 'div'), { innerHTML: result });\n return ele.childNodes;\n }\n }\n else {\n return result;\n }\n };\n}\n/**\n *\n * @param {string} templateId ?\n * @param {string} templateName ?\n * @param {string} comp ?\n * @param {boolean} isEmpty ?\n * @param {Function} callBack ?\n * @returns {void} ?\n */\nexport function updateBlazorTemplate(templateId, templateName, comp, isEmpty, callBack) {\n if (isBlazor()) {\n var ejsIntrop = 'sfBlazor';\n window[\"\" + ejsIntrop].updateTemplate(templateName, blazorTemplates[\"\" + templateId], templateId, comp, callBack);\n if (isEmpty !== false) {\n blazorTemplates[\"\" + templateId] = [];\n }\n }\n}\n/**\n *\n * @param {string} templateId ?\n * @param {string} templateName ?\n * @param {number} index ?\n * @returns {void} ?\n */\nexport function resetBlazorTemplate(templateId, templateName, index) {\n var templateDiv = document.getElementById(templateId);\n if (templateDiv) {\n // eslint-disable-next-line\n var innerTemplates = templateDiv.getElementsByClassName('blazor-inner-template');\n for (var i = 0; i < innerTemplates.length; i++) {\n var tempId = ' ';\n if (!isNullOrUndefined(index)) {\n tempId = innerTemplates[parseInt(index.toString(), 10)].getAttribute('data-templateId');\n }\n else {\n tempId = innerTemplates[parseInt(i.toString(), 10)].getAttribute('data-templateId');\n }\n var tempElement = document.getElementById(tempId);\n if (tempElement) {\n var length_1 = tempElement.childNodes.length;\n for (var j = 0; j < length_1; j++) {\n if (!isNullOrUndefined(index)) {\n innerTemplates[parseInt(index.toString(), 10)].appendChild(tempElement.childNodes[0]);\n i = innerTemplates.length;\n }\n else {\n innerTemplates[parseInt(i.toString(), 10)].appendChild(tempElement.childNodes[0]);\n }\n }\n }\n }\n }\n}\n/**\n * Set your custom template engine for template rendering.\n *\n * @param {ITemplateEngine} classObj - Class object for custom template.\n * @returns {void} ?\n * @private\n */\nexport function setTemplateEngine(classObj) {\n engineObj.compile = classObj.compile;\n}\n/**\n * Get current template engine for template rendering\n *\n * @returns {string} ?\n * @private\n */\nexport function getTemplateEngine() {\n return engineObj.compile;\n}\n//Default Engine Class\nvar Engine = /** @class */ (function () {\n function Engine() {\n }\n // eslint-disable-next-line\n Engine.prototype.compile = function (templateString, helper, ignorePrefix) {\n if (helper === void 0) { helper = {}; }\n return render(templateString, helper);\n };\n return Engine;\n}());\nvar engineObj = { compile: new Engine().compile };\n","/***\n * Hijri parser\n */\n// eslint-disable-next-line\nexport var HijriParser;\n(function (HijriParser) {\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990,\n 29019, 29049, 29078, 29108, 29137, 29167, 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522,\n 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759, 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053,\n 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348, 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585,\n 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939, 30968, 30998, 31027, 31057, 31086, 31116,\n 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530, 31559, 31589, 31618, 31648,\n 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120, 32150, 32180,\n 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243,\n 33272, 33302, 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775,\n 33804, 33834, 33863, 33893, 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306,\n 34336, 34365, 34395, 34424, 34454, 34483, 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837,\n 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074, 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370,\n 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665, 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901,\n 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254, 36284, 36314, 36343, 36373, 36403, 36433,\n 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845, 36875, 36904, 36934, 36963,\n 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436, 37465, 37495,\n 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558,\n 38587, 38617, 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089,\n 39118, 39148, 39178, 39208, 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621,\n 39650, 39680, 39709, 39739, 39768, 39798, 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153,\n 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389, 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685,\n 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980, 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216,\n 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570, 41599, 41629, 41658, 41688, 41718, 41748,\n 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161, 42190, 42220, 42249, 42279,\n 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751, 42780, 42810,\n 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873,\n 43903, 43932, 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405,\n 44434, 44464, 44493, 44523, 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936,\n 44966, 44996, 45025, 45055, 45084, 45114, 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468,\n 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704, 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999,\n 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295, 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531,\n 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885, 46915, 46944, 46974, 47003, 47033, 47063,\n 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476, 47506, 47535, 47565, 47594,\n 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066, 48096, 48125,\n 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189,\n 49218, 49248, 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720,\n 49749, 49779, 49809, 49838, 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252,\n 50281, 50311, 50340, 50370, 50400, 50429, 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784,\n 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019, 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315,\n 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611, 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846,\n 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200, 52230, 52260, 52290, 52319, 52349, 52379,\n 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792, 52822, 52851, 52881, 52910,\n 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383, 53412, 53441,\n 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505,\n 54535, 54564, 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036,\n 55066, 55095, 55125, 55154, 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567,\n 55597, 55627, 55657, 55686, 55716, 55745, 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100,\n 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335, 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631,\n 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926, 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162,\n 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517, 57546, 57576, 57605, 57634, 57664, 57694,\n 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107, 58137, 58167, 58196, 58226,\n 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698, 58727, 58757,\n 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820,\n 59850, 59879, 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352,\n 60381, 60411, 60440, 60469, 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883,\n 60912, 60942, 60972, 61002, 61031, 61061, 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415,\n 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651, 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947,\n 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242, 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478,\n 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832, 62862, 62891, 62921, 62950, 62980, 63009,\n 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423, 63453, 63482, 63512, 63541,\n 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014, 64043, 64073,\n 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136,\n 65166, 65195, 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667,\n 65697, 65726, 65755, 65785, 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199,\n 66228, 66258, 66287, 66317, 66346, 66376, 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730,\n 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967, 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262,\n 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557, 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793,\n 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148, 68177, 68207, 68236, 68266, 68295, 68325,\n 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738, 68768, 68797, 68827, 68857,\n 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330, 69359, 69388,\n 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451,\n 70481, 70510, 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983,\n 71013, 71042, 71071, 71101, 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514,\n 71543, 71573, 71602, 71632, 71662, 71691, 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046,\n 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282, 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577,\n 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872, 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109,\n 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464, 73493, 73523, 73552, 73581, 73611, 73640,\n 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053, 74083, 74113, 74142, 74172,\n 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645, 74675, 74704,\n 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766,\n 75796, 75826, 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299,\n 76328, 76358, 76387, 76416, 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830,\n 76859, 76889, 76918, 76948, 76977, 77007, 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361,\n 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598, 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893,\n 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188, 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425,\n 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779, 78808, 78838, 78867, 78897, 78926, 78956,\n 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369, 79399, 79428, 79458, 79487,\n 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960, 79990\n ];\n /**\n *\n * @param {Date} gDate ?\n * @returns {Object} ?\n */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100.);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631. / 30.;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[parseInt(i.toString(), 10)] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n /**\n *\n * @param {number} year ?\n * @param {number} month ?\n * @param {number} day ?\n * @returns {Date} ?\n */\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue, isBlazor } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined, extend } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|K|cccc|ccc|WW|W|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n f: 'getMilliseconds'\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era',\n 'f': 'milliseconds'\n};\nvar timeSeparator = 'timeSeparator';\n/* tslint:disable no-any */\n/**\n * Date Format is a framework provides support for date formatting.\n *\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which date will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numObject = getValue('parserObject.numbers', dependable);\n var dateObject = dependable.dateObject;\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n if (isBlazor()) {\n resPattern = resPattern.replace(/tt/, 'a');\n }\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = isBlazor() ?\n extend({}, numObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n switch (char) {\n case 'E':\n case 'c':\n if (isBlazor()) {\n // eslint-disable-next-line\n formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n // eslint-disable-next-line\n formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n }\n break;\n case 'a':\n formatOptions.designator = isBlazor() ?\n getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n break;\n case 'G':\n // eslint-disable-next-line\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n *\n * @param {Date} value ?\n * @param {FormatOptions} options ?\n * @returns {string} ?\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var curvalstr = '';\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n // eslint-disable-next-line\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n // eslint-disable-next-line\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n case 'f':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else if (char === 'f') {\n isNumber = false;\n processNumber = true;\n // eslint-disable-next-line\n curvalstr = value[timeSetter[char]]().toString();\n curvalstr = curvalstr.substring(0, length_1);\n var curlength = curvalstr.length;\n if (length_1 !== curlength) {\n if (length_1 > 3) {\n continue;\n }\n for (var i = 0; i < length_1 - curlength; i++) {\n curvalstr = '0' + curvalstr.toString();\n }\n }\n curstr += curvalstr;\n }\n else {\n // eslint-disable-next-line\n curval = value[timeSetter[char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n // eslint-disable-next-line\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n // eslint-disable-next-line\n ret += options.designator[desig];\n break;\n case 'G':\n // eslint-disable-next-line\n var dec = value.getFullYear() < 0 ? 0 : 1;\n // eslint-disable-next-line\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n // eslint-disable-next-line\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/'/g, '');\n break;\n case 'z':\n // eslint-disable-next-line\n var timezone = value.getTimezoneOffset();\n // eslint-disable-next-line\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n // eslint-disable-next-line\n ret += options.numMapper.numberSymbols[timeSeparator];\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n case 'W':\n isNumber = true;\n curval = base.getWeekOfYear(value);\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n DateFormat.getCurrentDateValue = function (value, isIslamic) {\n if (isIslamic) {\n return HijriParser.getHijriDate(value);\n }\n return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n };\n /**\n * Returns two digit numbers for given value and length\n *\n * @param {number} val ?\n * @param {number} len ?\n * @returns {string} ?\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n *\n * @param {number} tVal ?\n * @param {string} pattern ?\n * @returns {string} ?\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","import { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits'\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n *\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n var numObject = dependable.numericObject;\n dOptions.numberMapper = isBlazor() ? extend({}, numObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + percentSign];\n dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n if (!isBlazor()) {\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n }\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency && !isBlazor()) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n if (!isBlazor()) {\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n }\n else {\n cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n if (fOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n }\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n *\n * @param {string} pattern ?\n * @returns {GroupDetails} ?\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n *\n * @param {number} val1 ?\n * @param {number} val2 ?\n * @param {boolean} checkbothExist ?\n * @param {boolean} isFraction ?\n * @returns {boolean} ?\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n // eslint-disable-next-line\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n *\n * @param {number} val ?\n * @param {string} text ?\n * @param {boolean} isFraction ?\n * @returns {void} ?\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n *\n * @param {number} value ?\n * @param {base.GenericFormatOptions} fOptions ?\n * @param {CommonOptions} dOptions ?\n * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n if (dOptions.isCustomFormat && curData.minimumFractionDigits < curData.maximumFractionDigits\n && /\\d+\\.\\d+/.test(fValue)) {\n var temp = fValue.split('.');\n var decimalPart = temp[1];\n var len = decimalPart.length;\n for (var i = len - 1; i >= 0; i--) {\n if (decimalPart[\"\" + i] === '0' && i >= curData.minimumFractionDigits) {\n decimalPart = decimalPart.slice(0, i);\n }\n else {\n break;\n }\n }\n fValue = temp[0] + '.' + decimalPart;\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n fValue = curData.format === \"#,###,,;(#,###,,)\" ? this.customPivotFormat(parseInt(fValue)) : fValue;\n if (curData.useGrouping) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @returns {string} ?\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n *\n * @param {string} val ?\n * @param {number} level1 ?\n * @param {string} sep ?\n * @param {string} decimalSymbol ?\n * @param {number} level2 ?\n * @returns {string} ?\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @returns {string} ?\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n *\n * @param {string} value ?\n * @param {number} min ?\n * @returns {string} ?\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n /**\n * Returns custom format for pivot table\n *\n * @param {number} value ?\n */\n NumberFormat.customPivotFormat = function (value) {\n if (value >= 500000) {\n value /= 1000000;\n var _a = value.toString().split(\".\"), integer = _a[0], decimal = _a[1];\n return decimal && +decimal.substring(0, 1) >= 5\n ? Math.ceil(value).toString()\n : Math.floor(value).toString();\n }\n return \"\";\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined, isBlazor } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar standalone = 'stand-alone';\nvar latnRegex = /^[0-9]*$/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth',\n milliseconds: 'setMilliseconds'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n *\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which string date will be parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), false, isBlazor());\n var parseOptions = {};\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {}, culture: culture };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n // eslint-disable-next-line\n var numMapper = isBlazor() ? dependable.parserObject.numbers :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[parseInt(i.toString(), 10)];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n // eslint-disable-next-line\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // eslint-disable-next-line\n var weekData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n var weekObject = parser.reverseObject(weekData);\n // tslint:enable\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n case 'f':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n var monthData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(monthData);\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else if (char === 'f') {\n if (len > 3) {\n continue;\n }\n isNumber = true;\n regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'W':\n // eslint-disable-next-line\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n // eslint-disable-next-line\n var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(periodValur);\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n // eslint-disable-next-line\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n // eslint-disable-next-line\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n // eslint-disable-next-line\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n // eslint-disable-next-line\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n // eslint-disable-next-line\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n // eslint-disable-next-line\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[\"\" + charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n var regExp = RegExp;\n parseOptions.parserRegex = new regExp('^' + regexString + '$', 'i');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n if (parseOptions.isIslamic) {\n var dobj = {};\n var tYear = parsedDateParts.year;\n var tDate = parsedDateParts.day;\n var tMonth = parsedDateParts.month;\n var ystrig = tYear ? (tYear + '') : '';\n var is2DigitYear = (ystrig.length === 2);\n if (!tYear || !tMonth || !tDate || is2DigitYear) {\n dobj = HijriParser.getHijriDate(new Date());\n }\n if (is2DigitYear) {\n tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n }\n // tslint:disable-next-line\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /* tslint:disable */\n /**\n * Returns date object for provided date options\n *\n * @param {DateParts} options ?\n * @param {Date} value ?\n * @returns {Date} ?\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'milliseconds', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n // eslint-disable-next-line\n var tValue = options[key];\n if (isUndefined(tValue) && key === 'day') {\n res.setDate(1);\n }\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n // eslint-disable-next-line\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n // eslint-disable-next-line\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n *\n * @param {string} value ?\n * @param {ParseOptions} parseOptions ?\n * @param {NumericOptions} num ?\n * @returns {DateParts} ?\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[\"\" + prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n // eslint-disable-next-line\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[\"\" + prop] = val;\n }\n }\n else {\n // eslint-disable-next-line\n matchString = ((prop === 'month') && (!parseOptions.isIslamic) && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US'))\n ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n // eslint-disable-next-line\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n *\n * @param {string} value ?\n * @param {NumericOptions} option ?\n * @returns {number} ?\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n *\n * @param {string} hourFormat ?\n * @param {base.TimeZoneOptions} tZone ?\n * @param {string} nRegex ?\n * @returns {string} ?\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n // eslint-disable-next-line\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n *\n * @param {boolean} flag ?\n * @param {string} val1 ?\n * @param {string} val2 ?\n * @param {NumericOptions} num ?\n * @returns {number} ?\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar regExp = RegExp;\nvar parseRegex = new regExp('^([^0-9]*)' + '(([0-9,]*[0-9]+)(\\.[0-9]+)?)' + '([Ee][+-]?[0-9]+)?([^0-9]*)$');\nvar groupRegex = /,/g;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n *\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n if (!parseOptions.fractionDigits) {\n if (option.maximumFractionDigits) {\n parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n }\n }\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n var numbers = getValue('numbers', dependable.parserObject);\n // eslint-disable-next-line\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // eslint-disable-next-line\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern;\n if (!isBlazor()) {\n symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n }\n else {\n parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n if (parseOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n }\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n *\n * @param {string} value ?\n * @param {NumericParts} options ?\n * @param {NumericOptions} numOptions ?\n * @returns {number} ?\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n value = value.indexOf('-') !== -1 ? value.replace('-.', '-0.') : value;\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (options.maximumFractionDigits) {\n ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n var decimalSplitValue = value.split('.');\n if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n ret = +(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));\n }\n return ret;\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","import { isNullOrUndefined, getValue, extend, isBlazor } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n /**\n * To attach handler for given property in current context.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @returns {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[\"\" + property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[\"\" + property], handler)) {\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @returns {void} ?\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[parseInt(i.toString(), 10)].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[parseInt(i.toString(), 10)].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[\"\" + property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it was failure to call.\n * @returns {void} ?\n */\n Observer.prototype.notify = function (property, argument, successHandler, errorHandler) {\n if (this.notExist(property)) {\n if (successHandler) {\n successHandler.call(this, argument);\n }\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var blazor = 'Blazor';\n var curObject = getValue(property, this.boundedEvents).slice(0);\n if (window[\"\" + blazor]) {\n return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\n }\n else {\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n if (successHandler) {\n successHandler.call(this, argument);\n }\n }\n };\n Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n var _this = this;\n var isTrigger = index === objs.length - 1;\n if (index < objs.length) {\n var obj_1 = objs[parseInt(index.toString(), 10)];\n var promise = obj_1.handler.call(obj_1.context, argument);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n return promise;\n }\n promise.then(function (data) {\n data = typeof data === 'string' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data;\n extend(argument, argument, data, true);\n if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return _this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }).catch(function (data) {\n if (errorHandler) {\n errorHandler.call(obj_1.context, typeof data === 'string' &&\n _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n }\n });\n }\n else if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }\n };\n // eslint-disable-next-line\n Observer.prototype.dateReviver = function (key, value) {\n var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n return (new Date(value));\n }\n return (value);\n };\n Observer.prototype.isJson = function (value) {\n try {\n JSON.parse(value);\n }\n catch (e) {\n return false;\n }\n return true;\n };\n /**\n * To destroy handlers in the event\n *\n * @returns {void} ?\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n // eslint-disable-next-line\n return this.boundedEvents.hasOwnProperty(prop) === false || this.boundedEvents[prop].length <= 0;\n };\n /**\n * Returns if the handler is present.\n *\n * @param {BoundOptions[]} boundedEvents ?\n * @param {Function} handler ?\n * @returns {boolean} ?\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\nvar regExp = RegExp;\nexport var blazorCultureFormats = {\n 'en-US': {\n 'd': 'M/d/y',\n 'D': 'EEEE, MMMM d, y',\n 'f': 'EEEE, MMMM d, y h:mm a',\n 'F': 'EEEE, MMMM d, y h:mm:s a',\n 'g': 'M/d/y h:mm a',\n 'G': 'M/d/yyyy h:mm:ss tt',\n 'm': 'MMMM d',\n 'M': 'MMMM d',\n 'r': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 'R': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 's': 'yyyy\\'-\\'MM\\'-\\'dd\\'T\\'HH\\':\\'mm\\':\\'ss',\n 't': 'h:mm tt',\n 'T': 'h:m:s tt',\n 'u': 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n 'U': 'dddd, MMMM d, yyyy h:mm:ss tt',\n 'y': 'MMMM yyyy',\n 'Y': 'MMMM yyyy'\n }\n};\n/**\n * Date base common constants and function for date parser and formatter.\n */\n// eslint-disable-next-line\nexport var IntlBase;\n(function (IntlBase) {\n /* eslint-disable */\n // tslint:disable-next-line:max-line-length.\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*[0#\\ ]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n IntlBase.dateConverterMapper = /dddd|ddd/ig;\n var defaultFirstDay = 'sun';\n IntlBase.islamicRegex = /^islamic/;\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = new regExp(\"(^[ncpae]{1})([0-1]?[0-9]|20)?$\", \"i\");\n IntlBase.currencyFormatRegex = new regExp(\"(^[ca]{1})([0-1]?[0-9]|20)?$\", \"i\");\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n '1-alt-variant': 'Common Era'\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y'\n }\n }\n },\n 'islamic': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Muh.',\n '2': 'Saf.',\n '3': 'Rab. I',\n '4': 'Rab. II',\n '5': 'Jum. I',\n '6': 'Jum. II',\n '7': 'Raj.',\n '8': 'Sha.',\n '9': 'Ram.',\n '10': 'Shaw.',\n '11': 'Dhuʻl-Q.',\n '12': 'Dhuʻl-H.'\n },\n 'narrow': {\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '10': '10',\n '11': '11',\n '12': '12'\n },\n 'wide': {\n '1': 'Muharram',\n '2': 'Safar',\n '3': 'Rabiʻ I',\n '4': 'Rabiʻ II',\n '5': 'Jumada I',\n '6': 'Jumada II',\n '7': 'Rajab',\n '8': 'Shaʻban',\n '9': 'Ramadan',\n '10': 'Shawwal',\n '11': 'Dhuʻl-Qiʻdah',\n '12': 'Dhuʻl-Hijjah'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'AH'\n },\n 'eraAbbr': {\n '0': 'AH'\n },\n 'eraNarrow': {\n '0': 'AH'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y G',\n 'long': 'MMMM d, y G',\n 'medium': 'MMM d, y G',\n 'short': 'M/d/y GGGGG'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y G',\n 'yyyy': 'y G',\n 'yyyyM': 'M/y GGGGG',\n 'yyyyMd': 'M/d/y GGGGG',\n 'yyyyMEd': 'E, M/d/y GGGGG',\n 'yyyyMMM': 'MMM y G',\n 'yyyyMMMd': 'MMM d, y G',\n 'yyyyMMMEd': 'E, MMM d, y G',\n 'yyyyMMMM': 'MMMM y G',\n 'yyyyQQQ': 'QQQ y G',\n 'yyyyQQQQ': 'QQQQ y G'\n }\n }\n }\n },\n 'timeZoneNames': {\n 'hourFormat': '+HH:mm;-HH:mm',\n 'gmtFormat': 'GMT{0}',\n 'gmtZeroFormat': 'GMT'\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n }\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###'\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n IntlBase.blazorDefaultObject = {\n 'numbers': {\n 'mapper': {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9'\n },\n 'mapperDigits': '0123456789',\n 'numberSymbols': {\n 'decimal': '.',\n 'group': ',',\n 'plusSign': '+',\n 'minusSign': '-',\n 'percentSign': '%',\n 'nan': 'NaN',\n 'timeSeparator': ':',\n 'infinity': '∞'\n },\n 'timeSeparator': ':',\n 'currencySymbol': '$',\n 'currencypData': {\n 'nlead': '$',\n 'nend': '',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentpData': {\n 'nlead': '',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentnData': {\n 'nlead': '-',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'currencynData': {\n 'nlead': '($',\n 'nend': ')',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalnData': {\n 'nlead': '-',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalpData': {\n 'nlead': '',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n }\n },\n 'dates': {\n 'dayPeriods': {\n 'am': 'AM',\n 'pm': 'PM'\n },\n 'dateSeperator': '/',\n 'days': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n },\n 'months': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n },\n 'eras': {\n '1': 'AD'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n *\n * @private\n * @param {string} skeleton ?\n * @param {Object} dateObject ?\n * @param {string} type ?\n * @param {boolean} isIslamic ?\n * @param {string} blazorCulture ?\n * @returns {string} ?\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n var resPattern;\n var iType = type || 'date';\n if (blazorCulture) {\n resPattern = compareBlazorDateFormats({ skeleton: skeleton }, blazorCulture).format ||\n compareBlazorDateFormats({ skeleton: 'd' }, 'en-US').format;\n }\n else {\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n if (isUndefined(resPattern) && skeleton === 'yMd') {\n resPattern = 'M/d/y';\n }\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n *\n * @private\n * @param {Object} cldr ?\n * @param {string} culture ?\n * @param {string} mode ?\n * @param {boolean} isNumber ?\n * @returns {any} ?\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || (isBlazor() ? IntlBase.blazorDefaultObject : IntlBase.defaultObject);\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n var dateString = isBlazor() ? 'dates' : ('dates.calendars.' + calendartype);\n ret.dateObject = getValue(dateString, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n *\n * @private\n * @param {string} type ?\n * @param {string} numSystem ?\n * @param {Object} obj ?\n * @param {boolean} isAccount ?\n * @returns {string} ?\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n *\n * @param {string} format ?\n * @returns {string} ?\n */\n function ConvertDateToWeekFormat(format) {\n var convertMapper = format.match(IntlBase.dateConverterMapper);\n if (convertMapper && isBlazor()) {\n var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n return format.replace(IntlBase.dateConverterMapper, tempString);\n }\n return format;\n }\n IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n /**\n *\n * @param {DateFormatOptions} formatOptions ?\n * @param {string} culture ?\n * @returns {DateFormatOptions} ?\n */\n function compareBlazorDateFormats(formatOptions, culture) {\n var format = formatOptions.format || formatOptions.skeleton;\n var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n if (!curFormatMapper) {\n curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n }\n if (curFormatMapper) {\n curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n }\n return formatOptions;\n }\n IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n /**\n * Returns proper numeric skeleton\n *\n * @private\n * @param {string} skeleton ?\n * @returns {any} ?\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n // eslint-disable-next-line\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n *\n * @private\n * @param {string} pattern ?\n * @param {boolean} needFraction ?\n * @param {string} cSymbol ?\n * @param {boolean} fractionOnly ?\n * @returns {any} ?\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n *\n * @private\n * @param {string} val ?\n * @param {string} sym ?\n * @returns {string} ?\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n IntlBase.changeCurrencySymbol = changeCurrencySymbol;\n /**\n * Returns currency symbol based on currency code ?\n *\n * @private\n * @param {Object} numericObject ?\n * @param {string} currencyCode ?\n * @param {string} altSymbol ?\n * @returns {string} ?\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) ||\n getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n return getCurrency;\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {any} obj ?\n * @returns {any} ?\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n // eslint-disable-next-line\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {Object} numObject ?\n * @returns {any} ?\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n return cOptions;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n var spaceCapture = integerPart.match(/\\ $/g) ? true : false;\n var spaceGrouping = integerPart.replace(/\\ $/g, '').indexOf(' ') !== -1;\n cOptions.useGrouping = integerPart.indexOf(',') !== -1 || spaceGrouping;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n dOptions.isCustomFormat = true;\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n // eslint-disable-next-line\n cOptions.groupSeparator = spaceGrouping ? ' ' : dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/'/g, '');\n cOptions.nend = spaceCapture ? ' ' + cOptions.nend.replace(/'/g, '') : cOptions.nend.replace(/'/g, '');\n }\n return cOptions;\n }\n IntlBase.customNumberFormat = customNumberFormat;\n /**\n * Returns formatting options for currency or percent type\n *\n * @private\n * @param {string[]} parts ?\n * @param {string} actual ?\n * @param {string} symbol ?\n * @returns {any} ?\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[parseInt(i.toString(), 10)];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n // eslint-disable-next-line\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n // eslint-disable-next-line\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n *\n * @private\n * @param {Object} dateObj ?\n * @returns {string} ?\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[dM]([^dM])[dM]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n *\n * @private\n * @param {string} culture ?\n * @param {DateFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcelFormat ?\n * @returns {string} ?\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n if (isBlazor()) {\n options = compareBlazorDateFormats(options, culture);\n }\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n // eslint-disable-next-line\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n *\n * @param {string} actual ?\n * @param {any} option ?\n * @returns {any} ?\n */\n // eslint-disable-next-line\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n // eslint-disable-next-line\n var split = actual.split(',');\n actual = (split[0] + getValue('numberMapper.numberSymbols.group', option) +\n split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option)));\n }\n else {\n actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n }\n return actual;\n }\n /**\n * Returns Native Number pattern\n *\n * @private\n * @param {string} culture ?\n * @param {NumberFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcel ?\n * @returns {string} ?\n */\n function getActualNumberFormat(culture, options, cldr, isExcel) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numrericObject = dependable.numericObject;\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n var type = IntlBase.formatRegex.test(options.format) ? getProperNumericSkeleton(options.format || 'N') : {};\n var dOptions = {};\n if (curMatch) {\n dOptions.numberMapper = isBlazor() ?\n extend({}, dependable.numericObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) :\n getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode, options.altSymbol);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = isBlazor() ? true : (split.length > 1);\n curObj.nData = isBlazor() ? getValue(type.type + 'nData', numrericObject) :\n getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) :\n getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency' || (parseOptions.type && isBlazor())) {\n if (isBlazor() && parseOptions.type !== 'currency') {\n curObj.pData = getValue(parseOptions.type + 'pData', numrericObject);\n curObj.nData = getValue(parseOptions.type + 'nData', numrericObject);\n }\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern || isBlazor()) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent' && !isBlazor()) {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/'/g, '\"');\n }\n if (Object.keys(dOptions).length > 0) {\n actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n /**\n *\n * @param {string} pattern ?\n * @param {number} minDigits ?\n * @param {number} maxDigits ?\n * @returns {string} ?\n */\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n IntlBase.fractionDigitsPattern = fractionDigitsPattern;\n /**\n *\n * @param {string} pattern ?\n * @param {number} digits ?\n * @returns {string} ?\n */\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n IntlBase.minimumIntegerPattern = minimumIntegerPattern;\n /**\n *\n * @param {string} pattern ?\n * @returns {string} ?\n */\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[parseInt(x.toString(), 10)] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n IntlBase.groupingPattern = groupingPattern;\n /**\n *\n * @param {string} culture ?\n * @param {Object} cldr ?\n * @returns {number} ?\n */\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[\"\" + iCulture] || mapper[iCulture.slice(0, 2)] || defaultFirstDay;\n }\n return firstDayMapper[\"\" + firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n /**\n * @private\n * @param {any} pData ?\n * @param {string} aCurrency ?\n * @param {string} rCurrency ?\n * @returns {void} ?\n */\n function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n var iCurrency = getBlazorCurrencySymbol(rCurrency);\n if (aCurrency !== iCurrency) {\n for (var _i = 0, pData_1 = pData; _i < pData_1.length; _i++) {\n var data = pData_1[_i];\n data.nend = data.nend.replace(aCurrency, iCurrency);\n data.nlead = data.nlead.replace(aCurrency, iCurrency);\n }\n }\n }\n IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n /**\n * @private\n * @param {Date} date ?\n * @returns {number} ?\n */\n function getWeekOfYear(date) {\n var newYear = new Date(date.getFullYear(), 0, 1);\n var day = newYear.getDay();\n var weeknum;\n day = (day >= 0 ? day : day + 7);\n var daynum = Math.floor((date.getTime() - newYear.getTime() -\n (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n if (day < 4) {\n weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n if (weeknum > 52) {\n var nYear = new Date(date.getFullYear() + 1, 0, 1);\n var nday = nYear.getDay();\n nday = nday >= 0 ? nday : nday + 7;\n weeknum = nday < 4 ? 1 : 53;\n }\n }\n else {\n weeknum = Math.floor((daynum + day - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n *\n * @param {string|Object} options ?\n * @param {string} type ?\n * @param {boolean} async ?\n * @returns defaultType any\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n *\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n *\n * Send the request to server.\n *\n * @param {any} data - To send the user data\n * @return {Promise} ?\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false,\n httpRequest: null\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n // eslint-disable-next-line\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n eventArgs.httpRequest = _this.httpRequest;\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n *\n * @param {string} key Key to search in the response header\n * @returns {string} ?\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n // eslint-disable-next-line\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n // eslint-disable-next-line\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ /]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ /]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ /]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ /]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ /]([\\w.]+)/i,\n SAFARI: /(safari)[ /]([\\w.]+)/i,\n WEBKIT: /(webkit)[ /]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n *\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[\"\" + key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n // eslint-disable-next-line\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n *\n * @param {string} event - type of event triggered.\n * @returns {boolean}\n */\n Browser.getEvent = function (event) {\n // eslint-disable-next-line\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[\"\" + event].isPointer :\n (Browser.isTouch ? events[\"\" + event].isTouch + (!Browser.isDevice ? ' ' + events[\"\" + event].isDevice : '')\n : events[\"\" + event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n *\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n *\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n *\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n *\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * Check whether the browser on the iPad device is Safari or not\n *\n * @returns {boolean}\n */\n Browser.isSafari = function () {\n return (Browser.isDevice && Browser.isIos && Browser.isTouch && typeof window !== 'undefined'\n && window.navigator.userAgent.toLowerCase().indexOf('iphone') === -1\n && window.navigator.userAgent.toLowerCase().indexOf('safari') > -1);\n };\n /**\n * To get the value based on provided key and regX\n *\n * @param {string} key ?\n * @param {RegExp} regX ?\n * @returns {Object} ?\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = typeof window !== 'undefined' ? window.browserDetails : {};\n var isSurfaceDevice = typeof navigator !== 'undefined' && navigator.userAgent.indexOf('Windows') > -1 && screen && screen.width < 1360;\n if (typeof navigator !== 'undefined' && (navigator.platform === 'MacIntel' || isSurfaceDevice) && navigator.maxTouchPoints > 1 && Browser.isTouch === true) {\n browserDetails['isIos'] = navigator.platform === 'MacIntel';\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\n }\n if ('undefined' === typeof browserDetails[\"\" + key]) {\n return browserDetails[\"\" + key] = regX.test(Browser.userAgent);\n }\n return browserDetails[\"\" + key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties\n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n *\n * @param {string} uA ?\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n *\n * @returns {BrowserInfo} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return (window.browserDetails.isTouch =\n ('ontouchstart' in window.navigator) ||\n (window &&\n window.navigator &&\n (window.navigator.maxTouchPoints > 0)) || ('ontouchstart' in window));\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { debounce, extend } from './util';\nimport { Browser } from './browser';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * ```html\n * <div id=\"Eventdiv\"> </div>\n * <script>\n * let node: HTMLElement = document.querySelector(\"#Eventdiv\");\n * EventHandler.addEventListener(node, \"click\", function(){\n * // click handler function code\n * });\n * EventHandler.addEventListener(node, \"onmouseover\", function(){\n * // mouseover handler function code\n * });\n * EventHandler.removeEventListener(node, \"click\", function(){\n * // click handler function code\n * });\n * eventObj.clearEvents();\n * </script>\n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n *\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} intDebounce - Specifies at what interval given event listener should be triggered.\n * @returns {Function} ?\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[parseInt(i.toString(), 10)],\n listener: listener,\n debounce: debounceListener\n });\n if (Browser.isIE) {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener);\n }\n else {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false });\n }\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n *\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @returns {void} ?\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[parseInt(j.toString(), 10)] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[parseInt(j.toString(), 10)], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n *\n * @param {any} element - Specifies the target html element to clear the events\n * @returns {void} ?\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n // eslint-disable-next-line\n eventData = EventHandler.addOrGetEventData(element);\n // eslint-disable-next-line\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[parseInt(i.toString(), 10)].name, copyData[parseInt(i.toString(), 10)].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n *\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @returns {void} ?\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n /**\n * Inject required modules in component library\n *\n * @returns {void} ?\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[parseInt(i.toString(), 10)];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module && module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n *\n * @returns {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n *\n * @param {ModuleDeclaration[]} moduleList ?\n * @returns {void} ?\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n *\n * @param {string} name ?\n * @returns {string} ?\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n *\n * @param {string} modName ?\n * @returns {boolean} ?\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.isComplexArraySetter = false;\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // eslint-disable-next-line\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.isParentArray = isArray;\n this.setProperties(defaultValue, true);\n }\n /**\n * Updates the property changes\n *\n * @param {boolean} val ?\n * @param {string} propName ?\n * @returns {void} ?\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[\"\" + propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[\"\" + propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n *\n * @param {Object} prop ?\n * @param {boolean} muteOnChange ?\n * @returns {void} ?\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n *\n * @param {string} key ?\n * @param {Object} newValue ?\n * @param {Object} oldValue ?\n * @param {boolean} restrictServerDataBind ?\n * @returns {void} ?\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n if (!restrictServerDataBind) {\n this.serverDataBind(key, newValue, true);\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n var parent_1;\n var newChanges = {};\n var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n /* istanbul ignore else */\n if (parentKey.indexOf('.') !== -1) {\n var complexKeys = parentKey.split('.');\n parent_1 = newChanges;\n for (var i = 0; i < complexKeys.length; i++) {\n var isFinal = i === complexKeys.length - 1;\n parent_1[complexKeys[parseInt(i.toString(), 10)]] = isFinal ? value : {};\n parent_1 = isFinal ? parent_1 : parent_1[complexKeys[parseInt(i.toString(), 10)]];\n }\n }\n else {\n newChanges[\"\" + parentKey] = {};\n parent_1 = newChanges[\"\" + parentKey];\n newChanges[\"\" + parentKey][\"\" + key] = value;\n }\n /* istanbul ignore next */\n if (this.isParentArray) {\n var actionProperty = 'ejsAction';\n parent_1[\"\" + actionProperty] = action ? action : 'none';\n }\n this.controlParent.serverDataBind(newChanges);\n }\n };\n ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n // eslint-disable-next-line\n var index = '';\n var propName = this.propName;\n /* istanbul ignore next */\n if (this.isParentArray) {\n index = this.parentObj[this.propName].indexOf(this);\n var valueLength = this.parentObj[this.propName].length;\n valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);\n index = index !== -1 ? '-' + index : '-' + valueLength;\n propName = propName + index;\n }\n if (this.controlParent !== this.parentObj) {\n propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n }\n return propName;\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent, isBlazor } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\nvar isDraggedObject = { isDragged: false };\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n * <div id='drag'>Draggable</div>\n * <script>\n * var ele = document.getElementById('drag');\n * var drag:Draggable = new Draggable(ele,{\n * clone:false,\n * drag: function(e) {\n * //drag handler code.\n * },\n * handle:'.class'\n * });\n * </script>\n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n _this.eleTop = 0;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.parentScrollX = 0;\n _this.parentScrollY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer);\n };\n /* istanbul ignore next */\n Draggable.prototype.getScrollableParent = function (element, axis) {\n var scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };\n var client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };\n if (isNullOrUndefined(element)) {\n return null;\n }\n if (element[scroll[\"\" + axis]] > element[client[\"\" + axis]]) {\n if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {\n if (axis === 'vertical') {\n this.parentScrollY = this.parentScrollY +\n (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n this.tempScrollHeight = element.scrollHeight;\n }\n else {\n this.parentScrollX = this.parentScrollX +\n (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n this.tempScrollWidth = element.scrollWidth;\n }\n if (!isNullOrUndefined(element)) {\n return this.getScrollableParent(element.parentNode, axis);\n }\n else {\n return element;\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n };\n Draggable.prototype.getScrollableValues = function () {\n this.parentScrollX = 0;\n this.parentScrollY = 0;\n var isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');\n var verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');\n var horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.currentStateTarget = evt.target;\n if (this.isDragStarted()) {\n return;\n }\n else {\n this.isDragStarted(true);\n this.externalInitialize = false;\n }\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n /* tslint:disable no-any */\n var abortSelectors = this.abort;\n if (typeof abortSelectors === 'string') {\n abortSelectors = [abortSelectors];\n }\n for (var i = 0; i < abortSelectors.length; i++) {\n if (!isNullOrUndefined(closest(evt.target, abortSelectors[parseInt(i.toString(), 10)]))) {\n /* istanbul ignore next */\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n return;\n }\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.getScrollableValues();\n if (evt.clientX === evt.pageX) {\n this.parentScrollX = 0;\n }\n if (evt.clientY === evt.pageY) {\n this.parentScrollY = 0;\n }\n this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n if (evt.type !== 'touchstart' && this.isPreventSelect) {\n document.body.classList.add('e-prevent-select');\n }\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10)\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n /* istanbul ignore next */\n if (this.isReplaceDragEle) {\n element = this.currentStateCheck(evt.target, element);\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n var args = {\n event: evt,\n element: element,\n target: curTarget,\n bindEvents: isBlazor() ? this.bindDragEvents.bind(this) : null,\n dragElement: dragTargetElement\n };\n this.trigger('dragStart', args);\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n this.getScrollableValues();\n // when drag element has margin-top\n var styles = getComputedStyle(element);\n var marginTop = parseFloat(styles.marginTop);\n /* istanbul ignore next */\n if (this.clone && marginTop !== 0) {\n pos.top += marginTop;\n }\n this.eleTop = !isNaN(parseFloat(styles.top)) ? parseFloat(styles.top) - this.offset.top : 0;\n /* istanbul ignore next */\n // if (this.eleTop > 0) {\n // pos.top += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n pos.top -= this.parentScrollY;\n pos.left -= this.parentScrollX;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n pos.top += this.dragArea.scrollTop;\n }\n this.dragElePosition = { top: pos.top, left: pos.left };\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n if (!isBlazor()) {\n this.bindDragEvents(dragTargetElement);\n }\n }\n };\n Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n // tslint:disable-next-line:max-func-body-length\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (this.clone && evt.changedTouches && Browser.isDevice && Browser.isTouch) {\n evt.preventDefault();\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n var flag = true;\n if (this.hoverObject) {\n if (this.hoverObject.instance !== eleObj.instance) {\n this.triggerOutFunction(evt, eleObj);\n }\n else {\n flag = false;\n }\n }\n if (flag) {\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n }\n else if (this.hoverObject) {\n this.triggerOutFunction(evt, eleObj);\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n var styles = getComputedStyle(helperElement);\n if (this.dragArea) {\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft && dLeft > 0) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n }\n else {\n left = dLeft < 0 ? this.dragLimit.left : dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop && dTop > 0) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n }\n else {\n top = dTop < 0 ? this.dragLimit.top : dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var draEleTop;\n var draEleLeft;\n if (this.helperElement.classList.contains('e-treeview')) {\n if (this.dragArea) {\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - this.borderWidth.top);\n draEleLeft = (left - iLeft) < 0 ? this.dragLimit.left : (left - this.borderWidth.left);\n }\n else {\n draEleTop = top - this.borderWidth.top;\n draEleLeft = left - this.borderWidth.left;\n }\n }\n else {\n if (this.dragArea) {\n var isDialogEle = this.helperElement.classList.contains('e-dialog');\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);\n draEleLeft = (left - iLeft) < 0 ? isDialogEle ? (left - (iLeft - this.borderWidth.left)) :\n this.dragElePosition.left : (left - iLeft);\n }\n else {\n draEleTop = top - iTop;\n draEleLeft = left - iLeft;\n }\n }\n var marginTop = parseFloat(getComputedStyle(this.element).marginTop);\n // when drag-element has margin-top\n /* istanbul ignore next */\n if (marginTop > 0) {\n if (this.clone) {\n draEleTop += marginTop;\n if (dTop < 0) {\n if ((marginTop + dTop) >= 0) {\n draEleTop = marginTop + dTop;\n }\n else {\n draEleTop -= marginTop;\n }\n }\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\n if ((top - iTop) < 0) {\n if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {\n var tempDraEleTop = this.dragLimit.top + dTop - iTop;\n if ((tempDraEleTop + marginTop + iTop) < 0) {\n draEleTop -= marginTop + iTop;\n }\n else {\n draEleTop = tempDraEleTop;\n }\n }\n else {\n draEleTop -= marginTop + iTop;\n }\n }\n }\n if (this.dragArea && this.helperElement.classList.contains('e-treeview')) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n draEleTop = (draEleTop + helperHeight) > this.dragLimit.bottom ? (this.dragLimit.bottom - helperHeight) : draEleTop;\n }\n /* istanbul ignore next */\n // if(this.eleTop > 0) {\n // draEleTop += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n draEleTop -= this.parentScrollY;\n draEleLeft -= this.parentScrollX;\n }\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n draEleTop += this.dragArea.scrollTop;\n }\n var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll && !this.helperElement.classList.contains('e-treeview')) {\n this.helperElement.scrollIntoView();\n }\n var elements = document.querySelectorAll(':hover');\n if (this.enableAutoScroll && this.helperElement.classList.contains('e-treeview')) {\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n /* tslint:disable no-any */\n var scrollParent = this.getScrollParent(elements, false);\n if (this.elementInViewport(this.helperElement)) {\n this.getScrollPosition(scrollParent, draEleTop);\n }\n else if (!this.elementInViewport(this.helperElement)) {\n elements = [].slice.call(document.querySelectorAll(':hover'));\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n scrollParent = this.getScrollParent(elements, true);\n this.getScrollPosition(scrollParent, draEleTop);\n }\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n /* tslint:disable no-any */\n Draggable.prototype.getScrollParent = function (node, reverse) {\n /* tslint:disable no-any */\n var nodeEl = reverse ? node.reverse() : node;\n var hasScroll;\n for (var i = nodeEl.length - 1; i >= 0; i--) {\n hasScroll = window.getComputedStyle(nodeEl[parseInt(i.toString(), 10)])['overflow-y'];\n if ((hasScroll === 'auto' || hasScroll === 'scroll')\n && nodeEl[parseInt(i.toString(), 10)].scrollHeight > nodeEl[parseInt(i.toString(), 10)].clientHeight) {\n return nodeEl[parseInt(i.toString(), 10)];\n }\n }\n hasScroll = window.getComputedStyle(document.scrollingElement)['overflow-y'];\n if (hasScroll === 'visible') {\n document.scrollingElement.style.overflow = 'auto';\n return document.scrollingElement;\n }\n };\n Draggable.prototype.getScrollPosition = function (nodeEle, draEleTop) {\n if (nodeEle && nodeEle === document.scrollingElement) {\n if ((nodeEle.clientHeight + document.scrollingElement.scrollTop - this.helperElement.clientHeight) < draEleTop\n && nodeEle.getBoundingClientRect().height + this.parentClientRect.top > draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.scrollTop > draEleTop - this.helperElement.clientHeight) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n else if (nodeEle && nodeEle !== document.scrollingElement) {\n if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - this.helperElement.clientHeight + document.scrollingElement.scrollTop) < draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.getBoundingClientRect().top > (draEleTop - this.helperElement.clientHeight - document.scrollingElement.scrollTop)) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n };\n Draggable.prototype.getPathElements = function (evt) {\n var elementTop = evt.clientX > 0 ? evt.clientX : 0;\n var elementLeft = evt.clientY > 0 ? evt.clientY : 0;\n return document.elementsFromPoint(elementTop, elementLeft);\n };\n Draggable.prototype.triggerOutFunction = function (evt, eleObj) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n /**\n * @private\n */\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag);\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.isDragStarted = function (change) {\n if (change) {\n isDraggedObject.isDragged = !isDraggedObject.isDragged;\n }\n return isDraggedObject.isDragged;\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n eleHeightBound = ele.scrollHeight ? (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) ? ele.clientHeight : ele.scrollHeight : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[parseInt(i.toString(), 10)];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[\"\" + lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[\"\" + lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n if (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) {\n top = elementArea.top + document.scrollingElement.scrollTop;\n }\n else {\n top = elementArea.top;\n }\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = ele.offsetTop + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.pointerEvents || '';\n var isPointer = evt.type.indexOf('pointer') !== -1 && Browser.info.name === 'safari' && parseInt(Browser.info.version) > 12;\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1 || isPointer) {\n this.helperElement.style.pointerEvents = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.pointerEvents = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n /* istanbul ignore next */\n Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n var elem;\n if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n elem = this.currentStateTarget;\n }\n else {\n elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n }\n return elem;\n };\n Draggable.prototype.getMousePosition = function (evt, isdragscroll) {\n /* tslint:disable no-any */\n var dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;\n var intCoord = this.getCoordinates(evt);\n var pageX;\n var pageY;\n var isOffsetParent = isNullOrUndefined(dragEle.offsetParent);\n /* istanbul ignore next */\n if (isdragscroll) {\n pageX = this.clone ? intCoord.pageX :\n (intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft)) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY :\n (intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop)) - this.relativeYPosition;\n }\n else {\n pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;\n }\n if (!this.element.classList.contains(\"e-dialog\") && !this.element.classList.contains(\"e-card\") && document.scrollingElement) {\n var isVerticalScroll = document.scrollingElement.scrollHeight > 0 && document.scrollingElement.scrollHeight > document.scrollingElement.clientHeight && document.scrollingElement.scrollTop > 0;\n var isHorrizontalScroll = document.scrollingElement.scrollWidth > 0 && document.scrollingElement.scrollWidth > document.scrollingElement.clientWidth && document.scrollingElement.scrollLeft > 0;\n pageX = isHorrizontalScroll ? pageX - document.scrollingElement.scrollLeft : pageX;\n pageY = isVerticalScroll ? pageY - document.scrollingElement.scrollTop : pageY;\n }\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[\"\" + name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isDragScroll\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isReplaceDragEle\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"isPreventSelect\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableScrollHandler\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n * <div id='drop'>Droppable</div>\n * <script>\n * let ele:HTMLElement = document.getElementById('drop');\n * var drag:Droppable = new Droppable(ele,{\n * accept:'.drop',\n * drop: function(e) {\n * //drop handler code.\n * }\n * });\n * </script>\n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n // eslint-disable-next-line\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n * <div id='testEle'> </div>;\n * <script>\n * let node: HTMLElement = document.querySelector('#testEle');\n * let kbInstance = new KeyboardEvents({\n * element: node,\n * keyConfigs:{ selectAll : 'ctrl+a' },\n * keyAction: function (e:KeyboardEvent, action:string) {\n * // handler function code\n * }\n * });\n * </script>\n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\n * @param {HTMLElement} element ?\n * @param {KeyboardEventsModel} options ?\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n *\n * @param {KeyboardEventArgs} e ?\n * @returns {void} ?\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[\"\" + key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n *\n * @returns {void} ?\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n *\n * @param {KeyboardEventsModel} newProp ?\n * @param {KeyboardEventsModel} oldProp ?\n * @returns {void} ?\n * @private\n */\n // eslint-disable-next-line\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {string} ?\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\n * @param {string} config - configuration data\n * @returns {KeyData} ?\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[\"\" + config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[\"\" + config] = keyData;\n return keyData;\n };\n // Return the keycode value as string\n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[\"\" + keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend, isNullOrUndefined } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n *\n * @param {string} controlName ?\n * @param {Object} localeStrings ?\n * @param {string} locale ?\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n *\n * @param {string} locale ?\n * @returns {void} ?\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n *\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n * @returns {void} ?\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n *\n * @param {string} prop - specifies the property for which localize text to be returned.\n * @returns {string} ?\n */\n L10n.prototype.getConstant = function (prop) {\n // Removed conditional operator because this method does not return correct value when passing 0 as value in localization\n if (!isNullOrUndefined(this.currentLocale[\"\" + prop])) {\n return this.currentLocale[\"\" + prop];\n }\n else {\n return this.localeStrings[\"\" + prop] || '';\n }\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n *\n * @param {Object} curObject ?\n * @param {string} locale ?\n * @returns {Object} ?\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if ((curObject)[\"\" + locale]) {\n return (curObject)[\"\" + locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","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 { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = _this.updateChangeTouches(evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.moveEvent = function (evt) {\n var point = _this.updateChangeTouches(evt);\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = _this.updateChangeTouches(evt);\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n var isFirefox = (/Firefox/).test(Browser.userAgent);\n if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n _this.isTouchMoved = false;\n }\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n // eslint-disable-next-line\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed\n /**\n *\n * @private\n * @param {TouchModel} newProp ?\n * @param {TouchModel} oldProp ?\n * @returns {void} ?\n */\n // eslint-disable-next-line\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n *\n * @returns {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n *\n * @returns {string} ?\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n *\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean} ?\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n // eslint-disable-next-line\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // eslint-disable-next-line\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n Touch.prototype.updateChangeTouches = function (evt) {\n var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n return point;\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","/**\n * SanitizeHtmlHelper for sanitize the value.\n */\nimport { detach } from './dom';\nvar removeTags = [\n 'script',\n 'style',\n 'iframe[src]',\n 'link[href*=\"javascript:\"]',\n 'object[type=\"text/x-scriptlet\"]',\n 'object[data^=\"data:text/html;base64\"]',\n 'img[src^=\"data:text/html;base64\"]',\n '[src^=\"javascript:\"]',\n '[dynsrc^=\"javascript:\"]',\n '[lowsrc^=\"javascript:\"]',\n '[type^=\"application/x-shockwave-flash\"]'\n];\nvar removeAttrs = [\n { attribute: 'href', selector: '[href*=\"javascript:\"]' },\n { attribute: 'background', selector: '[background^=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"expression(\"]' },\n { attribute: 'href', selector: 'a[href^=\"data:text/html;base64\"]' }\n];\nvar jsEvents = ['onchange',\n 'onclick',\n 'onmouseover',\n 'onmouseout',\n 'onkeydown',\n 'onload',\n 'onerror',\n 'onblur',\n 'onfocus',\n 'onbeforeload',\n 'onbeforeunload',\n 'onkeyup',\n 'onsubmit',\n 'onafterprint',\n 'onbeforeonload',\n 'onbeforeprint',\n 'onblur',\n 'oncanplay',\n 'oncanplaythrough',\n 'onchange',\n 'onclick',\n 'oncontextmenu',\n 'ondblclick',\n 'ondrag',\n 'ondragend',\n 'ondragenter',\n 'ondragleave',\n 'ondragover',\n 'ondragstart',\n 'ondrop',\n 'ondurationchange',\n 'onemptied',\n 'onended',\n 'onerror',\n 'onerror',\n 'onfocus',\n 'onformchange',\n 'onforminput',\n 'onhaschange',\n 'oninput',\n 'oninvalid',\n 'onkeydown',\n 'onkeypress',\n 'onkeyup',\n 'onload',\n 'onloadeddata',\n 'onloadedmetadata',\n 'onloadstart',\n 'onmessage',\n 'onmousedown',\n 'onmousemove',\n 'onmouseout',\n 'onmouseover',\n 'onmouseup',\n 'onmousewheel',\n 'onoffline',\n 'onoine',\n 'ononline',\n 'onpagehide',\n 'onpageshow',\n 'onpause',\n 'onplay',\n 'onplaying',\n 'onpopstate',\n 'onprogress',\n 'onratechange',\n 'onreadystatechange',\n 'onredo',\n 'onresize',\n 'onscroll',\n 'onseeked',\n 'onseeking',\n 'onselect',\n 'onstalled',\n 'onstorage',\n 'onsubmit',\n 'onsuspend',\n 'ontimeupdate',\n 'onundo',\n 'onunload',\n 'onvolumechange',\n 'onwaiting',\n 'onmouseenter',\n 'onmouseleave',\n 'onmousewheel',\n 'onstart',\n 'onpropertychange'\n];\nvar SanitizeHtmlHelper = /** @class */ (function () {\n function SanitizeHtmlHelper() {\n }\n SanitizeHtmlHelper.beforeSanitize = function () {\n return {\n selectors: {\n tags: removeTags,\n attributes: removeAttrs\n }\n };\n };\n SanitizeHtmlHelper.sanitize = function (value) {\n var item = this.beforeSanitize();\n var output = this.serializeValue(item, value);\n return output;\n };\n SanitizeHtmlHelper.serializeValue = function (item, value) {\n this.removeAttrs = item.selectors.attributes;\n this.removeTags = item.selectors.tags;\n this.wrapElement = document.createElement('div');\n this.wrapElement.innerHTML = value;\n this.removeXssTags();\n this.removeJsEvents();\n this.removeXssAttrs();\n var tempEleValue = this.wrapElement.innerHTML;\n this.removeElement();\n return tempEleValue.replace('&', '&');\n };\n SanitizeHtmlHelper.removeElement = function () {\n // Removes an element's attibute to avoid html tag validation\n var nodes = this.wrapElement.children;\n for (var j = 0; j < nodes.length; j++) {\n var attribute = nodes[parseInt(j.toString(), 10)].attributes;\n for (var i = 0; i < attribute.length; i++) {\n this.wrapElement.children[parseInt(j.toString(), 10)].removeAttribute(attribute[parseInt(i.toString(), 10)].localName);\n }\n }\n };\n SanitizeHtmlHelper.removeXssTags = function () {\n var elements = this.wrapElement.querySelectorAll(this.removeTags.join(','));\n if (elements.length > 0) {\n elements.forEach(function (element) {\n detach(element);\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeJsEvents = function () {\n var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n if (elements.length > 0) {\n elements.forEach(function (element) {\n jsEvents.forEach(function (attr) {\n if (element.hasAttribute(attr)) {\n element.removeAttribute(attr);\n }\n });\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeXssAttrs = function () {\n var _this = this;\n // eslint-disable-next-line\n this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\n }\n });\n };\n return SanitizeHtmlHelper;\n}());\nexport { SanitizeHtmlHelper };\n"],"names":["disableBlazorMode","isBlazorPlatform","createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","replace","split","i","isUndefined","parseInt","toString","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","objCon","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","arguments_1","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","hasOwnProperty","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","later","clearTimeout","setTimeout","queryParams","array","keys_2","push","encodeURIComponent","join","isObjectArray","parser","call","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","getElementsByTagName","querySelectorAll","blinks","l","len","reference","open","appendChild","cloneNode","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","match","enableBlazorMode","getElement","Node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","getInstance","component","elem","querySelector","instances","_a","inst","addInstance","instance","uniqueID","ret","getBlazorCurrencySymbol","currencyCode","blazorCurrencyData","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","setCurrencyCode","defaultCurrencyCode","loadCldr","data_1","cldrData","enableRtl","status","rightToLeft","getNumericObject","type","numObject","IntlBase","getDependables","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getNumberDependable","currency","getCurrencySymbol","numericObject","getDefaultDateObject","mode","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","regExp","RegExp","ele","_b","classList_1","curClass","contains","add","removeClass","flag","classList_2","classArr","index","splice","remove","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","append","NodeList","script","text","head","detach","removeChild","EventHandler","clearEvents","iKey","select","selector","context","needsVDOM","querySelectId","selectAll","charRegex","idList","list","j","splitId","setId","closest","el","nodeType","matches","siblings","childNodes_1","childNodes","curNode","ELEMENT_NODE","getAttributeOrDefault","property","attrVal","isObj","getAttribute","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","includeInnerHTML","containsClass","getComponent","comp","getElementById","ej2_instances","getModuleName","removeChildInstance","childEle","getElementsByClassName","compName","compInstance","destroy","getObject","curKey","defaultValue","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","propertySetter","newValue","oldVal","saveChanges","complexGetter","complexSetter","complexFactoryGetter","complexFactorySetter","complexArrayGetter","defCollection","ignore","controlParent","ignoreCollectionWatch","extendFunc","descriptor","complexArrayDefinedCallback","configurable","defineProperty","complexArraySetter","isComplexArraySetter","oldValueCollection","newValCollection","complexArrayFactorySetter","complexArrayFactoryGetter","dFunc","prop","keyString","propName","getParentKey","model_1","getArrayModel","serverDataBind","model","ejsAction","isControlParent","arrayFunction","modelObject","Property","target","propertyDescriptor","set","get","enumerable","addPropertyCollection","Complex","ComplexFactory","Collection","CollectionFactory","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","_c","childType","tempValue","CreateBuilder","builderFunction","create","temp","curText","rippleEffect","rippleOptions","done","rippleModel","getRippleModel","rippleFlag","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","isCenterRipple","duration","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","enableRipple","isRipple","setGlobalAnimation","animationMode","convertToChar","cArr","cArr_1","arr","String","fromCharCode","registerLicense","licenseValidator","LicenseValidator","enableVersionBasedPersistence","versionBasedStatePersistence","compile","template","helper","ignorePrefix","fnCode","evalExp","str","varCOunt","localKeys","isClass","singleSpace","LINES","DBL_QUOTED_STR","exp","cnt","matchStr","SPECIAL_CHAR","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","WORDIF","strs","HandleSpecialCharArrObj","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ftArray","splRegexp","arrObj","WINDOWFUNC","WORDFUNC","ELSE_STMT","IF_OR_FOR","SINGLE_SLASH","SlashReplace","NameSpaceForspecialChar","addNS","ignoreList","NOT_NUMBER","NameSpaceArrObj","arrObjReg","tempStr","DOUBLE_SLASH","nameSpaceNew","quotes","ARR_OBJ","getRandomId","random","substr","templateString","compiler","engineObj","templateId","isStringTemplate","root","blazorId","blazorTemplates","HAS_SVG","HAS_ROW","updateBlazorTemplate","templateName","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","tempId","tempElement","length_1","setTemplateEngine","classObj","getTemplateEngine","containerObject","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","res","propKeys_1","getSymbolRegex","regexStr","map","getSymbolMatch","matchKeys_1","constructRegex","val","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","DJF","ERN","ETB","NAD","ZAR","XAF","GHS","XDR","AED","BHD","DZD","EGP","ILS","IQD","JOD","KMF","KWD","LBP","LYD","MAD","MRU","OMR","QAR","SAR","SDG","SOS","SSP","SYP","TND","YER","CLP","INR","TZS","EUR","AZN","RUB","BYN","ZMW","BGN","NGN","XOF","BDT","CNY","BAM","UGX","USD","CZK","GBP","DKK","KES","CHF","MVR","BTN","XCD","AUD","BBD","BIF","BMD","BSD","BWP","BZD","CAD","NZD","FJD","FKP","GIP","GMD","GYD","HKD","IDR","JMD","KYD","LRD","MGA","MOP","MUR","MWK","MYR","PGK","PHP","PKR","RWF","SBD","SCR","SEK","SGD","SHP","SLL","ANG","SZL","TOP","TTD","VUV","WST","ARS","BOB","BRL","COP","CRC","CUP","DOP","GTQ","HNL","MXN","NIO","PAB","PEN","PYG","UYU","VES","IRR","GNF","CDF","HTG","XPF","HRK","HUF","AMD","ISK","JPY","GEL","CVE","KZT","KHR","KPW","KRW","KGS","AOA","LAK","MZN","MKD","MNT","BND","MMK","NOK","NPR","AWG","SRD","PLN","AFN","STN","MDL","RON","UAH","LKR","ALL","RSD","TJS","THB","TMT","TRY","UZS","VND","TWD","HijriParser","getHijriDate","gDate","day","getDate","month","getMonth","year","getFullYear","tMonth","tYear","yPrefix","floor","julilanOffset","julianNumber","b","c","d","tempMonth","modifiedJulianDate","z","cyc","iy","im","tempDay","dateCorrection","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","a","gDay","gMonth","gYear","Date","weekdayKey","timeSetter","m","h","H","s","f","datePartMatcher","M","E","L","Z","G","DateFormat","dateFormat","culture","option","cldr","dependable","base","calendar","formatOptions","isIslamic","islamicRegex","isServerRendered","compareBlazorDateFormats","resPattern","format","getResultantPattern","skeleton","dateSeperator","ConvertDateToWeekFormat","numMapper","parserObject","patternMatch_1","char","weekday","monthIndex","days","designator","eText","era","timeZone","isNaN","intDateFormatter","options","dateParseRegex","dObject","getCurrentDateValue","matches_1","curval","curvalstr","processNumber","curstr","getDay","curlength","substring","desig","getHours","dec","retu","timezone","getTimezoneOffset","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","getWeekOfYear","checkTwodigitNumber","latnParseRegex","tVal","curPattern","no","ishour","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numberMapper","currencySymbol","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","pData","replaceBlazorCurrency","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","p","lastIndexOf","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","isCustomFormat","decimalPart","toExponential","customPivotFormat","groupNumbers","nlead","nend","min","toPrecision","level1","sep","decimalSymbol","level2","toFixed","lead","ceil","latnRegex","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tzone","hpattern","parseTimeZoneRegx","pos","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","getDateObject","setMilliseconds","tKeys","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","retOptions","props_1","curObject","matchString","internalNumberParser","toUpperCase","toLowerCase","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","NumberParser","numberParser","custom","symbolRegex","symbolpattern","getParsedNumber","isNegative","end","Infinity","NaN","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","indexLocation","argument","successHandler","errorHandler","name","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","then","isJson","JSON","parse","dateReviver","catch","boundedEvents_1","exports","Internationalization","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","getActualDateTimeFormat","getNumberPattern","isExcel","getActualNumberFormat","getFirstDayOfWeek","getWeekData","blazorCultureFormats","en-US","D","F","g","r","R","t","T","u","U","Y","blazorCulture","iType","basicPatterns","dPattern","tPattern","calendartype","blazorDefaultObject","defaultObject","dateString","convertMapper","dateConverterMapper","tempString","curFormatMapper","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","formatSplit","customNumberFormat","integerPart","spaceCapture","spaceGrouping","fractionPart","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","dateObj","actualPattern","patternRegex","tLength","timeZonePattern","options_1","processSymbol","minFrac","numrericObject","curMatch","currencyFormatRegex","curCode","hasNegativePattern","fractionDigitsPattern","minimumIntegerPattern","groupingPattern","cPattern","minDigits","maxDigits","diff","integer","firstDay","defaultFirstDay","iCulture","firstDayMapper","aCurrency","rCurrency","iCurrency","pData_1","weeknum","newYear","daynum","getTime","nday","'"," a","yy","EEEE","sun","mon","tue","wed","thu","fri","sat","curWithoutNumberRegex","$","%","-","0","1","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","islamic","yyyy","yyyyM","yyyyMd","yyyyMEd","yyyyMMM","yyyyMMMd","yyyyMMMEd","yyyyMMMM","yyyyQQQ","yyyyQQQQ","timeZoneNames","currencies","displayName","symbol-alt-narrow","minimumGroupingDigits","symbols-numberSystem-latn","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","mapperDigits","currencypData","percentpData","percentnData","currencynData","decimalnData","decimalpData","C","P","N","A","headerRegex","defaultType","Ajax","async","contentType","emitError","url","send","cancel","httpRequest","Promise","resolve","reject","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","clientInfo","userAgent","version","language","navigator","getEvent","isTouch","isDevice","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","isSafari","isIos","regX","isSurfaceDevice","screen","width","platform","maxTouchPoints","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","addOrGetEventData","__eventList","eventName","listener","bindTo","intDebounce","debounceListener","eventData","isIE","passive","some","copyData","shift","trigger","eventProp","eventData_1","event_1","isColEName","Base","isRendered","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","finalUpdate","childChangedProperties","modelObserver","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","moduleClass","filter","__extends","extendStatics","setPrototypeOf","__proto__","__","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","Animation","_super","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animation","animationId","frameId","cancelAnimationFrame","begin","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","progress","requestAnimationFrame","fail","newProp","oldProp","accountURL","lastPageID","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clean","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","modules","usedModules","arg","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","clearUpdate","curIndex","restrictServerDataBind","isSaveChanges","action","parent_1","parentKey","complexKeys","isFinal","valueLength","componentList","bypassKey","isValidated","isLicensed","errors","noLicense","trailExpired","versionMismatched","platformMismatched","invalidKey","manager","licKey","setKey","getKey","npxManager","npxLicKey","validate","contentKey","URLKey","validateMsg","validateURL","getInfoFromKey","result_1","invalidPlatform","expiryDate","expDate","currDate","licenseContent","errorDiv","getDecryptedData","atob","pkey","decryptedStr","resultArray","isNpxKey","licKeySplit_1","lKey","decodeStr","k","buffr","decryptedKey","charCodeAt","validateLicense","getVersion","createLicenseOverlay","bannerTemplate","errorBackground","componentCount","lastHistoryLen","instancecount","isvalid","isBannerAdded","Component","randomId","needsID","isReactHybrid","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","callback","clearTemplate","isHistoryChanged","pageID","location","href","history","hash","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","this_1","newList","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","eleTop","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","evt","currentTarget","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","scroll","vertical","horizontal","client","tempScrollHeight","scrollHeight","tempScrollWidth","scrollWidth","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","preventDefault","changedTouches","intCoord","getCoordinates","initialPosition","clientX","clientY","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","position","getMousePosition","isDragScroll","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","offsetParent","dragStart","getProperTargetElement","bindEvents","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","enableScrollHandler","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","height","offsetHeight","pageYOffset","pageXOffset","innerHeight","innerWidth","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","draEleTop","draEleLeft","isDialogEle","tempDraEleTop","dragValue","enableAutoScroll","scrollIntoView","getPathElements","scrollParent","getScrollParent","getScrollPosition","reverse","hasScroll","nodeEl","clientHeight","scrollingElement","overflow","nodeEle","elementTop","elementLeft","elementsFromPoint","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","srcElement","isOffsetParent","isVerticalScroll","clientWidth","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","parentElement","drop","eleInst","eleInst_1","Droppable","mouseOver","wireEvents","area","accept","isDrag","isDropArea","canDrop","droppedElement","display","coord","keyCode","backspace","tab","enter","control","alt","pause","capslock","space","escape","pageup","pagedown","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","KeyboardEvents","keyPressHandler","isAltKey","altKey","isCtrlKey","ctrlKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","unwireEvents","config","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","getConstant","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","now","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","item","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","nodes","children","localName","attr","hasAttribute"],"mappings":"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AO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC7G,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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AAIlP,QAAO,eAAgB,KAEjCyR,GAAU,UACVZ,GAAe,OACfS,GAAe,SACfZ,GAAW,GAAI1Q,QAAO,oBAAqB,KAC3CyQ,GAAa,cCfb6B,GAAU,oBACVD,GAAU,2BACHD,MAsJPL,IAAc1D,SAAS,IAVC,WACxB,QAASi8C,MAOT,MAJAA,GAAOp3D,UAAUmb,QAAU,SAAUwD,EAAgBtD,EAAQC,GAEzD,WADe,KAAXD,IAAqBA,MAClBmkC,GAAO7gC,EAAgBtD,IAE3B+7C,OAE6Bj8C,SkB1JpCk8C,IACA,SACA,QACA,cACA,4BACA,kCACA,wCACA,oCACA,uBACA,0BACA,0BACA,2CAEAC,KACEC,UAAW,OAAQnoD,SAAU,0BAC7BmoD,UAAW,aAAcnoD,SAAU,gCACnCmoD,UAAW,QAASnoD,SAAU,2BAC9BmoD,UAAW,QAASnoD,SAAU,2BAC9BmoD,UAAW,OAAQnoD,SAAU,qCAE/BooD,IAAY,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,SACA,YACA,mBACA,WACA,UACA,gBACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,UACA,eACA,cACA,cACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,YACA,cACA,cACA,aACA,cACA,YACA,eACA,YACA,SACA,WACA,aACA,aACA,UACA,SACA,YACA,aACA,aACA,eACA,qBACA,SACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,YACA,eACA,SACA,WACA,iBACA,YACA,eACA,eACA,eACA,UACA,oBAEAC,GAAoC,WACpC,QAASA,MA2ET,MAzEAA,GAAmBC,eAAiB,WAChC,OACIC,WACIC,KAAMP,GACN9qD,WAAY+qD,MAIxBG,EAAmBI,SAAW,SAAUp2D,GACpC,GAAIq2D,GAAO5yD,KAAKwyD,gBAEhB,OADaxyD,MAAK6yD,eAAeD,EAAMr2D,IAG3Cg2D,EAAmBM,eAAiB,SAAUD,EAAMr2D,GAChDyD,KAAKoyD,YAAcQ,EAAKH,UAAUprD,WAClCrH,KAAKmyD,WAAaS,EAAKH,UAAUC,KACjC1yD,KAAK8yD,YAAc5xD,SAASW,cAAc,OAC1C7B,KAAK8yD,YAAYnwD,UAAYpG,EAC7ByD,KAAK+yD,gBACL/yD,KAAKgzD,iBACLhzD,KAAKizD,gBACL,IAAIC,GAAelzD,KAAK8yD,YAAYnwD,SAEpC,OADA3C,MAAKmzD,gBACED,EAAaz2D,QAAQ,QAAS,MAEzC81D,EAAmBY,cAAgB,WAG/B,IAAK,GADDC,GAAQpzD,KAAK8yD,YAAYO,SACpB3oD,EAAI,EAAGA,EAAI0oD,EAAMp3D,OAAQ0O,IAE9B,IAAK,GADD2nD,GAAYe,EAAMv2D,SAAS6N,EAAE5N,WAAY,KAAKuK,WACzC1K,EAAI,EAAGA,EAAI01D,EAAUr2D,OAAQW,IAClCqD,KAAK8yD,YAAYO,SAASx2D,SAAS6N,EAAE5N,WAAY,KAAKmW,gBAAgBo/C,EAAUx1D,SAASF,EAAEG,WAAY,KAAKw2D,YAIxHf,EAAmBQ,cAAgB,WAC/B,GAAIxrD,GAAWvH,KAAK8yD,YAAY7wD,iBAAiBjC,KAAKmyD,WAAWzxD,KAAK,KAClE6G,GAASvL,OAAS,GAClBuL,EAASxI,QAAQ,SAAU2C,GACvBkI,EAAOlI,MAOnB6wD,EAAmBS,eAAiB,WAChC,GAAIzrD,GAAWvH,KAAK8yD,YAAY7wD,iBAAiB,IAAMqwD,GAAS5xD,KAAK,OAAS,IAC1E6G,GAASvL,OAAS,GAClBuL,EAASxI,QAAQ,SAAU2C,GACvB4wD,GAASvzD,QAAQ,SAAUw0D,GACnB7xD,EAAQ8xD,aAAaD,IACrB7xD,EAAQuR,gBAAgBsgD,QAS5ChB,EAAmBU,eAAiB,WAChC,GAAIlzD,GAAQC,IAEZA,MAAKoyD,YAAYrzD,QAAQ,SAAU6zD,EAAMrqD,GACrC,GAAIhB,GAAWxH,EAAM+yD,YAAY7wD,iBAAiB2wD,EAAK1oD,SACnD3C,GAASvL,OAAS,GAClBuL,EAASxI,QAAQ,SAAU2C,GACvBA,EAAQuR,gBAAgB2/C,EAAKP,gBAKtCE"}
|
|
1
|
+
{"version":3,"file":"ej2-base.min.js","sources":["../../src/util.js","../../src/intl/parser-base.js","../../src/internationalization.js","../../src/dom.js","../../src/base.js","../../src/notify-property-change.js","../../src/animation.js","../../src/validate-lic.js","../../src/component.js","../../src/template.js","../../src/template-engine.js","../../src/hijri-parser.js","../../src/intl/date-formatter.js","../../src/intl/number-formatter.js","../../src/intl/date-parser.js","../../src/intl/number-parser.js","../../src/observer.js","../../src/intl/intl-base.js","../../src/ajax.js","../../src/browser.js","../../src/event-handler.js","../../src/module-loader.js","../../src/child-property.js","../../src/draggable.js","../../src/droppable.js","../../src/keyboard.js","../../src/l10n.js","../../src/touch.js","../../src/sanitize-helper.js"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\nvar isBlazorPlatform = false;\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function disableBlazorMode() {\n isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n *\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n *\n * @param {Function} handler - callback function to be triggered.\n * @returns {Function} ?\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n // eslint-disable-next-line\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n // eslint-disable-next-line\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getValue(nameSpace, obj) {\n // eslint-disable-next-line\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[parseInt(i.toString(), 10)]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n // eslint-disable-next-line\n var start = obj || {};\n // eslint-disable-next-line\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[parseInt(i.toString(), 10)];\n if (i + 1 === length) {\n fromObj[\"\" + key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[\"\" + key])) {\n fromObj[\"\" + key] = {};\n }\n fromObj = fromObj[\"\" + key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n *\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} key - String value to the get the inner object\n * @returns {void} ?\n * @private\n */\n// eslint-disable-next-line\nexport function deleteObject(obj, key) {\n delete obj[\"\" + key];\n}\n/**\n *@private\n */\n// eslint-disable-next-line\nexport var containerObject = typeof window !== 'undefined' ? window : {};\n/**\n * Check weather the given argument is only object.\n *\n * @param {any} obj - Object which is need to check.\n * @returns {boolean} ?\n * @private\n */\n// eslint-disable-next-line\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n *\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getEnumValue(enumObject, enumValue) {\n // eslint-disable-next-line\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n *\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @returns {void} ?\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[\"\" + deepmerge]) && (temrObj[\"\" + deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[\"\" + key]) || Array.isArray(tempProp[\"\" + key]))) {\n extend(temrObj[\"\" + key], temrObj[\"\" + key], tempProp[\"\" + key], true);\n }\n else {\n temrObj[\"\" + key] = tempProp[\"\" + key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n *\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @param {boolean} deep ?\n * @returns {Object} ?\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied && typeof copied === 'object' ? copied : {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n // eslint-disable-next-line\n if (!arguments_1[i]) {\n return \"continue\";\n }\n // eslint-disable-next-line\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[\"\" + key];\n var copy = obj1[\"\" + key];\n var clone;\n var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n // eslint-disable-next-line\n var blazorEventExtend = isBlazor() ? (!(src instanceof Event) && !isArrayChanged) : true;\n if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n // eslint-disable-next-line\n if (Array.isArray(clone) && clone.hasOwnProperty('isComplexArray')) {\n extend(clone, {}, copy, deep);\n }\n else {\n result[\"\" + key] = extend(clone, {}, copy, deep);\n }\n }\n else {\n /* istanbul ignore next */\n clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];\n // eslint-disable-next-line\n result[\"\" + key] = extend([], clone, copy, (clone && clone.length) || (copy && copy.length));\n }\n }\n else {\n result[\"\" + key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n *\n * @param {Object} value - To check the object is null or undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n *\n * @param {Object} value - To check the object is undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n *\n * @param {string} definedName - To concatenate the unique id to provided name\n * @returns {string} ?\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n *\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @returns {Function} ?\n * @private\n */\nexport function debounce(eventFunction, delay) {\n // eslint-disable-next-line\n var out;\n return function () {\n var _this = this;\n // eslint-disable-next-line\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n/**\n * To convert the object to string for query url\n *\n * @param {Object} data ?\n * @returns {string} ?\n * @private\n */\n// eslint-disable-next-line\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[\"\" + key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n *\n * @param {any} value - Specifies the T type array to be checked.\n * @returns {boolean} ?\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n *\n * @param {Element} child - Specifies the child element to compare with parent.\n * @param {Element} parent - Specifies the parent element.\n * @returns {boolean} ?\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n *\n * @param {string} message - Specifies the error message to be thrown.\n * @returns {void} ?\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n // eslint-disable-next-line\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n *\n * @param {Element} element - Specifies the print content element.\n * @param {Window} printWindow - Specifies the print window.\n * @returns {Window} ?\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('base, link, style'));\n var blinks = [].slice.call(document.getElementsByTagName('body')[0].querySelectorAll('link, style'));\n if (blinks.length) {\n for (var l = 0, len = blinks.length; l < len; l++) {\n links.push(blinks[parseInt(l.toString(), 10)]);\n }\n }\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[parseInt(i.toString(), 10)].outerHTML;\n }\n printWindow.document.write('<!DOCTYPE html> <html><head>' + reference + '</head><body>' + div.innerHTML +\n '<script> (function() { window.ready = true; })(); </script>' + '</body></html>');\n printWindow.document.close();\n printWindow.focus();\n // eslint-disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n *\n * @param {number|string} value ?\n * @returns {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result.match(/auto|cm|mm|in|px|pt|pc|%|em|ex|ch|rem|vw|vh|vmin|vmax/)) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function enableBlazorMode() {\n isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {boolean} result\n * @private\n */\nexport function isBlazor() {\n return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n *\n * @returns {HTMLElement} result\n * @param {HTMLElement | object} element ?\n * @private\n */\nexport function getElement(element) {\n var xPath = 'xPath';\n if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[\"\" + xPath])) {\n return document.evaluate(element[\"\" + xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n }\n return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n *\n * @param {string | HTMLElement} element ?\n * @param {any} component ?\n * @returns {Object} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getInstance(element, component) {\n // eslint-disable-next-line\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n for (var _i = 0, _a = elem[\"\" + instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n *\n * @param {string | HTMLElement} element ?\n * @param {Object} instance ?\n * @returns {void} ?\n * @private\n */\nexport function addInstance(element, instance) {\n // eslint-disable-next-line\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n elem[\"\" + instances].push(instance);\n }\n else {\n elem[\"\" + instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n *\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\n // eslint-disable-next-line\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\n/**\n *\n * @param {Int16Array} num ?\n * @returns {string} ?\n */\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[parseInt(i.toString(), 10)];\n }\n return ret;\n}\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n *\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n *\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object} ?\n */\n ParserBase.getMainObject = function (obj, cName) {\n var value = isBlazor() ? cName : 'main.' + cName;\n return getValue(value, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n *\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object} ?\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n *\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object} ?\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n // eslint-disable-next-line\n if (!res.hasOwnProperty(prop[key])) {\n // eslint-disable-next-line\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n *\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp} ?\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n }).join('|');\n var regExp = RegExp;\n return new regExp(regexStr, 'g');\n };\n /**\n *\n * @param {Object} prop ?\n * @returns {Object} ?\n */\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n // eslint-disable-next-line\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n *\n * @param {string} val ?\n * @returns {string} ?\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[parseInt(i.toString(), 10)] + '|';\n }\n else {\n ret += val[parseInt(i.toString(), 10)];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string} ?\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n // eslint-disable-next-line\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n *\n * @param {Object} obj ?\n * @returns {NumericObject} ?\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} needSymbols ?\n * @param {boolean} blazorMode ?\n * @returns {Object} ?\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem) || blazorMode) {\n var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n var regExp = RegExp;\n ret.numberParseRegex = new regExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue(blazorMode ? 'numberSymbols' : 'symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} isNumber ?\n * @returns {NumberMapper} ?\n */\n // eslint-disable-next-line\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n // eslint-disable-next-line\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n/**\n * @private\n */\nvar blazorCurrencyData = {\n 'DJF': 'Fdj',\n 'ERN': 'Nfk',\n 'ETB': 'Br',\n 'NAD': '$',\n 'ZAR': 'R',\n 'XAF': 'FCFA',\n 'GHS': 'GH₵',\n 'XDR': 'XDR',\n 'AED': 'د.إ.',\n 'BHD': 'د.ب.',\n 'DZD': 'د.ج.',\n 'EGP': 'ج.م.',\n 'ILS': '₪',\n 'IQD': 'د.ع.',\n 'JOD': 'د.ا.',\n 'KMF': 'CF',\n 'KWD': 'د.ك.',\n 'LBP': 'ل.ل.',\n 'LYD': 'د.ل.',\n 'MAD': 'د.م.',\n 'MRU': 'أ.م.',\n 'OMR': 'ر.ع.',\n 'QAR': 'ر.ق.',\n 'SAR': 'ر.س.',\n 'SDG': 'ج.س.',\n 'SOS': 'S',\n 'SSP': '£',\n 'SYP': 'ل.س.',\n 'TND': 'د.ت.',\n 'YER': 'ر.ي.',\n 'CLP': '$',\n 'INR': '₹',\n 'TZS': 'TSh',\n 'EUR': '€',\n 'AZN': '₼',\n 'RUB': '₽',\n 'BYN': 'Br',\n 'ZMW': 'K',\n 'BGN': 'лв.',\n 'NGN': '₦',\n 'XOF': 'CFA',\n 'BDT': '৳',\n 'CNY': '¥',\n 'BAM': 'КМ',\n 'UGX': 'USh',\n 'USD': '$',\n 'CZK': 'Kč',\n 'GBP': '£',\n 'DKK': 'kr.',\n 'KES': 'Ksh',\n 'CHF': 'CHF',\n 'MVR': 'ރ.',\n 'BTN': 'Nu.',\n 'XCD': 'EC$',\n 'AUD': '$',\n 'BBD': '$',\n 'BIF': 'FBu',\n 'BMD': '$',\n 'BSD': '$',\n 'BWP': 'P',\n 'BZD': '$',\n 'CAD': '$',\n 'NZD': '$',\n 'FJD': '$',\n 'FKP': '£',\n 'GIP': '£',\n 'GMD': 'D',\n 'GYD': '$',\n 'HKD': '$',\n 'IDR': 'Rp',\n 'JMD': '$',\n 'KYD': '$',\n 'LRD': '$',\n 'MGA': 'Ar',\n 'MOP': 'MOP$',\n 'MUR': 'Rs',\n 'MWK': 'MK',\n 'MYR': 'RM',\n 'PGK': 'K',\n 'PHP': '₱',\n 'PKR': 'Rs',\n 'RWF': 'RF',\n 'SBD': '$',\n 'SCR': 'SR',\n 'SEK': 'kr',\n 'SGD': '$',\n 'SHP': '£',\n 'SLL': 'Le',\n 'ANG': 'NAf.',\n 'SZL': 'E',\n 'TOP': 'T$',\n 'TTD': '$',\n 'VUV': 'VT',\n 'WST': 'WS$',\n 'ARS': '$',\n 'BOB': 'Bs',\n 'BRL': 'R$',\n 'COP': '$',\n 'CRC': '₡',\n 'CUP': '$',\n 'DOP': '$',\n 'GTQ': 'Q',\n 'HNL': 'L',\n 'MXN': '$',\n 'NIO': 'C$',\n 'PAB': 'B/.',\n 'PEN': 'S/',\n 'PYG': '₲',\n 'UYU': '$',\n 'VES': 'Bs.S',\n 'IRR': 'ريال',\n 'GNF': 'FG',\n 'CDF': 'FC',\n 'HTG': 'G',\n 'XPF': 'FCFP',\n 'HRK': 'kn',\n 'HUF': 'Ft',\n 'AMD': '֏',\n 'ISK': 'kr',\n 'JPY': '¥',\n 'GEL': '₾',\n 'CVE': '',\n 'KZT': '₸',\n 'KHR': '៛',\n 'KPW': '₩',\n 'KRW': '₩',\n 'KGS': 'сом',\n 'AOA': 'Kz',\n 'LAK': '₭',\n 'MZN': 'MTn',\n 'MKD': 'ден',\n 'MNT': '₮',\n 'BND': '$',\n 'MMK': 'K',\n 'NOK': 'kr',\n 'NPR': 'रु',\n 'AWG': 'Afl.',\n 'SRD': '$',\n 'PLN': 'zł',\n 'AFN': '؋',\n 'STN': 'Db',\n 'MDL': 'L',\n 'RON': 'lei',\n 'UAH': '₴',\n 'LKR': 'රු.',\n 'ALL': 'Lekë',\n 'RSD': 'дин.',\n 'TJS': 'смн',\n 'THB': '฿',\n 'TMT': 'm.',\n 'TRY': '₺',\n 'UZS': 'сўм',\n 'VND': '₫',\n 'TWD': 'NT$'\n};\n/**\n *\n * @param {string} currencyCode ?\n * @returns {string} ?\n */\nexport function getBlazorCurrencySymbol(currencyCode) {\n return getValue(currencyCode || '', blazorCurrencyData);\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue, isBlazor } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n *\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n *\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n *\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberParser = function (options) {\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n *\n * @param {number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n *\n * @param {Date} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date} ?\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number} ?\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n *\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n *\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @param {boolean} isExcel ?\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n };\n /**\n * Returns the First Day of the Week\n *\n * @returns {number} ?\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n /**\n * Returns the culture\n *\n * @returns {string} ?\n */\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n *\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n *\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n *\n * @param {Object[]} data Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void} ?\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void} ?\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} type ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n // eslint-disable-next-line\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = isBlazor() ? getValue('numberSymbols', numObject) : getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the numeric CLDR number base object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @returns {string} ?\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n // eslint-disable-next-line\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n *\n * @param {string} mode ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n // eslint-disable-next-line\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n *\n * @param {string} tagName - Name of the tag, id and class names.\n * @param {ElementProperties} properties - Object to set properties in the element.\n * @param {ElementProperties} properties.id - To set the id to the created element.\n * @param {ElementProperties} properties.className - To add classes to the element.\n * @param {ElementProperties} properties.innerHTML - To set the innerHTML to element.\n * @param {ElementProperties} properties.styles - To set the some custom styles to element.\n * @param {ElementProperties} properties.attrs - To set the attributes to element.\n * @returns {any} ?\n * @private\n */\nexport function createElement(tagName, properties) {\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n var regExp = RegExp;\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (isObject(ele)) {\n var curClass = getValue('attributes.className', ele);\n if (isNullOrUndefined(curClass)) {\n setValue('attributes.className', className, ele);\n }\n else if (!new regExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n setValue('attributes.className', curClass + ' ' + className, ele);\n }\n }\n else {\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n var flag = isObject(ele);\n var canRemove = flag ? getValue('attributes.className', ele) : ele.className !== '';\n if (canRemove) {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n if (flag) {\n var classes_1 = getValue('attributes.className', ele);\n var classArr = classes_1.split(' ');\n var index = classArr.indexOf(className);\n if (index !== -1) {\n classArr.splice(index, 1);\n }\n setValue('attributes.className', classArr.join(' '), ele);\n }\n else {\n ele.classList.remove(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to get classlist.\n *\n * @param {string | string[]} classes - An element the need to check visibility\n * @returns {string[]} ?\n * @private\n */\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n *\n * @param {Element|Node} element - An element the need to check visibility\n * @returns {boolean} ?\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n if (fromElements instanceof NodeList) {\n while (fromElements.length > 0) {\n docFrag.appendChild(fromElements[0]);\n }\n }\n else {\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n *\n * @param {Element} ele - An element is going to evaluate the script\n * @returns {void} ?\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from parentnode\n *\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function detach(element) {\n var parentNode = element.parentNode;\n if (parentNode) {\n return parentNode.removeChild(element);\n }\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n *\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @returns {void} ?\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n *\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {string} attributes - JSON Object that is going to as attributes.\n * @returns {Element} ?\n * @private\n */\n// eslint-disable-next-line\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (isObject(ele)) {\n var iKey = key;\n if (key === 'tabindex') {\n iKey = 'tabIndex';\n }\n ele.attributes[\"\" + iKey] = attributes[\"\" + key];\n }\n else {\n ele.setAttribute(key, attributes[\"\" + key]);\n }\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function select(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {HTMLElement[]} ?\n * @private\n */\n// eslint-disable-next-line\nexport function selectAll(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * The function selects an id of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @returns {string} ?\n * @private\n */\nfunction querySelectId(selector) {\n var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n var idList = selector.split(',');\n for (var i = 0; i < idList.length; i++) {\n var list = idList[parseInt(i.toString(), 10)].split(' ');\n for (var j = 0; j < list.length; j++) {\n if (list[parseInt(j.toString(), 10)].indexOf('#') > -1) {\n if (!list[parseInt(j.toString(), 10)].match(/\\[.*\\]/)) {\n var splitId = list[parseInt(j.toString(), 10)].split('#');\n if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n var setId = list[parseInt(j.toString(), 10)].split('.');\n setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n list[parseInt(j.toString(), 10)] = setId.join('.');\n }\n }\n }\n }\n idList[parseInt(i.toString(), 10)] = list.join(' ');\n }\n return idList.join(',');\n }\n return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n *\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @returns {Element} ?\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n *\n * @param {Element|Node} element - An element that need to get siblings.\n * @returns {Element[]} ?\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n *\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @returns {string} ?\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal;\n var isObj = isObject(element);\n if (isObj) {\n attrVal = getValue('attributes.' + property, element);\n }\n else {\n attrVal = element.getAttribute(property);\n }\n if (isNullOrUndefined(attrVal) && value) {\n if (!isObj) {\n element.setAttribute(property, value.toString());\n }\n else {\n element.attributes[\"\" + property] = value;\n }\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n *\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @returns {void} ?\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // eslint-disable-next-line\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n *\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @returns {void} ?\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function matches(element, selector) {\n // eslint-disable-next-line\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n/**\n * Method to get the html text from DOM.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} innerHTML - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function includeInnerHTML(ele, innerHTML) {\n ele.innerHTML = innerHTML;\n}\n/**\n * Method to get the containsclass.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} className - String selector which element will satisfy.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n // eslint-disable-next-line\n return new RegExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n }\n else {\n return ele.classList.contains(className);\n }\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Object} element - Element to compare with the selector.\n * @param {boolean} deep ?\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function cloneNode(element, deep) {\n if (isObject(element)) {\n if (deep) {\n return extend({}, {}, element, true);\n }\n }\n else {\n return element.cloneNode(deep);\n }\n}\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n *\n * @param {Object} options ?\n * @param {string} element ?\n */\n function Base(options, element) {\n this.isRendered = false;\n this.isComplexArraySetter = false;\n this.isServerRendered = false;\n this.allowServerDataBinding = true;\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.bulkChanges = {};\n this.refreshing = false;\n this.ignoreCollectionWatch = false;\n // eslint-disable-next-line\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n *\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange ? - Specifies to true when we set properties.\n * @returns {void} ?\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n else if (isBlazor() && this.isRendered) {\n this.serverDataBind(prop);\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n /**\n * Calls for child element data bind\n *\n * @param {Object} obj ?\n * @param {Object} parent ?\n * @returns {void} ?\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[\"\" + key] instanceof Array) {\n for (var _a = 0, _b = parent[\"\" + key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[\"\" + key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n *\n * @returns {void} ?\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n /* tslint:disable:no-any */\n Base.prototype.serverDataBind = function (newChanges) {\n if (!isBlazor()) {\n return;\n }\n newChanges = newChanges ? newChanges : {};\n extend(this.bulkChanges, {}, newChanges, true);\n var sfBlazor = 'sfBlazor';\n if (this.allowServerDataBinding && window[\"\" + sfBlazor].updateModel) {\n window[\"\" + sfBlazor].updateModel(this);\n this.bulkChanges = {};\n }\n };\n /* tslint:enable:no-any */\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\n // tslint:disable-next-line:no-any\n var newChanges = {};\n newChanges[\"\" + key] = newValue;\n this.serverDataBind(newChanges);\n }\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} handler - Specifies the call to run when the event occurs.\n * @returns {void} ?\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} handler - Specifies the function to remove\n * @returns {void} ?\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n *\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n * @returns {void} ?\n */\n Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n var _this = this;\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n var blazor = 'Blazor';\n if (window[\"\" + blazor]) {\n var promise = handler.call(this, eventProp);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n data = promise;\n }\n else {\n promise.then(function (data) {\n if (successHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n JSON.parse(data) : data;\n successHandler.call(_this, data);\n }\n }).catch(function (data) {\n if (errorHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n errorHandler.call(_this, data);\n }\n });\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n return data;\n }\n };\n /**\n * To maintain instance in base class\n *\n * @returns {void} ?\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n *\n * @returns {void} ?\n */\n Base.prototype.destroy = function () {\n var _this = this;\n // eslint-disable-next-line\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n *\n * @param {HTMLElement} elem Specifies the HTMLElement or element id string.\n * @param {string} comp Specifies the component module name or Component.\n * @returns {any} ?\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[parseInt(i.toString(), 10)];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @return {void}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function removeChildInstance(element) {\n // tslint:disable-next-line:no-any\n var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n for (var i = 0; i < childEle.length; i++) {\n var compName = childEle[parseInt(i.toString(), 10)].classList[1].split('e-')[1];\n // tslint:disable-next-line:no-any\n var compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n *\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type ?\n * @returns {ClassObject} ?\n */\n// eslint-disable-next-line\nfunction getObject(instance, curKey, defaultValue, type) {\n // eslint-disable-next-line\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[\"\" + curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[\"\" + curKey];\n}\n/**\n * Returns object array\n *\n * @param {ClassObject} instance ?\n * @param {string} curKey ?\n * @param {Object[]} defaultValue ?\n * @param {Object} type ?\n * @param {boolean} isSetter ?\n * @param {boolean} isFactory ?\n * @returns {Object[]} ?\n */\n// eslint-disable-next-line\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue ? defaultValue.length : 0;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[parseInt(i.toString(), 10)], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[parseInt(i.toString(), 10)], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[parseInt(i.toString(), 10)], false]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[\"\" + curKey] = defaultValue;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n * Set the properties for the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[\"\" + curKey] !== newValue) {\n // eslint-disable-next-line\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[\"\" + curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\n// eslint-disable-next-line\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\n// eslint-disable-next-line\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n // eslint-disable-next-line\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[\"\" + curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n var _this = this;\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n var ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)\n || this.ignoreCollectionWatch);\n // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('push') && !ignore) {\n ['push', 'pop'].forEach(function (extendFunc) {\n var descriptor = {\n value: complexArrayDefinedCallback(extendFunc, curKey, type, _this.properties[\"\" + curKey]).bind(_this),\n configurable: true\n };\n Object.defineProperty(_this.properties[\"\" + curKey], extendFunc, descriptor);\n });\n }\n // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {\n Object.defineProperty(this.properties[\"\" + curKey], 'isComplexArray', { value: true });\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n this.isComplexArraySetter = true;\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.isComplexArraySetter = false;\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n // eslint-disable-next-line\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {string} dFunc ?\n * @param {string} curKey ?\n * @param {Object} type ?\n * @param {Object} prop ?\n * @returns {Object} ?\n */\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n /* tslint:disable no-function-expression */\n return function () {\n var newValue = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newValue[_i] = arguments[_i];\n }\n var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n switch (dFunc) {\n case 'push':\n for (var i = 0; i < newValue.length; i++) {\n Array.prototype[\"\" + dFunc].apply(prop, [newValue[parseInt(i.toString(), 10)]]);\n var model_1 = getArrayModel(keyString + (prop.length - 1), newValue[parseInt(i.toString(), 10)], !this.controlParent, dFunc);\n this.serverDataBind(model_1, newValue[parseInt(i.toString(), 10)], false, dFunc);\n }\n break;\n case 'pop':\n Array.prototype[\"\" + dFunc].apply(prop);\n // eslint-disable-next-line\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\n return prop;\n };\n}\n/**\n *\n * @param {string} keyString ?\n * @param {Object} value ?\n * @param {boolean} isControlParent ?\n * @param {string} arrayFunction ?\n * @returns {Object} ?\n */\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n var modelObject = keyString;\n if (isControlParent) {\n modelObject = {};\n modelObject[\"\" + keyString] = value;\n if (value && typeof value === 'object') {\n var action = 'ejsAction';\n modelObject[\"\" + keyString][\"\" + action] = arrayFunction;\n }\n }\n return modelObject;\n}\n// eslint-disable-next-line\n/**\n * Method used to create property. General syntax below.\n *\n * @param {Object} defaultValue - Specifies the default value of property.\n * @returns {PropertyDecorator} ?\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Complex<Type>({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n *\n * @param {Function} type - Specifies the class factory type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n *\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyCollectionInfo} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n *\n * @returns {PropertyDecorator} ?\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[\"\" + key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[\"\" + key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * @param {Function} classConstructor ?\n * @returns {void} ?\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\n// eslint-disable-next-line\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n *\n * @param {BuildInfo} target ?\n * @param {string} key ?\n * @param {string} propertyType ?\n * @param {Object} defaultValue ?\n * @param {Function} type ?\n * @returns {void} ?\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n // eslint-disable-next-line\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n // eslint-disable-next-line\n target.propList[propertyType + 'Names'].push(key);\n}\n/**\n * Returns an object containing the builder properties\n *\n * @param {Function} component ?\n * @returns {Object} ?\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[\"\" + key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n *\n * @param {any} component -specifies the target component for which builder to be created.\n * @returns {Object} ?\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n // eslint-disable-next-line\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n *\n * @param {Object} context ?\n * @param {string} prefix ?\n * @returns {ParentOption} ?\n * @private\n */\nfunction getParentContext(context, prefix) {\n // eslint-disable-next-line\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = 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 { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n *\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @returns {void} ?\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n *\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (animationMode === 'Disable') {\n if (model.begin) {\n model.begin.call(this, model);\n }\n if (model.end) {\n model.end.call(this, model);\n }\n }\n else {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n }\n };\n /**\n * Triggers animation\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element\n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame\n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n //startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n *\n * @param {AnimationModel} options ?\n * @returns {AnimationModel} ?\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n * @param {AnimationModel} newProp ?\n * @param {AnimationModel} oldProp ?\n * @returns {void} ?\n */\n // eslint-disable-next-line\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n * <div id='ripple'></div>\n * <script>\n * rippleEffect(document.getElementById('ripple'));\n * </script>\n * ```\n *\n * @private\n * @param {HTMLElement} element - Target element\n * @param {RippleOptions} rippleOptions - Ripple options .\n * @param {Function} done .\n * @returns {void} .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return (function () {\n // do nothing.\n });\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\n/**\n * Handler for ripple model\n *\n * @param {RippleOptions} rippleOptions ?\n * @returns {RippleOptions} ?\n */\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n *\n * @param {MouseEvent} e ?\n * @param {RippleArgs} eventArgs ?\n * @returns {void} ?\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n *\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean} ?\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n/**\n * Defines the Modes of Global animation.\n *\n * @private\n */\nexport var animationMode = '';\n/**\n * Method for set the Global animation modes for Syncfusion Blazor components.\n *\n * @param {string} value - Specifies the animation mode.\n * @returns {void}\n */\nexport function setGlobalAnimation(value) {\n animationMode = value;\n}\n","import { createElement } from './dom';\nimport { getValue, containerObject, setValue, isNullOrUndefined } from './util';\nexport var componentList = ['grid', 'pivotview', 'treegrid', 'spreadsheet', 'rangeNavigator', 'DocumentEditor', 'listbox', 'inplaceeditor', 'PdfViewer', 'richtexteditor', 'DashboardLayout', 'chart', 'stockChart', 'circulargauge', 'diagram', 'heatmap', 'lineargauge', 'maps', 'slider', 'smithchart', 'barcode', 'sparkline', 'treemap', 'bulletChart', 'kanban', 'daterangepicker', 'schedule', 'gantt', 'signature', 'query-builder', 'drop-down-tree', 'carousel', 'filemanager', 'uploader', 'accordion', 'tab', 'treeview'];\nvar bypassKey = [115, 121, 110, 99, 102, 117, 115, 105,\n 111, 110, 46, 105, 115, 76, 105, 99, 86, 97, 108,\n 105, 100, 97, 116, 101, 100];\nvar accountURL;\n/**\n * License validation module\n *\n * @private\n */\nvar LicenseValidator = /** @class */ (function () {\n function LicenseValidator(key) {\n this.isValidated = false;\n this.isLicensed = true;\n this.version = '21';\n this.platform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats/i;\n this.errors = {\n noLicense: '<span>This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.</span>',\n trailExpired: '<span>This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.</span>',\n versionMismatched: '<span>The included Syncfusion license key is invalid.</span>',\n platformMismatched: '<span>The included Syncfusion license key is invalid.</span>',\n invalidKey: '<span>The included Syncfusion license key is invalid.</span>'\n };\n /**\n * To manage licensing operation.\n */\n this.manager = (function () {\n var licKey = null;\n /**\n * Sets the license key.\n *\n * @param {string} key - Specifies the license key.\n * @returns {void}\n */\n function set(key) { licKey = key; }\n /**\n * Gets the license key.\n *\n * @returns {string} -Gets the license key.\n */\n function get() { return licKey; }\n return {\n setKey: set,\n getKey: get\n };\n })();\n /**\n * To manage npx licensing operation.\n */\n this.npxManager = (function () {\n var npxLicKey = 'npxKeyReplace';\n /**\n * Gets the license key.\n *\n * @returns {string} - Gets the license key.\n */\n function get() { return npxLicKey; }\n return {\n getKey: get\n };\n })();\n this.manager.setKey(key);\n }\n /**\n * To validate the provided license key.\n */\n LicenseValidator.prototype.validate = function () {\n var contentKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 108, 105, 99, 101, 110, 115, 101, 67, 111, 110, 116, 101, 110, 116];\n var URLKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 99, 108, 97, 105, 109, 65, 99, 99, 111, 117, 110, 116, 85, 82, 76];\n if (!this.isValidated && (containerObject && !getValue(convertToChar(bypassKey), containerObject) && !getValue('Blazor', containerObject))) {\n var validateMsg = void 0;\n var validateURL = void 0;\n if ((this.manager && this.manager.getKey()) || (this.npxManager && this.npxManager.getKey() !== 'npxKeyReplace')) {\n var result = this.getInfoFromKey();\n if (result && result.length) {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n if (!this.platform.test(res.platform) || res.invalidPlatform) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (res.version.indexOf(this.version) === -1) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else if (res.expiryDate) {\n var expDate = new Date(res.expiryDate);\n var currDate = new Date();\n if (expDate !== currDate && expDate < currDate) {\n validateMsg = this.errors.trailExpired;\n }\n else {\n break;\n }\n }\n }\n }\n else {\n validateMsg = this.errors.invalidKey;\n }\n }\n else {\n var licenseContent = getValue(convertToChar(contentKey), containerObject);\n validateURL = getValue(convertToChar(URLKey), containerObject);\n if (licenseContent && licenseContent !== '') {\n validateMsg = licenseContent;\n }\n else {\n validateMsg = this.errors.noLicense;\n }\n }\n if (validateMsg && typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n accountURL = (validateURL && validateURL !== '') ? validateURL : \"https://www.syncfusion.com/account/claim-license-key?pl=SmF2YVNjcmlwdA==&vs=MjE=\";\n var errorDiv = createElement('div', {\n innerHTML: \"<img src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE5OV80KSI+CjxwYXRoIGQ9Ik0xMiAyMUMxNi45NzA2IDIxIDIxIDE2Ljk3MDYgMjEgMTJDMjEgNy4wMjk0NCAxNi45NzA2IDMgMTIgM0M3LjAyOTQ0IDMgMyA3LjAyOTQ0IDMgMTJDMyAxNi45NzA2IDcuMDI5NDQgMjEgMTIgMjFaIiBzdHJva2U9IiM3MzczNzMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMS4yNSAxMS4yNUgxMlYxNi41SDEyLjc1IiBmaWxsPSIjNjE2MDYzIi8+CjxwYXRoIGQ9Ik0xMS4yNSAxMS4yNUgxMlYxNi41SDEyLjc1IiBzdHJva2U9IiM3MzczNzMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMS44MTI1IDlDMTIuNDMzOCA5IDEyLjkzNzUgOC40OTYzMiAxMi45Mzc1IDcuODc1QzEyLjkzNzUgNy4yNTM2OCAxMi40MzM4IDYuNzUgMTEuODEyNSA2Ljc1QzExLjE5MTIgNi43NSAxMC42ODc1IDcuMjUzNjggMTAuNjg3NSA3Ljg3NUMxMC42ODc1IDguNDk2MzIgMTEuMTkxMiA5IDExLjgxMjUgOVoiIGZpbGw9IiM3MzczNzMiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xOTlfNCI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K' style=\\\"top: 6px;\\n position: absolute;\\n left: 16px;\\n width: 24px;\\n height: 24px;\\\"/>\" + validateMsg + ' ' + '<a style=\"text-decoration: none;color: #0D6EFD;font-weight: 500;\" href=' + accountURL + '>Claim your free account</a>'\n });\n errorDiv.setAttribute('style', \"position: fixed;\\n top: 10px;\\n left: 10px;\\n right: 10px;\\n font-size: 14px;\\n background: #EEF2FF;\\n color: #222222;\\n z-index: 999999999;\\n text-align: left;\\n border: 1px solid #EEEEEE;\\n padding: 10px 11px 10px 50px;\\n border-radius: 8px;\\n font-family: Helvetica Neue, Helvetica, Arial;\");\n document.body.appendChild(errorDiv);\n this.isLicensed = false;\n }\n this.isValidated = true;\n setValue(convertToChar(bypassKey), this.isValidated, containerObject);\n }\n return this.isLicensed;\n };\n LicenseValidator.prototype.getDecryptedData = function (key) {\n try {\n return atob(key);\n }\n catch (error) {\n return '';\n }\n };\n /**\n * Get license information from key.\n *\n * @returns {IValidator} - Get license information from key.\n */\n LicenseValidator.prototype.getInfoFromKey = function () {\n try {\n var licKey = '';\n var pkey = [5439488, 7929856, 5111808, 6488064, 4587520, 7667712, 5439488,\n 6881280, 5177344, 7208960, 4194304, 4456448, 6619136, 7733248, 5242880, 7077888,\n 6356992, 7602176, 4587520, 7274496, 7471104, 7143424];\n var decryptedStr = [];\n var resultArray = [];\n var invalidPlatform = false;\n var isNpxKey = false;\n if (this.manager.getKey()) {\n licKey = this.manager.getKey();\n }\n else {\n isNpxKey = true;\n licKey = this.npxManager.getKey().split('npxKeyReplace')[1];\n }\n var licKeySplit = licKey.split(';');\n for (var _i = 0, licKeySplit_1 = licKeySplit; _i < licKeySplit_1.length; _i++) {\n var lKey = licKeySplit_1[_i];\n var decodeStr = this.getDecryptedData(lKey);\n if (!decodeStr) {\n continue;\n }\n var k = 0;\n var buffr = '';\n if (!isNpxKey) {\n for (var i = 0; i < decodeStr.length; i++, k++) {\n if (k === pkey.length) {\n k = 0;\n }\n var c = decodeStr.charCodeAt(i);\n buffr += String.fromCharCode(c ^ (pkey[parseInt(k.toString(), 10)] >> 16));\n }\n }\n else {\n var charKey = decodeStr[decodeStr.length - 1];\n var decryptedKey = [];\n for (var i = 0; i < decodeStr.length; i++) {\n decryptedKey[parseInt(i.toString(), 10)] = decodeStr[parseInt(i.toString(), 10)].charCodeAt(0) - charKey.charCodeAt(0);\n }\n for (var i = 0; i < decryptedKey.length; i++) {\n buffr += String.fromCharCode(decryptedKey[parseInt(i.toString(), 10)]);\n }\n }\n if (this.platform.test(buffr)) {\n decryptedStr = buffr.split(';');\n invalidPlatform = false;\n // checked the length to verify the key in proper strucutre\n if (decryptedStr.length > 3) {\n resultArray.push({ platform: decryptedStr[0],\n version: decryptedStr[1],\n expiryDate: decryptedStr[2] });\n }\n }\n else if (buffr && buffr.split(';').length > 3) {\n invalidPlatform = true;\n }\n }\n if (invalidPlatform && !resultArray.length) {\n return [{ invalidPlatform: invalidPlatform }];\n }\n else {\n return resultArray.length ? resultArray : null;\n }\n }\n catch (error) {\n return null;\n }\n };\n return LicenseValidator;\n}());\nvar licenseValidator = new LicenseValidator();\n/**\n * Converts the given number to characters.\n *\n * @param {number} cArr - Specifies the license key as number.\n * @returns {string}\n */\nfunction convertToChar(cArr) {\n var ret = '';\n for (var _i = 0, cArr_1 = cArr; _i < cArr_1.length; _i++) {\n var arr = cArr_1[_i];\n ret += String.fromCharCode(arr);\n }\n return ret;\n}\n/**\n * To set license key.\n *\n * @param {string} key - license key\n * @returns {void}\n */\nexport function registerLicense(key) {\n licenseValidator = new LicenseValidator(key);\n}\nexport var validateLicense = function (key) {\n if (key) {\n registerLicense(key);\n }\n return licenseValidator.validate();\n};\nexport var getVersion = function () {\n return licenseValidator.version;\n};\n// Method for create overlay over the sample\nexport var createLicenseOverlay = function () {\n var bannerTemplate = \"\\n <div style=\\\"\\n position: fixed;\\n width: 100%;\\n height: 100%;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background-color: rgba(0, 0, 0, 0.5);\\n z-index: 99999;\\n \\\">\\n <div style=\\\"\\n background: #FFFFFF;\\n height: 455px;\\n width: 840px;\\n font-family: Helvetica Neue, Helvetica, Arial;\\n color: #000000;\\n box-shadow: 0px 4.8px 14.4px rgb(0 0 0 / 18%), 0px 25.6px 57.6px rgb(0 0 0 / 22%);\\n display: block;\\n margin: 8% auto;\\n border-radius: 20px;\\n \\\">\\n <div style=\\\"\\n position: absolute;\\nwidth: 838px;\\nheight: 62px;\\nbackground-color: #F9F9F9;\\nborder: 1px solid #EEEEEE;\\nborder-top-left-radius: 20px;\\nborder-top-right-radius: 20px;\\n\\\">\\n <img src=\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ2IiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMTQ2IDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDAuNTk2NSAxNS4wMDc4SDMyLjQyNUMzMS41NTU3IDE1LjAwNzggMzAuOTAzNyAxNS4xODEyIDMwLjUxMjUgMTUuNDg0NkMzMC4xMjEzIDE1LjgzMTQgMjkuOTA0IDE2LjMwODIgMjkuOTA0IDE3LjA0NTFDMjkuOTA0IDE3LjYwODYgMzAuMDc3OCAxOC4wNDIxIDMwLjQyNTYgMTguMzAyMkMzMC43NzMzIDE4LjYwNTYgMzEuMjk0OSAxOC43MzU2IDMxLjk5MDMgMTguNzM1NkgzNi4zMzY5QzM4LjExODkgMTguNzM1NiAzOS40MjI5IDE5LjA4MjQgNDAuMTYxOCAxOS43MzI2QzQwLjk0NDIgMjAuNDI2MiA0MS4yOTE5IDIxLjU1MzIgNDEuMjkxOSAyMy4xMTM3QzQxLjI5MTkgMjQuNzE3NiA0MC44NTcyIDI1Ljg4OCAzOS45ODc5IDI2LjY2ODJDMzkuMTE4NiAyNy40MDUxIDM3LjcyNzcgMjcuNzk1MyAzNS44NTg3IDI3Ljc5NTNIMjcuMDc4N1YyNS4wMjFIMzUuMzM3MkMzNi4yOTM0IDI1LjAyMSAzNi45NDU0IDI0Ljg5MSAzNy4zMzY2IDI0LjYzMDlDMzcuNzI3NyAyNC4zNzA4IDM3LjkwMTYgMjMuODk0IDM3LjkwMTYgMjMuMjg3MUMzNy45MDE2IDIyLjYzNjkgMzcuNzI3NyAyMi4xNjAxIDM3LjM4IDIxLjlDMzcuMDMyMyAyMS42Mzk5IDM2LjQyMzggMjEuNDY2NSAzNS41NTQ1IDIxLjQ2NjVIMzEuNjQyNkMyOS44NjA1IDIxLjQ2NjUgMjguNTEzMSAyMS4xMTk4IDI3LjY4NzMgMjAuMzgyOEMyNi44NjE0IDE5LjY0NTkgMjYuNDI2OCAxOC41MTg5IDI2LjQyNjggMTcuMDAxN0MyNi40MjY4IDE1LjM1NDUgMjYuODYxNCAxNC4xNDA4IDI3LjczMDcgMTMuMzYwNkMyOC42IDEyLjU4MDMgMjkuOTkwOSAxMi4yMzM1IDMxLjkwMzQgMTIuMjMzNUg0MC41OTY1VjE1LjAwNzhaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik00OC4wNzI3IDI1LjI4MTFINTAuNTA2OFYxNi4zOTQ5SDUzLjU0OTNWMjcuNTM1MkM1My41NDkzIDI5LjA1MjQgNTMuMjAxNiAzMC4xNzk0IDUyLjUwNjIgMzAuOTE2M0M1MS44MTA3IDMxLjY1MzIgNTAuNzI0MSAzMiA0OS4yNDYzIDMySDQzLjMzNVYyOS42NTkySDQ4LjcyNDdDNDkuMjg5NyAyOS42NTkyIDQ5Ljc2NzkgMjkuNTI5MiA1MC4wNzIxIDI5LjIyNThDNTAuMzc2NCAyOC45NjU3IDUwLjU1MDIgMjguNTMyMiA1MC41NTAyIDI4LjAxMlYyNy44Mzg2SDQ3Ljg5ODlDNDYuMjAzNyAyNy44Mzg2IDQ0Ljk0MzIgMjcuNDkxOSA0NC4yNDc4IDI2Ljg0MTZDNDMuNTA4OSAyNi4xNDgxIDQzLjE2MTEgMjUuMDY0NCA0My4xNjExIDIzLjQ2MDVWMTYuMzk0OUg0Ni4xNjAyVjIzLjIwMDVDNDYuMTYwMiAyNC4wNjc0IDQ2LjI5MDYgMjQuNjMwOSA0Ni41NTE0IDI0Ljg5MUM0Ni43MjUzIDI1LjE1MTEgNDcuMjQ2OSAyNS4yODExIDQ4LjA3MjcgMjUuMjgxMVoiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTU1Ljg5NjUgMTYuMzk0OUg2MS41OTA0QzYzLjMyOTEgMTYuMzk0OSA2NC41NDYxIDE2LjY5ODMgNjUuMjg1IDE3LjM0ODVDNjYuMDIzOSAxNy45OTg4IDY2LjM3MTYgMTkuMDgyNCA2Ni4zNzE2IDIwLjU1NjNWMjcuNzk1M0g2My4zMjkxVjIwLjk0NjRDNjMuMzI5MSAyMC4wNzk0IDYzLjE5ODcgMTkuNTE1OSA2Mi45Mzc5IDE5LjI5OTJDNjIuNjc3MSAxOS4wMzkxIDYyLjE1NTUgMTguOTA5MSA2MS4zMjk3IDE4LjkwOTFINTguODk1NlYyNy44Mzg2SDU1Ljg1M1YxNi4zOTQ5SDU1Ljg5NjVaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03NC45MzQyIDI1LjM2NzhINzguMTUwNlYyNy43OTUySDc0LjAyMTRDNzIuOTc4MiAyNy43OTUyIDcyLjEwODkgMjcuNjY1MiA3MS40NTcgMjcuNDkxOEM3MC44MDUgMjcuMjc1IDcwLjE5NjUgMjYuOTI4MyA2OS43MTgzIDI2LjQ1MTRDNjkuMTk2OCAyNS45MzEzIDY4Ljc2MjEgMjUuMjgxMSA2OC40NTc4IDI0LjU0NDJDNjguMTUzNiAyMy44MDcyIDY4LjAyMzIgMjIuOTgzNiA2OC4wMjMyIDIyLjE2QzY4LjAyMzIgMjEuMjkzMSA2OC4xNTM2IDIwLjQ2OTUgNjguNDU3OCAxOS42ODkyQzY4Ljc2MjEgMTguOTA5IDY5LjE1MzMgMTguMzAyMSA2OS43MTgzIDE3Ljc4MTlDNzAuMjM5OSAxNy4zMDUxIDcwLjgwNSAxNi45NTgzIDcxLjUwMDQgMTYuNzQxNkM3Mi4xOTU5IDE2LjUyNDkgNzMuMDIxNyAxNi40MzgyIDc0LjA2NDkgMTYuNDM4Mkg3OC4xOTQxVjE4LjkwOUg3NC45MzQyQzczLjQ5OTggMTguOTA5IDcyLjU0MzYgMTkuMTY5MSA3MS45Nzg1IDE5LjY0NTlDNzEuNDU2OSAyMC4xMjI3IDcxLjE1MjcgMjAuOTg5NyA3MS4xNTI3IDIyLjIwMzRDNzEuMTUyNyAyMi44OTY5IDcxLjI4MzEgMjMuNDYwNSA3MS41MDA0IDIzLjkzNzNDNzEuNzE3NyAyNC40MTQxIDcyLjA2NTUgMjQuNzYwOSA3Mi41MDAxIDI1LjA2NDNDNzIuNzE3NCAyNS4xOTQ0IDcyLjk3ODIgMjUuMjgxMSA3My4yODI1IDI1LjM2NzhDNzMuNjMwMiAyNS4zMjQ0IDc0LjE1MTggMjUuMzY3OCA3NC45MzQyIDI1LjM2NzhaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik04MC44NDU2IDE4LjY0ODlINzguNjcyNFYxNi4zNTE1SDgwLjg0NTZWMTUuMTgxMUM4MC44NDU2IDE0LjAxMDggODEuMDYzIDEzLjIzMDUgODEuNDk3NiAxMi44NDA0QzgxLjkzMjMgMTIuNDUwMyA4Mi43NTgxIDEyLjIzMzUgODMuOTc1MSAxMi4yMzM1SDg2Ljg0MzhWMTQuNDAwOUg4NS40MDk1Qzg0Ljg4NzkgMTQuNDAwOSA4NC41NDAyIDE0LjQ4NzYgODQuMzIyOSAxNC42NjFDODQuMTA1NSAxNC44MzQ0IDgzLjk3NTEgMTUuMDk0NSA4My45NzUxIDE1LjQ0MTJWMTYuMzUxNUg4Ni44NDM4VjE4LjY0ODlIODMuOTc1MVYyNy43OTUzSDgwLjg0NTZWMTguNjQ4OVoiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTk4LjQwNTYgMjcuNzk1M0g5Mi43MTE2QzkxLjAxNjUgMjcuNzk1MyA4OS44NDI5IDI3LjQ0ODUgODkuMDYwNSAyNi43OTgzQzg4LjMyMTYgMjYuMTQ4MSA4Ny45MzA0IDI1LjA2NDQgODcuOTMwNCAyMy41OTA2VjE2LjM5NDlIOTAuOTI5NVYyMy40MTcyQzkwLjkyOTUgMjQuMTk3NCA5MS4wNTk5IDI0LjY3NDMgOTEuMzIwNyAyNC45MzQ0QzkxLjU4MTUgMjUuMTk0NCA5Mi4xMDMxIDI1LjMyNDUgOTIuOTI4OSAyNS4zMjQ1SDk1LjM2M1YxNi4zOTQ5SDk4LjQwNTZWMjcuNzk1M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTEwMC42MjIgMjUuNDExMkgxMDcuMDExQzEwNy41NzcgMjUuNDExMiAxMDguMDExIDI1LjMyNDUgMTA4LjI3MiAyNS4xNTExQzEwOC41MzMgMjQuOTc3NyAxMDguNjYzIDI0LjY3NDMgMTA4LjY2MyAyNC4zMjc1QzEwOC42NjMgMjMuOTM3NCAxMDguNTMzIDIzLjY3NzMgMTA4LjI3MiAyMy40NjA1QzEwOC4wMTEgMjMuMjg3MSAxMDcuNTc3IDIzLjIwMDUgMTA3LjA1NSAyMy4yMDA1SDEwNC40NDdDMTAyLjg4MiAyMy4yMDA1IDEwMS44MzkgMjIuOTgzNyAxMDEuMzE4IDIyLjUwNjlDMTAwLjc1MiAyMi4wMzAxIDEwMC40OTIgMjEuMjA2NSAxMDAuNDkyIDE5Ljk5MjdDMTAwLjQ5MiAxOC43NzkgMTAwLjgzOSAxNy44Njg3IDEwMS40OTEgMTcuMjYxOEMxMDIuMTQzIDE2LjY5ODMgMTAzLjE4NyAxNi4zOTQ5IDEwNC41MzQgMTYuMzk0OUgxMTEuMDU0VjE4Ljc3OUgxMDUuNzA4QzEwNC44MzggMTguNzc5IDEwNC4yNzMgMTguODY1NyAxMDQuMDEyIDE4Ljk5NTdDMTAzLjc1MiAxOS4xNjkxIDEwMy42MjEgMTkuNDI5MiAxMDMuNjIxIDE5LjgxOTRDMTAzLjYyMSAyMC4xNjYxIDEwMy43NTIgMjAuNDI2MiAxMDMuOTY5IDIwLjU5OTZDMTA0LjE4NiAyMC43NzMgMTA0LjU3NyAyMC44NTk3IDEwNS4wNTYgMjAuODU5N0gxMDcuNzk0QzEwOS4wNTQgMjAuODU5NyAxMTAuMDExIDIxLjE2MzEgMTEwLjY2MyAyMS43MjY2QzExMS4zMTUgMjIuMjkwMiAxMTEuNjYyIDIzLjE1NzEgMTExLjY2MiAyNC4yNDA4QzExMS42NjIgMjUuMjgxMSAxMTEuMzU4IDI2LjE0ODEgMTEwLjc5MyAyNi43OTgzQzExMC4yMjggMjcuNDQ4NSAxMDkuNDQ2IDI3Ljc5NTMgMTA4LjUzMyAyNy43OTUzSDEwMC43MDlWMjUuNDExMkgxMDAuNjIyWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTE2LjU3NCAxNS4wOTQ0SDExMy40MDFWMTIuMjc2OUgxMTYuNTc0VjE1LjA5NDRaTTExNi41NzQgMjcuNzk1M0gxMTMuNDAxVjE2LjM5NDlIMTE2LjU3NFYyNy43OTUzWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTMwLjMwOSAyMi4xMTY3QzEzMC4zMDkgMjMuODkzOSAxMjkuNzQ0IDI1LjMyNDQgMTI4LjY1NyAyNi40MDgxQzEyNy41NzEgMjcuNDkxOCAxMjYuMDkzIDI4LjAxMiAxMjQuMjI0IDI4LjAxMkMxMjIuMzU1IDI4LjAxMiAxMjAuODc3IDI3LjQ5MTggMTE5Ljc5IDI2LjQwODFDMTE4LjcwNCAyNS4zMjQ0IDExOC4xMzkgMjMuODkzOSAxMTguMTM5IDIyLjExNjdDMTE4LjEzOSAyMC4zMzk0IDExOC43MDQgMTguOTA5IDExOS43OSAxNy44MjUzQzEyMC44NzcgMTYuNzQxNiAxMjIuMzk4IDE2LjIyMTQgMTI0LjIyNCAxNi4yMjE0QzEyNi4wNDkgMTYuMjIxNCAxMjcuNTI3IDE2Ljc0MTYgMTI4LjY1NyAxNy44MjUzQzEyOS43NDQgMTguODY1NiAxMzAuMzA5IDIwLjI5NjEgMTMwLjMwOSAyMi4xMTY3Wk0xMjEuMjY4IDIyLjExNjdDMTIxLjI2OCAyMy4yMDA0IDEyMS41MjkgMjQuMDY3MyAxMjIuMDUxIDI0LjY3NDJDMTIyLjU3MiAyNS4yODExIDEyMy4yNjggMjUuNTg0NSAxMjQuMTggMjUuNTg0NUMxMjUuMDkzIDI1LjU4NDUgMTI1Ljc4OSAyNS4yODExIDEyNi4zMSAyNC42NzQyQzEyNi44MzIgMjQuMDY3MyAxMjcuMDkzIDIzLjIwMDQgMTI3LjA5MyAyMi4xMTY3QzEyNy4wOTMgMjEuMDMzIDEyNi44MzIgMjAuMTY2MSAxMjYuMzEgMTkuNjAyNUMxMjUuNzg5IDE4Ljk5NTcgMTI1LjA5MyAxOC42OTIyIDEyNC4xMzcgMTguNjkyMkMxMjMuMjI0IDE4LjY5MjIgMTIyLjUyOSAxOC45OTU3IDEyMi4wMDcgMTkuNjAyNUMxMjEuNTI5IDIwLjE2NjEgMTIxLjI2OCAyMS4wMzMgMTIxLjI2OCAyMi4xMTY3WiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTMxLjc4NyAxNi4zOTQ5SDEzNy40ODFDMTM5LjIxOSAxNi4zOTQ5IDE0MC40MzYgMTYuNjk4MyAxNDEuMTc1IDE3LjM0ODVDMTQxLjkxNCAxNy45OTg4IDE0Mi4yNjIgMTkuMDgyNCAxNDIuMjYyIDIwLjU1NjNWMjcuNzk1M0gxMzkuMjE5VjIwLjk0NjRDMTM5LjIxOSAyMC4wNzk0IDEzOS4wODkgMTkuNTE1OSAxMzguODI4IDE5LjI5OTJDMTM4LjU2NyAxOS4wMzkxIDEzOC4wNDYgMTguOTA5MSAxMzcuMjIgMTguOTA5MUgxMzQuNzg2VjI3LjgzODZIMTMxLjc0M1YxNi4zOTQ5SDEzMS43ODdaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03LjEyODMxIDMuNzM3NDNIMFYxMC44NDY0SDcuMTI4MzFWMy43Mzc0M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTIzLjI1MTMgLTIuMTU3MjVlLTA1TDE4LjU1MTMgNS41MTY4NUwyNC4wODMxIDEwLjIwNDFMMjguNzgzMSA0LjY4NzI1TDIzLjI1MTMgLTIuMTU3MjVlLTA1WiIgZmlsbD0iI0ZGODYwMCIvPgo8cGF0aCBkPSJNMTUuNjA0MSAzLjczNzQzSDguNDc1ODNWMTAuODQ2NEgxNS42MDQxVjMuNzM3NDNaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03LjEyODMxIDEyLjE5MDJIMFYxOS4yOTkySDcuMTI4MzFWMTIuMTkwMloiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTE1LjYwNDEgMTIuMTkwMkg4LjQ3NTgzVjE5LjI5OTJIMTUuNjA0MVYxMi4xOTAyWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMjQuMDc5NyAxMi4xOTAySDE2Ljk1MTRWMTkuMjk5MkgyNC4wNzk3VjEyLjE5MDJaIiBmaWxsPSIjRkY4NjAwIi8+CjxwYXRoIGQ9Ik03LjEyODMxIDIwLjY4NjNIMFYyNy43OTUzSDcuMTI4MzFWMjAuNjg2M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTE1LjYwNDEgMjAuNjg2M0g4LjQ3NTgzVjI3Ljc5NTNIMTUuNjA0MVYyMC42ODYzWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMjQuMTIzMiAyMC42ODYzSDE2Ljk5NDlWMjcuNzk1M0gyNC4xMjMyVjIwLjY4NjNaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik0xNDYgMTUuODMxM0MxNDYgMTYuODcxNyAxNDUuMTc0IDE3LjY5NTMgMTQ0LjEzMSAxNy42OTUzQzE0My4wODggMTcuNjk1MyAxNDIuMjYyIDE2Ljg3MTcgMTQyLjI2MiAxNS44MzEzQzE0Mi4yNjIgMTQuNzkxIDE0My4wODggMTQuMDEwNyAxNDQuMTMxIDE0LjAxMDdDMTQ1LjEzMSAxMy45Njc0IDE0NiAxNC43OTEgMTQ2IDE1LjgzMTNaTTE0Mi45NTcgMTQuNzkxQzE0Mi42OTcgMTUuMDUxMSAxNDIuNTY2IDE1LjQ0MTIgMTQyLjU2NiAxNS44MzEzQzE0Mi41NjYgMTYuNjk4MyAxNDMuMjYyIDE3LjM5MTggMTQ0LjEzMSAxNy4zOTE4QzE0NSAxNy4zOTE4IDE0NS42OTYgMTYuNjk4MyAxNDUuNjk2IDE1LjgzMTNDMTQ1LjY5NiAxNS4wMDc3IDE0NSAxNC4yNzA4IDE0NC4xNzQgMTQuMjcwOEMxNDMuNjUzIDE0LjI3MDggMTQzLjI2MiAxNC40NDQyIDE0Mi45NTcgMTQuNzkxWk0xNDQuODcgMTYuOTE1SDE0NC40NzlMMTQzLjkxNCAxNi4wOTE0VjE2LjkxNUgxNDMuNjA5VjE0Ljc0NzZIMTQzLjk1N0MxNDQuNDM1IDE0Ljc0NzYgMTQ0LjY1MyAxNC45NjQ0IDE0NC42NTMgMTUuMzU0NUMxNDQuNjUzIDE1LjY1NzkgMTQ0LjQ3OSAxNS44NzQ3IDE0NC4xNzQgMTUuOTYxNEwxNDQuODcgMTYuOTE1Wk0xNDQuMDQ0IDE1LjY1NzlDMTQ0LjI2MSAxNS42NTc5IDE0NC4zOTIgMTUuNTI3OSAxNDQuMzkyIDE1LjM1NDVDMTQ0LjM5MiAxNS4xMzc4IDE0NC4yNjEgMTUuMDUxMSAxNDQuMDAxIDE1LjA1MTFIMTQzLjkxNFYxNS42NTc5SDE0NC4wNDRaIiBmaWxsPSIjMzU0M0E4Ii8+Cjwvc3ZnPgo=\\\" style=\\\"\\n text-align: left;\\n width: 146px;\\n position: absolute;\\n top: 14px;\\n left: 31px;\\n\\\">\\n </div>\\n <div style=\\\"\\n position: relative;\\n top: 80px;\\n left: 32px;\\n font-size: 20px;\\n text-align: left;\\n font-weight: 700;\\n letter-spacing: 0.02em;\\n font-style: normal;\\n line-height: 125%;\\n \\\">Claim your FREE account and get a key in less than a minute</div>\\n <ul style=\\\"\\n font-size: 15px;\\n font-weight: 400;\\n color: #333333;\\n letter-spacing: 0.01em;\\n position: relative;\\n left: 32px;\\n top: 88px;\\n line-height: 180%;\\n \\\">\\n <li><span>Access to a 30-day free trial of any of our products.</span></li>\\n <li><span>Access to 24x5 support by developers via the <a href=\\\"https://support.syncfusion.com/create\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">support tickets</a>, <a href=\\\"https://www.syncfusion.com/forums\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">forum</a>, <a href=\\\"https://www.syncfusion.com/feedback\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">feature & feedback page</a> and chat.</span></li>\\n <li><span>200+ <a href=\\\"https://www.syncfusion.com/succinctly-free-ebooks\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">ebooks </a>on the latest technologies, industry trends, and research topics.</span>\\n </li>\\n <li><span>Largest collection of over 7,000 flat and wireframe icons for free with Syncfusion <a href=\\\"https://www.syncfusion.com/succinctly-free-ebooks\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">Metro Studio.</a></span></li>\\n <li><span>Free and unlimited access to Syncfusion technical <a href=\\\"https://www.syncfusion.com/blogs/\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">blogs</a> and <a href=\\\"https://www.syncfusion.com/resources/techportal/whitepapers\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">whitepapers.</a></span></li>\\n </ul>\\n <div style=\\\"\\n font-size: 18px;\\n font-weight: 700;\\n position: relative;\\n line-height: 125%;\\n letter-spacing: 0.02em;\\n top: 90px;\\n left: 32px;\\n \\\">Syncfusion is trusted by 29,000+ businesses worldwide</div>\\n <img src=\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODIwIiBoZWlnaHQ9IjU2IiB2aWV3Qm94PSIwIDAgODIwIDU2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MjcuNjE3IDIyLjU2NTlWMjQuNzIyNkM0MjYuNTU4IDI0LjM2MzggNDI1LjM5OCAyNC4xNTQ0IDQyNC40NzQgMjQuMTU0NEM0MjMuMzMzIDI0LjE1NDQgNDIyLjY5OCAyNC40OTEyIDQyMi42OTggMjUuMDk2M0M0MjIuNjk4IDI1LjQ4MjQgNDIyLjk3NiAyNS43MzgzIDQyMy43NzMgMjYuMDg1NEw0MjUuOTE3IDI3LjAxNzRDNDI3LjYzMyAyNy43NjM5IDQyOC40OTcgMjguODUzIDQyOC40OTcgMzAuMjY4MUM0MjguNDk3IDMyLjQ1MjIgNDI2LjU0NiAzMy44MyA0MjMuNDUyIDMzLjgzQzQyMi4zMjQgMzMuODMgNDIxLjAxOCAzMy42NzM2IDQxOS42MzYgMzMuMzcwOVYzMS4xNDE2QzQyMS4wMDYgMzEuNTAyOCA0MjIuMjYyIDMxLjY5NTcgNDIzLjIzOSAzMS42OTU3QzQyNC41MTggMzEuNjk1NyA0MjUuMjAzIDMxLjM1MDYgNDI1LjIwMyAzMC43MDc0QzQyNS4yMDMgMzAuMzIwOCA0MjQuOTM1IDMwLjAzNjcgNDI0LjMyMiAyOS43NzE3TDQyMS45NzUgMjguNzU5M0M0MjAuMjM2IDI4LjAwNzggNDE5LjQzMyAyNi45OTU0IDQxOS40MzMgMjUuNTUyMUM0MTkuNDMzIDIzLjQ4MzcgNDIxLjMxNCAyMi4xNjQ5IDQyNC4yNjUgMjIuMTY0OUM0MjUuMjk4IDIyLjE2NDkgNDI2LjU3IDIyLjMxNzEgNDI3LjYxNyAyMi41NjU5VjIyLjU2NTlaTTQzMC4xNjcgMjIuMzkwOUg0MzMuNjM1VjMzLjYwMzlINDMwLjE2N1YyMi4zOTA5Wk00NDQuOTExIDIyLjM5MDlWMjQuNDQ1MUg0MzkuNjc1VjI2Ljk3NDJINDQ0LjI0OVYyOC44MzIzSDQzOS42NzVWMzEuNDU0M0g0NDQuOTc4VjMzLjYwMzlINDM2LjMwNVYyMi4zOTA5SDQ0NC45MTFaTTQ2MS4yOTQgMjIuMzkwOVYzMy42MDM5SDQ1Ny45MzlWMjYuMjIzNkw0NTQuNjUyIDMzLjY5MTVINDUyLjUzMUw0NDkuMjY2IDI2LjIyMzZWMzMuNjAzOUg0NDYuOTQ5VjIyLjM5MDlINDUxLjE4NEw0NTQuMTc4IDI5LjIxMTRMNDU3LjE1NiAyMi4zOTA5SDQ2MS4yOTRWMjIuMzkwOVpNNDcyLjU3OSAyMi4zOTA5VjI0LjQ0NTFINDY3LjMzNVYyNi45NzQySDQ3MS45MDhWMjguODMyM0g0NjcuMzM1VjMxLjQ1NDNINDcyLjYzOFYzMy42MDM5SDQ2My45NTdWMjIuMzkwOUg0NzIuNTc5Wk00ODQuNzk0IDIyLjM5MDlWMzMuNjAzOUg0ODEuMDkzTDQ3Ni45MjYgMjYuNDEyM1YzMy42MDM5SDQ3NC42MDhWMjIuMzkwOUg0NzguNDA3TDQ4Mi40ODQgMjkuNDg3NlYyMi4zOTA5SDQ4NC43OTRaTTQ5NC44NTggMjIuNTY1OVYyNC43MjI2QzQ5My44MDcgMjQuMzY2MyA0OTIuNjQgMjQuMTU0NCA0OTEuNzMyIDI0LjE1NDRDNDkwLjU3MyAyNC4xNTQ0IDQ4OS45MzkgMjQuNDg1OCA0ODkuOTM5IDI1LjA5M0M0ODkuOTM5IDI1LjQ4ODYgNDkwLjE5OCAyNS43MjUgNDkxLjAyMyAyNi4wODU5TDQ5My4xNTcgMjcuMDE3OEM0OTQuODg1IDI3Ljc3MjIgNDk1LjczOSAyOC44NTE4IDQ5NS43MzkgMzAuMjgzNUM0OTUuNzM5IDMyLjQ1NTkgNDkzLjc4NiAzMy44MzA4IDQ5MC42OTkgMzMuODMwOEM0ODkuNTY5IDMzLjgzMDggNDg4LjI1OSAzMy42NzM2IDQ4Ni44NzggMzMuMzcxN1YzMS4xNDI0QzQ4OC4yNDcgMzEuNTAyOCA0ODkuNDk5IDMxLjY5NjUgNDkwLjQ3IDMxLjY5NjVDNDkxLjc0IDMxLjY5NjUgNDkyLjQ0NCAzMS4zNTE1IDQ5Mi40NDQgMzAuNzI4NUM0OTIuNDQ0IDMwLjMxNjMgNDkyLjE5NyAzMC4wNTA0IDQ5MS41NTUgMjkuNzcyNUw0ODkuMjE4IDI4Ljc2MDFDNDg3LjQ2NyAyOC4wMDI4IDQ4Ni42NzQgMjcuMDAyIDQ4Ni42NzQgMjUuNTUzM0M0ODYuNjc0IDIzLjQ4NjIgNDg4LjU1NiAyMi4xNjY1IDQ5MS41IDIyLjE2NjVDNDkyLjUzNiAyMi4xNjUzIDQ5My44MTMgMjIuMzE3MSA0OTQuODU4IDIyLjU2NTlWMjIuNTY1OVoiIGZpbGw9IiMwMEEwQjAiLz4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzUyLjQxMyAyNi44MTlDMzUwLjk5MiAyNS4yNzU5IDM0OS42MzggMjMuODMxNSAzNDguMzQ5IDIyLjE1NzRMMzQ3LjkyIDIxLjU5OTVDMzQ5LjQwNiAyMS4zNjkzIDM1MC42OTUgMjAuMzg0OCAzNTAuNjk1IDE4Ljc0MzNDMzUwLjY5NSAxNy4yMzMxIDM0OS41MzkgMTYuMjQ4MiAzNDcuODIxIDE2LjI0ODJDMzQ2LjU5OCAxNi4yNDgyIDM0NS43MDYgMTYuMzEzNyAzNDUuMjQzIDE2LjMxMzdDMzQ0LjcxNSAxNi4zMTM3IDM0NC4yODUgMTYuMzEzNyAzNDMuNzkgMTYuMjgwOEMzNDMuODU2IDE4LjE1MjEgMzQzLjg4OSAxOC4yODM0IDM0My44ODkgMTkuNDMyMlYyMy42MzQzQzM0My44ODkgMjQuNDU1MyAzNDMuODU2IDI1LjI3NTkgMzQzLjc5IDI2LjgxODZDMzQ0LjE1MyAyNi43MjAyIDM0NC41MTcgMjYuNzIwMiAzNDQuNzgxIDI2LjcyMDJDMzQ1LjA0NSAyNi43MjAyIDM0NS40MDkgMjYuNzUzMSAzNDUuNzA2IDI2LjgxODZDMzQ1LjY0IDI1Ljc2NzkgMzQ1LjYwNyAyNC4wMjgzIDM0NS42MDcgMjMuNjM0M1YyMS4yMDUxQzM0Ny4xNiAyMy4yMDc3IDM0OS4yMDkgMjUuNjY5NSAzNTAuMDAxIDI2LjgxODZDMzUwLjM5OCAyNi43MjAyIDM1MC43MjggMjYuNzIwMiAzNTEuMTI0IDI2LjcyMDJDMzUxLjQ1NSAyNi43MjA2IDM1MS45MTggMjYuNzIwNiAzNTIuNDEzIDI2LjgxOVYyNi44MTlaTTM0OC44NzggMTkuMDA2QzM0OC44NzggMjAuMDIzNCAzNDguMzE3IDIxLjIwNTQgMzQ2Ljc5NyAyMS4yMDU0QzM0Ni40IDIxLjIwNTQgMzQ2LjAwMyAyMS4yMDU0IDM0NS42MDcgMjEuMTcyNVYxNy4wNjg4QzM0Ni4wMDMgMTYuOTcwNCAzNDYuNDk5IDE2LjkwNDYgMzQ2Ljc2MyAxNi45MDQ2QzM0OC4wODUgMTYuOTA0OSAzNDguODc4IDE3LjY2IDM0OC44NzggMTkuMDA2VjE5LjAwNlpNMzgyLjM4IDI2Ljg4NDVDMzgxLjgxOSAyNi4yOTM2IDM4MC45NiAyNS4zNDE3IDM4MC4xMzQgMjQuNDIyM0MzODAuODI4IDIzLjY2NzIgMzgxLjU1NSAyMi41NTEgMzgxLjk4NCAyMS41OTkxQzM4MS43MTkgMjEuNDY3OCAzODEuMzU2IDIxLjIwNTEgMzgxLjA5MiAyMC45NzUzQzM4MC45OTMgMjEuNzk1OSAzODAuNDMyIDIyLjg3OTIgMzc5LjYzOSAyMy44MzE1QzM3OC41MTUgMjIuNTE4NSAzNzguMjE4IDIyLjE1NzQgMzc3LjE5MyAyMC43Nzg1QzM3OC41ODEgMTkuODkyMSAzNzkuMjQyIDE4Ljg3NDMgMzc5LjI0MiAxOC4wNTM3QzM3OS4yNDIgMTcuMTAxNyAzNzguNTgxIDE2LjExNjkgMzc2Ljk2MiAxNi4xMTY5QzM3NS4yMTEgMTYuMTE2OSAzNzQuMzUyIDE3LjIwMDIgMzc0LjM1MiAxOC40ODAzQzM3NC4zNTIgMTkuMjM1NCAzNzQuNTUgMTkuODkxNyAzNzUuMzc2IDIwLjk3NTNDMzc0LjA1NCAyMS42OTc1IDM3Mi43NjYgMjIuNzQ3OSAzNzIuNzY2IDI0LjQyMjNDMzcyLjc2NiAyNi4wNjM5IDM3NC4wODcgMjYuOTE3NCAzNzUuNzA3IDI2LjkxNzRDMzc3LjE5MyAyNi45MTc0IDM3OC4xNTEgMjYuMzI2NiAzNzguOTEyIDI1LjYzNjlMMzc5LjkwMiAyNi44MTlDMzgwLjIgMjYuNzg2MSAzODAuNTMxIDI2LjcyMDYgMzgwLjg2MSAyNi43MjA2QzM4MS4zMjQgMjYuNzIwNiAzODEuODUyIDI2Ljc4NjEgMzgyLjM4IDI2Ljg4NDVWMjYuODg0NVpNMzgzLjM3MiA0MC4wMTU4QzM4MS45MTggMzguNDczIDM4MC41OTcgMzcuMDYxMiAzNzkuMzA4IDM1LjM4NzFMMzc4Ljg3OCAzNC44Mjg4QzM4MC4zMzIgMzQuNTk5MSAzODEuNjU0IDMzLjYxNSAzODEuNjU0IDMxLjk0MDFDMzgxLjY1NCAzMC40NjMyIDM4MC40OTggMjkuNDQ1NCAzNzguNzc5IDI5LjQ0NTRDMzc3LjU1NyAyOS40NDU0IDM3Ni42MzIgMjkuNTQzNSAzNzYuMTY5IDI5LjU0MzVDMzc1LjY3MyAyOS41NDM1IDM3NS4yNDQgMjkuNTQzNSAzNzQuNzQ4IDI5LjQ3NzZDMzc0LjgxNCAzMS4zODIyIDM3NC44NDggMzEuNDgwMiAzNzQuODQ4IDMyLjYyOTRWMzYuODMxMUMzNzQuODQ4IDM3LjY1MjQgMzc0LjgxNCAzOC41MDUyIDM3NC43NDggNDAuMDE1NEMzNzUuMTEyIDM5Ljk0OTYgMzc1LjQ3NSAzOS45NDk2IDM3NS43MDcgMzkuOTQ5NkMzNzYuMDA0IDM5Ljk0OTYgMzc2LjM2OCAzOS45NDk2IDM3Ni42MzIgNDAuMDE1NEMzNzYuNTY1IDM4Ljk5OCAzNzYuNTMzIDM3LjI1ODEgMzc2LjUzMyAzNi44MzExVjM0LjQzNDhDMzc4LjExOSAzNi40MDQyIDM4MC4xNjcgMzguODk5NiAzODAuOTYgNDAuMDE1NEMzODEuMzU2IDM5Ljk0OTYgMzgxLjY4NyAzOS45NDk2IDM4Mi4wODMgMzkuOTQ5NkMzODIuMzggMzkuOTUgMzgyLjg3NiAzOS45NSAzODMuMzcyIDQwLjAxNThaTTM2Mi4xNiAyNi44MTlDMzYwLjk3MSAyNS41NzE1IDM1OC44ODkgMjIuOTc4IDM1OC4wNjMgMjEuOTkzNUwzNTcuMjM3IDIwLjk3NTdDMzU4LjA5NiAxOS45NTgzIDM1OC42OSAxOS4zMzQxIDM1OS4zMTkgMTguNTc5QzM2MC4wNDUgMTcuNzkxIDM2MC43MDYgMTYuOTcwNCAzNjEuNDk5IDE2LjI0ODJDMzYxLjEzNiAxNi4zMTM3IDM2MC45MzcgMTYuMzEzNyAzNjAuNzM5IDE2LjMxMzdDMzYwLjU0MSAxNi4zMTM3IDM2MC4zNDMgMTYuMzEzNyAzNjAuMTQ0IDE2LjI0ODJDMzU5LjkxMyAxNi42MDkzIDM1OS41NSAxNy4wNjg4IDM1OS4xNTMgMTcuNTI4N0MzNTguNzU2IDE3Ljk1NTYgMzU4LjM2IDE4LjM4MjIgMzU4LjA2MyAxOC43NDMzQzM1Ny4yMzYgMTkuNjk1MiAzNTYuNzc0IDIwLjE1NDcgMzU1LjU4NSAyMS4yNzA5VjE5LjQ2NTVDMzU1LjU4NSAxOC40MTUxIDM1NS41ODUgMTcuNzI1NSAzNTUuNjUxIDE2LjI0ODJDMzU1LjMyMSAxNi4zMTM3IDM1NC45NTcgMTYuMzEzNyAzNTQuNzI2IDE2LjMxMzdDMzU0LjQ2MSAxNi4zMTM3IDM1NC4wMzIgMTYuMzEzNyAzNTMuNzY4IDE2LjI0ODJDMzUzLjgzMyAxNy44MjM5IDM1My44NjcgMTguMjgzNCAzNTMuODY3IDE5LjQzMjVWMjMuNjM0N0MzNTMuODY3IDI0LjY4NSAzNTMuODMzIDI1LjMwODggMzUzLjc2OCAyNi44MTlDMzU0LjE2NCAyNi43MjA2IDM1NC40OTUgMjYuNzIwNiAzNTQuNzI2IDI2LjcyMDZDMzU0Ljk1NyAyNi43MjA2IDM1NS4zNTMgMjYuNzUzNSAzNTUuNjUxIDI2LjgxOUMzNTUuNTg1IDI1LjE0NDkgMzU1LjU4NSAyNC4xNTk3IDM1NS41ODUgMjMuNjM0N1YyMS40MzUyQzM1Ni44MDcgMjIuODc5NiAzNTguNjkgMjUuMjQzMyAzNTkuNzQ4IDI2LjgxOUMzNjAuMTMgMjYuNzU2MyAzNjAuNTE3IDI2LjcyMzQgMzYwLjkwNSAyNi43MjA2QzM2MS4yMDIgMjYuNzIwNiAzNjEuNjY1IDI2LjcyMDYgMzYyLjE2IDI2LjgxOVYyNi44MTlaTTM3Mi42MDEgNDAuMDE1OEMzNzIuNTY4IDM5Ljg1MTkgMzcyLjUzNSAzOS43MjA2IDM3Mi41MzUgMzkuNTIzNEMzNzIuNTM1IDM5LjM5MjggMzcyLjU2OCAzOS4yMjgxIDM3Mi42MDEgMzkuMDk2NEMzNzEuMjggMzkuMTI5NyAzNjguOTAxIDM5LjE5NTIgMzY4LjM3MiAzOS4xOTUyVjM0LjY2NDlDMzY5LjY5NCAzNC42NjQ5IDM3MC45ODIgMzQuNjY0OSAzNzIuMjcgMzQuNzk2M0MzNzIuMjM4IDM0LjYzMjQgMzcyLjIwNCAzNC40Njc3IDM3Mi4yMDQgMzQuMzM2NEMzNzIuMjA0IDM0LjIwNTggMzcyLjIwNCAzNC4wNDE5IDM3Mi4yNyAzMy44NDQ3QzM3MS4zNDYgMzMuOTQyOCAzNjkuMTk4IDMzLjk3NiAzNjguMzcyIDMzLjk3NlYzMC4yNjZDMzY5LjgyNiAzMC4yNjYgMzcwLjY4NSAzMC4yNjYgMzcxLjE4IDMwLjI5OTNMMzcyLjUwMiAzMC4zNjUxQzM3Mi40MzYgMzAuMTY3OSAzNzIuNDM2IDMwLjA2OTIgMzcyLjQzNiAyOS45MDUzQzM3Mi40MzYgMjkuNzQxNCAzNzIuNDM2IDI5LjcwODEgMzcyLjUwMiAyOS40NDU4QzM3MS40MTEgMjkuNDc4MyAzNjkuOTI1IDI5LjU0MzggMzY5LjI2NCAyOS41NDM4QzM2OC44MDIgMjkuNTQzOCAzNjcuMzQ4IDI5LjUxMTMgMzY2LjU4NyAyOS40NDU4QzM2Ni42NTQgMzAuMjY2NCAzNjYuNjg2IDMxLjYxMjMgMzY2LjY4NiAzMi41NjQyVjM2Ljg2NTFDMzY2LjY4NiAzNy40ODg1IDM2Ni42MiAzOC43MzU3IDM2Ni41ODcgNDAuMDE2MkMzNjcuNTEzIDM5Ljk1MDMgMzY4LjgwMiAzOS45NTAzIDM2OS4yNjQgMzkuOTUwM0MzNzAuMDI0IDM5Ljk1IDM3MS42NDMgMzkuOTUgMzcyLjYwMSA0MC4wMTU4Wk0zNjQuNjA1IDM5LjEyOTRDMzY0LjQ0IDM4LjgwMDggMzY0LjM0MSAzOC4zMDg4IDM2NC4yNzUgMzguMDQ2MUMzNjIuOTIgMzkuMTYxOSAzNjEuOTk1IDM5LjM5MjQgMzYwLjkzOCAzOS4zOTI0QzM1OC41OTIgMzkuMzkyNCAzNTcuMzM3IDM3LjI5MTMgMzU3LjMzNyAzNC42NjQ5QzM1Ny4zMzcgMzEuNzQzNiAzNTguNzU3IDMwLjAzNjIgMzYxLjE2OSAzMC4wMzYyQzM2Mi40MjUgMzAuMDM2MiAzNjMuNjE0IDMwLjU5NDUgMzY0LjE3NiAzMS4xNTI4QzM2NC4yMDggMzAuODg5OCAzNjQuMzA4IDMwLjM2NDggMzY0LjQ3MyAzMC4wNjg4QzM2My4zMTYgMjkuNTExMyAzNjIuMjU5IDI5LjM0NjYgMzYxLjEwMiAyOS4zNDY2QzM1Ny4yMzcgMjkuMzQ2NiAzNTUuNDUzIDMxLjc0MzYgMzU1LjQ1MyAzNC44Mjg4QzM1NS40NTMgMzguMzA5MSAzNTcuNzk4IDQwLjE0NzEgMzYwLjczOSA0MC4xNDcxQzM2Mi40MjUgNDAuMTQ3MSAzNjMuODEyIDM5LjYyMjIgMzY0LjYwNSAzOS4xMjk0VjM5LjEyOTRaTTM0Mi4zMDMgMjYuODE5QzM0MC41MTkgMjMuNDA0OSAzMzguOCAxOS4xMzczIDMzNy41NzggMTYuMTE2OUgzMzcuMzhDMzM2LjU4NyAxOC4wMjA3IDMzNS4xMzMgMjEuMjcwOSAzMzQuNzM3IDIyLjE4OTlDMzM0LjI3NCAyMy4zMDYxIDMzMy4yNSAyNS41MDU2IDMzMi41ODkgMjYuODE4NkMzMzIuODAzIDI2Ljc1MzggMzMzLjAyNiAyNi43MjA2IDMzMy4yNSAyNi43MjAyQzMzMy40NDggMjYuNzIwMiAzMzMuNjEzIDI2Ljc1MzEgMzMzLjg0NSAyNi44MTg2QzMzNC4xNzUgMjUuOTMyMiAzMzQuNjM4IDI0LjgxNiAzMzUuMTMzIDIzLjYzNDNDMzM1Ljc5NCAyMy42MDE0IDMzNi4zODkgMjMuNTY4OCAzMzYuOTg0IDIzLjU2ODhDMzM3LjYxMiAyMy41Njg4IDMzOC4yNzIgMjMuNjAxNCAzMzguOTMzIDIzLjYzNDNMMzM5LjU5NCAyNS4yMUwzNDAuMjU1IDI2LjgxODZDMzQwLjcxNyAyNi43MjAyIDM0MS4wOCAyNi43MjAyIDM0MS4zMTIgMjYuNzIwMkMzNDEuNjA5IDI2LjcyMDYgMzQxLjg3MyAyNi43MjA2IDM0Mi4zMDMgMjYuODE5VjI2LjgxOVpNMzUzLjYzNiAyOS40NDU0QzM1My40MzggMjkuNTExMyAzNTMuMjczIDI5LjU0MzUgMzUzLjEwNyAyOS41NDM1QzM1Mi45MDkgMjkuNTQzNSAzNTIuNzQ0IDI5LjUxMDkgMzUyLjU0NiAyOS40NDU0QzM1Mi42NDQgMzAuNzU4NCAzNTIuNjc4IDMyLjA3MTQgMzUyLjY3OCAzMy4zNTE5VjM2LjczMzRDMzUyLjE0OSAzNi4yNzM2IDM1MC44NiAzNS4wOTE5IDM0OS4zNzQgMzMuNzEzQzM0Ny44NiAzMi4zMDc0IDM0Ni4zOTQgMzAuODUxMSAzNDQuOTc5IDI5LjM0NjZIMzQ0Ljc0OEMzNDQuNzgxIDMwLjgyNDMgMzQ0LjgxNCAzMi40IDM0NC44MTQgMzMuODExNFYzNS44Nzk5QzM0NC44MTQgMzcuNjUyOCAzNDQuODE0IDM4LjYwNDcgMzQ0LjcxNSA0MC4wMTYyQzM0NC45OCAzOS45NTAzIDM0NS4xMTIgMzkuOTUwMyAzNDUuMzEgMzkuOTUwM0MzNDUuNDQyIDM5Ljk1MDMgMzQ1LjU3NSAzOS45NTAzIDM0NS44MDYgNDAuMDE2MkMzNDUuNzQgMzguNjcwNiAzNDUuNzA3IDM2LjQ3MDggMzQ1LjcwNyAzNS44Nzk5VjMyLjU5NjhDMzQ4LjE4NSAzNC44NjI1IDM1MS4yMjQgMzcuODgyNiAzNTMuNDcxIDQwLjE0NzVIMzUzLjYwM0MzNTMuNjAzIDM4LjkzMjkgMzUzLjUzNyAzNy43MTc5IDM1My41MzcgMzYuNTA0VjM0LjYzMjdDMzUzLjUzNiAzMi40MzI1IDM1My41MzYgMzEuMzQ5MyAzNTMuNjM2IDI5LjQ0NTRaTTM0Mi41NjcgNDAuMDE1OEMzNDIuNTM0IDM5Ljg1MTkgMzQyLjUwMSAzOS43MjA2IDM0Mi41MDEgMzkuNTIzNEMzNDIuNTAxIDM5LjM5MjggMzQyLjUzNCAzOS4yMjgxIDM0Mi41NjcgMzkuMDk2NEMzNDEuMjQ2IDM5LjEyOTcgMzM4Ljg2NyAzOS4xOTUyIDMzOC4zNzEgMzkuMTk1MlYzNC42NjQ5QzMzOS42NiAzNC42NjQ5IDM0MC45NDggMzQuNjY0OSAzNDIuMjM3IDM0Ljc5NjNDMzQyLjIwNCAzNC42MzI0IDM0Mi4xNzEgMzQuNDY3NyAzNDIuMTcxIDM0LjMzNjRDMzQyLjE3MSAzNC4yMDU4IDM0Mi4xNzEgMzQuMDQxOSAzNDIuMjM3IDMzLjg0NDdDMzQxLjMxMiAzMy45NDI4IDMzOS4xOTcgMzMuOTc2IDMzOC4zNzEgMzMuOTc2VjMwLjI2NkMzMzkuNzkyIDMwLjI2NiAzNDAuNjUxIDMwLjI2NiAzNDEuMTc5IDMwLjI5OTNMMzQyLjQ2OCAzMC4zNjUxQzM0Mi40MzUgMzAuMTY3OSAzNDIuNDM1IDMwLjA2OTIgMzQyLjQzNSAyOS45MDUzQzM0Mi40MzUgMjkuNzQxNCAzNDIuNDM1IDI5LjY3NTUgMzQyLjQ2OCAyOS40NDU4QzM0MS4zNzggMjkuNDc4MyAzMzkuODkxIDI5LjU0MzggMzM5LjIzIDI5LjU0MzhDMzM4Ljc2NyAyOS41NDM4IDMzNy4zMTQgMjkuNTExMyAzMzYuNTU0IDI5LjQ0NThDMzM2LjYyIDMwLjI2NjQgMzM2LjY1MyAzMS42MTIzIDMzNi42NTMgMzIuNTY0MlYzNi44NjUxQzMzNi42NTMgMzcuNDg4NSAzMzYuNTg3IDM4LjczNTcgMzM2LjU1NCA0MC4wMTYyQzMzNy41MTIgMzkuOTUwMyAzMzguNzY3IDM5Ljk1MDMgMzM5LjIzIDM5Ljk1MDNDMzM5Ljk5IDM5Ljk1IDM0MS42NDIgMzkuOTUgMzQyLjU2NyA0MC4wMTU4VjQwLjAxNThaTTMzMS4yMDEgMjYuODE5QzMzMC42NzMgMjMuMjQwNiAzMzAuMjEgMTkuNDk4NCAzMjkuODQ3IDE2LjExNjlDMzI5Ljc0OCAxNi4xNDk4IDMyOS43MTQgMTYuMTQ5OCAzMjkuNjQ5IDE2LjExNjlDMzI4Ljk1NSAxNy4zMzE1IDMyOC4xNjIgMTguNjQ0NSAzMjcuNTY3IDE5LjU2MzlDMzI3LjAwNiAyMC40NTAzIDMyNi4zNDUgMjEuNTAwNyAzMjUuNTg1IDIyLjYxNjlDMzIzLjk5OSAyMC41ODE3IDMyMi4zNDcgMTguMDIxMSAzMjEuMjU2IDE2LjExNjlDMzIxLjE5IDE2LjE0OTggMzIxLjE1NyAxNi4xMTY5IDMyMS4wOTEgMTYuMTE2OUMzMjAuNzI4IDE5LjQ5OCAzMjAuMjMyIDIzLjI3MzIgMzE5LjczNiAyNi44MTlDMzIwLjAwMSAyNi43MjA2IDMyMC4xNjYgMjYuNzIwNiAzMjAuMjk4IDI2LjcyMDZDMzIwLjQ5NiAyNi43MjA2IDMyMC42MjggMjYuNzUzNSAzMjAuODU5IDI2LjgxOUMzMjAuOTkyIDI0LjQ1NTMgMzIxLjI1NiAyMi4xMjQ0IDMyMS41NTMgMTkuNjYyM0MzMjIuODQyIDIxLjUzMzYgMzIzLjk2NSAyMy4xNDIyIDMyNS4yMjEgMjQuODQ5M0MzMjYuMjc4IDIzLjIwNzcgMzI3LjM2OCAyMS40MzQ4IDMyOC41NTggMTkuNjI5NEMzMjguODg4IDIyLjE1NyAzMjkuMTg2IDI0LjQ1NTMgMzI5LjM1MSAyNi44MTlDMzI5Ljc4IDI2LjcyMDYgMzMwLjA3OCAyNi43MjA2IDMzMC4yNzYgMjYuNzIwNkMzMzAuNTQgMjYuNzIwNiAzMzAuODA1IDI2LjcyMDYgMzMxLjIwMSAyNi44MTlWMjYuODE5Wk0zMzQuOTY4IDMyLjIwMjhDMzM0Ljk2OCAzMC4yOTg5IDMzMy40NDggMjkuNDQ1NCAzMzEuNTk4IDI5LjQ0NTRDMzMwLjc3MiAyOS40NDU0IDMyOS44OCAyOS41NDM1IDMyOS4yNTIgMjkuNTQzNUMzMjkuMDIxIDI5LjU0MzUgMzI4LjUyNSAyOS41NDM1IDMyNy45OTcgMjkuNDc3NkMzMjguMDMgMzAuNTI4MyAzMjguMDk2IDMxLjQxNDggMzI4LjA5NiAzMi40MzIyVjM2LjkyOTVDMzI4LjA5NiAzNy45MTQ4IDMyOC4wMyAzOC45OTggMzI3Ljk5NyA0MC4wMTU0QzMyOC40MjYgMzkuOTQ5NiAzMjguNzI0IDM5Ljk0OTYgMzI4LjkyMiAzOS45NDk2QzMyOS4xNTMgMzkuOTQ5NiAzMjkuNDg0IDM5Ljk0OTYgMzI5Ljg4IDQwLjAxNTRDMzI5LjgxNSAzOS4wMzE5IDMyOS43ODIgMzguMDQ2NSAzMjkuNzgxIDM3LjA2MDlWMzUuNDJDMzMwLjE0NSAzNS40NTI2IDMzMC41MDggMzUuNDUyNiAzMzAuOTA1IDM1LjQ1MjZDMzMyLjgyIDM1LjQ1MjYgMzM0Ljk2OCAzNC43MzA0IDMzNC45NjggMzIuMjAyOFYzMi4yMDI4Wk0zMjYuMDE0IDM2Ljg5NzNDMzI2LjAxNCAzNS4yNTU4IDMyNC45MjQgMzQuNTMzNiAzMjMuMDQgMzMuNzQ1NkMzMjEuNjg2IDMzLjE4OCAzMjAuOTkyIDMyLjY5NTYgMzIwLjk5MiAzMS42NDQ1QzMyMC45OTIgMzAuNjYgMzIxLjc1MiAzMC4wMzYyIDMyMy4wMDggMzAuMDM2MkMzMjMuODM0IDMwLjAzNjIgMzI0LjU2MSAzMC4zMzE1IDMyNS4yMjIgMzAuODU2OEMzMjUuMjg3IDMwLjQ5NTcgMzI1LjQ1MyAzMC4xMzQ3IDMyNS42NTEgMjkuODM5NEMzMjQuODU4IDI5LjQ3ODMgMzIzLjk5OSAyOS4zNDcgMzIzLjA3NCAyOS4zNDdDMzIwLjM2NSAyOS4zNDcgMzE5LjUwNSAzMC44OTA1IDMxOS41MDUgMzIuMjAzNUMzMTkuNTA1IDMzLjgxMTggMzIwLjI5OSAzNC41NjcyIDMyMi4zNDcgMzUuMzU1M0MzMjMuNjM2IDM1Ljg0NyAzMjQuMjk2IDM2LjQ3MTEgMzI0LjI5NiAzNy41NTQ0QzMyNC4yOTYgMzguNzAzNSAzMjMuNDM3IDM5LjQyNTcgMzIyLjI0OCAzOS40MjU3QzMyMS41NTQgMzkuNDI1NyAzMjAuMzY1IDM5LjA2NDYgMzE5LjUzOSAzOC4zMDk5QzMxOS41MDUgMzguNzM2MSAzMTkuNTA1IDM5LjEzMDQgMzE5LjM3MyAzOS40OTE1QzMxOS45MDIgMzkuNzU0NiAzMjEuMTI1IDQwLjE0NzkgMzIyLjIxNSA0MC4xNDc5QzMyNC45OSA0MC4xNDcxIDMyNi4wMTQgMzguNDM5NyAzMjYuMDE0IDM2Ljg5NzNWMzYuODk3M1pNMzc4LjE1MiAxNy45ODgyQzM3OC4xNTIgMTguOTczIDM3Ny40NTggMTkuNjYyMyAzNzYuNzY0IDIwLjIyMDJDMzc2LjMwMSAxOS41NjM5IDM3NS43NCAxOC42NzcxIDM3NS43NCAxNy45ODgyQzM3NS43NCAxNy4yMzMxIDM3Ni4yNjggMTYuODA2MSAzNzYuOTk1IDE2LjgwNjFDMzc3Ljk4NyAxNi44MDY1IDM3OC4xNTIgMTcuNjkyNiAzNzguMTUyIDE3Ljk4ODJWMTcuOTg4MlpNMzc4LjQ4MiAyNS4wMTMyQzM3OC4xMTkgMjUuMzQxNyAzNzcuMjYgMjUuOTY1NSAzNzYuNTMzIDI1Ljk2NTVDMzc1LjU3NCAyNS45NjU1IDM3NC40MTggMjUuMjc1OSAzNzQuNDE4IDIzLjc5ODZDMzc0LjQxOCAyMi40ODU1IDM3NS4yNzcgMjEuODk0NyAzNzUuODA2IDIxLjU2NjVDMzc3LjAyOCAyMy4yNDA2IDM3Ny4wOTUgMjMuMzM5MSAzNzguNDgyIDI1LjAxMzJaTTM3OS44MDQgMzIuMjAyOEMzNzkuODA0IDMzLjI1MzUgMzc5LjI3NSAzNC40MDI2IDM3Ny43NTUgMzQuNDAyNkMzNzcuMzI2IDM0LjQwMjYgMzc2LjkyOSAzNC40MDI2IDM3Ni41MzMgMzQuMzY5M1YzMC4yNjU2QzM3Ni45MjkgMzAuMTY3NiAzNzcuNDI1IDMwLjEzNDMgMzc3LjcyMiAzMC4xMzQzQzM3OS4wMTEgMzAuMTM0MyAzNzkuODA0IDMwLjg4OTggMzc5LjgwNCAzMi4yMDI4Wk0zMzguNjAyIDIyLjgxNDFDMzM3LjkwOSAyMi44NDY2IDMzNy41NDUgMjIuODQ2NiAzMzcuMDgyIDIyLjg0NjZDMzM2LjUyMSAyMi44NDY2IDMzNi4xOSAyMi44NDY2IDMzNS40NjMgMjIuODE0MUwzMzcuMDgyIDE5LjAwNkwzMzguNjAyIDIyLjgxNDFaTTMzMy4xNTEgMzIuMzAwOEMzMzMuMTUxIDMzLjgxMTEgMzMyLjI1OCAzNC43OTU5IDMzMC44MDUgMzQuNzk1OUMzMzAuNTA3IDM0Ljc5NTkgMzMwLjE3NyAzNC43OTU5IDMyOS43OCAzNC43MzAxVjMwLjIzMjdDMzMwLjI0MyAzMC4xNjY5IDMzMC42MzkgMzAuMTMzOSAzMzEuMDM2IDMwLjEzMzlDMzMyLjQyNCAzMC4xMzQzIDMzMy4xNTEgMzEuMDIxMSAzMzMuMTUxIDMyLjMwMDhaTTM2OS41MjggMjMuNjY3NkMzNjkuNTI4IDIyLjAyNiAzNjguNDM4IDIxLjMwMzkgMzY2LjU1NSAyMC41MTYyQzM2NS4yIDE5Ljk1ODMgMzY0LjUwNiAxOS40OTg4IDM2NC41MDYgMTguNDE1MUMzNjQuNTA2IDE3LjQ2MzIgMzY1LjI2NiAxNi44MDY1IDM2Ni41MjEgMTYuODA2NUMzNjcuMzQ4IDE2LjgwNjUgMzY4LjA3NSAxNy4xMDE3IDM2OC43MzUgMTcuNjI3NUMzNjguODAyIDE3LjI2NjQgMzY4Ljk2NyAxNi45MDQ5IDM2OS4xMzEgMTYuNjQyMkMzNjguMzcyIDE2LjI4MTEgMzY3LjQ3OSAxNi4xMTcyIDM2Ni41ODcgMTYuMTE3MkMzNjMuOTQ0IDE2LjExNzIgMzYyLjk4NiAxNy42NiAzNjIuOTg2IDE5LjAwNkMzNjIuOTg2IDIwLjU4MTcgMzYzLjgxMiAyMS4zMzY4IDM2NS44NjEgMjIuMTI0NEMzNjcuMTQ5IDIyLjYxNjkgMzY3LjgxIDIzLjI0MDYgMzY3LjgxIDI0LjM1NjhDMzY3LjgxIDI1LjQ3MyAzNjYuOTUxIDI2LjE5NTIgMzY1Ljc2MiAyNi4xOTUyQzM2NS4wMzUgMjYuMTk1MiAzNjMuODc5IDI1LjgzNDEgMzYzLjA1MiAyNS4xMTE5QzM2My4wMiAyNS41Mzg5IDM2Mi45ODYgMjUuOSAzNjIuODg3IDI2LjI2MTFDMzYzLjM4MyAyNi41MjM4IDM2NC42MDYgMjYuOTE3NCAzNjUuNzI5IDI2LjkxNzRDMzY4LjUwNCAyNi45MTc0IDM2OS41MjggMjUuMjQzMyAzNjkuNTI4IDIzLjY2NzZWMjMuNjY3NloiIGZpbGw9IiMwMzY1NTUiLz4NCjxwYXRoIGQ9Ik02NDAuNDE2IDIwLjU1NzNDNjM4LjY3MSAxOS44MzU0IDYzNy42MzEgMTkuNTU1MSA2MzYuNTk4IDE5LjU1NTFDNjM1LjUxNCAxOS41NTUxIDYzNC44MTkgMTkuOTE3IDYzNC44MTkgMjAuNDc2NUM2MzQuODE5IDIyLjE2NDUgNjQwLjk2MiAyMS42ODkzIDY0MC45NjIgMjUuNTkzNkM2NDAuOTYyIDI3Ljc0NjQgNjM5LjAyNCAyOC45OTc0IDYzNi4zMzIgMjguOTk3NEM2MzQuMjIgMjguOTk3NCA2MzMuMTggMjguNDg4IDYzMS45ODMgMjcuOTExNlYyNS40OTYyQzYzMy43MSAyNi41NjM1IDYzNC43NjggMjYuOTQwMSA2MzYuMTAxIDI2Ljk0MDFDNjM3LjI1NiAyNi45NDAxIDYzNy44NzkgMjYuNTYzNSA2MzcuODc5IDI1LjkwNjNDNjM3Ljg3OSAyNC4wNjg1IDYzMS43MzcgMjQuNzQxNSA2MzEuNzM3IDIwLjcyMTNDNjMxLjczNyAxOC43ODI3IDYzMy41MzQgMTcuNDk5IDYzNi4zMzIgMTcuNDk5QzYzNy42ODIgMTcuNDk5IDYzOC45MDEgMTcuNzYzNSA2NDAuNDE2IDE4LjM3MDdWMjAuNTU3M1pNNjQ5LjAxNiAyOC40ODQxQzY0Ny45OTIgMjguODMwNiA2NDcuMTI2IDI4Ljk5NTQgNjQ2LjI2MiAyOC45OTU0QzY0My40MDIgMjguOTk1NCA2NDEuNTUyIDI3LjQ0MjIgNjQxLjU1MiAyNS4wNzkyQzY0MS41NTIgMjIuNzU5NCA2NDMuNDczIDIxLjEyMDIgNjQ2LjE1NiAyMS4xMjAyQzY0Ni45ODUgMjEuMTIwMiA2NDguMDQ0IDIxLjMxODIgNjQ4Ljg5MSAyMS42MTIzVjIzLjM4ODFDNjQ4LjIyMSAyMy4wNTYyIDY0Ny40NDQgMjIuODc0MSA2NDYuODA5IDIyLjg3NDFDNjQ1LjI3MyAyMi44NzQxIDY0NC4yODYgMjMuNzM0MyA2NDQuMjg2IDI1LjA2MTlDNjQ0LjI4NiAyNi40MDggNjQ1LjI1NiAyNy4yOTQgNjQ2LjcyIDI3LjI5NEM2NDcuMzM3IDI3LjI5NCA2NDcuODg2IDI3LjE2MjMgNjQ5LjAxNiAyNi43NjhMNjQ5LjAxNiAyOC40ODQxWk02NzEuMzIgMjQuMjA5QzY3MS40MjUgMjMuMTU0OCA2NzIuMDgxIDIyLjU0NTcgNjczLjA4NyAyMi41NDU3QzY3NC4wNzYgMjIuNTQ1NyA2NzQuNzQ2IDIzLjE3MjEgNjc0Ljg1MiAyNC4yMDlINjcxLjMyWk02NzIuOTEgMjEuMTIyOUM2NzAuNCAyMS4xMjI5IDY2OC42MTQgMjIuNzc1NSA2NjguNjE0IDI1LjEwMTJDNjY4LjYxNCAyNy40NDQxIDY3MC40NzEgMjguOTk1NCA2NzMuMzM1IDI4Ljk5NTRDNjczLjk3IDI4Ljk5NTQgNjc1LjUwNCAyOC45OTU0IDY3Ni45NjYgMjcuOTg3VjI2LjUwNDJDNjc1Ljc2OSAyNy4yOTkzIDY3NC45NzcgMjcuNTczMSA2NzMuOTU1IDI3LjU3MzFDNjcyLjM0MSAyNy41NzMxIDY3MS4zNTQgMjYuNzk0OSA2NzEuMjY1IDI1LjQ2NjZINjc3LjExQzY3Ny4yMzIgMjIuNjkzOSA2NzUuMjc5IDIxLjEyMjkgNjcyLjkxIDIxLjEyMjlWMjEuMTIyOVpNNjc4LjA5OSAyOC44NTcySDY4MC42NTRWMjEuMjYyN0g2NzguMDk5VjI4Ljg1NzJaTTY4Ny43NjcgMjYuNzgxNUM2ODcuMjM0IDI3LjIyODEgNjg2Ljc5MiAyNy40MDcyIDY4Ni4yNDYgMjcuNDA3MkM2ODUuMDQzIDI3LjQwNzIgNjg0LjI4MSAyNi40ODM4IDY4NC4yODEgMjUuMTAwNEM2ODQuMjgxIDIzLjU4NDEgNjg1LjA0MyAyMi43MTAxIDY4Ni4zMzEgMjIuNzEwMUM2ODYuNzkyIDIyLjcxMDEgNjg3LjM5NCAyMi45MDggNjg3Ljc2NyAyMy4xNTU5VjI2Ljc4MTVaTTY4Ny43NjcgMTcuNjM5MVYyMS41OTU4QzY4Ny4wNzYgMjEuMjg0NyA2ODYuMzg4IDIxLjEyMDIgNjg1LjY0NCAyMS4xMjAyQzY4My4zMTMgMjEuMTIwMiA2ODEuNyAyMi43MjY2IDY4MS43IDI1LjA1MDdDNjgxLjcgMjcuMzI0OCA2ODMuMzEzIDI4Ljk5NzQgNjg1LjUgMjguOTk3NEM2ODYuMzY3IDI4Ljk5NzQgNjg3LjAzNyAyOC43ODU2IDY4Ny43NjcgMjguMjQzNVYyOC44NTQ5SDY5MC4zMjJWMTcuNjM5MUg2ODcuNzY3Wk02OTQuMTA1IDI0LjIwOUM2OTQuMjExIDIzLjE1NDggNjk0Ljg2NCAyMi41NDU3IDY5NS44NjggMjIuNTQ1N0M2OTYuODU4IDIyLjU0NTcgNjk3LjUzNSAyMy4xNzIxIDY5Ny42NDEgMjQuMjA5SDY5NC4xMDVaTTY5NS42OTQgMjEuMTIyOUM2OTMuMTg0IDIxLjEyMjkgNjkxLjQgMjIuNzc1NSA2OTEuNCAyNS4xMDEyQzY5MS40IDI3LjQ0NDEgNjkzLjI1OSAyOC45OTU0IDY5Ni4xMTkgMjguOTk1NEM2OTYuNzUzIDI4Ljk5NTQgNjk4LjI5IDI4Ljk5NTQgNjk5Ljc1NSAyNy45ODdWMjYuNTA0MkM2OTguNTU3IDI3LjI5OTMgNjk3Ljc2MyAyNy41NzMxIDY5Ni43MzYgMjcuNTczMUM2OTUuMTMxIDI3LjU3MzEgNjk0LjE0IDI2Ljc5NDkgNjk0LjA1MSAyNS40NjY2SDY5OS44OTRDNzAwLjAxNSAyMi42OTM5IDY5OC4wNjEgMjEuMTIyOSA2OTUuNjk0IDIxLjEyMjkiIGZpbGw9IiMwMDlFNEQiLz4NCjxwYXRoIGQ9Ik03MDMuNzIxIDIzLjQzNjhINzAzLjc1OEM3MDQuNTE3IDIxLjg1NjIgNzA1LjM2NiAyMS4xMTUgNzA2LjM1MiAyMS4xMTVDNzA2Ljg2MiAyMS4xMTUgNzA3LjMwMyAyMS4yOTY0IDcwOC4wNDQgMjEuODA3Nkw3MDcuMzQxIDIzLjkxMzNDNzA2LjY3IDIzLjUxODYgNzA2LjIyOSAyMy4zNTM1IDcwNS44MjMgMjMuMzUzNUM3MDQuODg2IDIzLjM1MzUgNzA0LjI4NiAyNC4xNzc1IDcwMy43MjEgMjUuNTcwNFYyOC44NDY2SDcwMS4xNjJWMjEuMjU0MUg3MDMuNzIxVjIzLjQzNjhaTTY4MC43NzUgMTguMDY3NEM2ODEuMDE1IDE4LjY1NzUgNjgwLjU4MyAxOS40ODA1IDY3OS44MTQgMTkuOTA0QzY3OS4wNDEgMjAuMzI3MSA2NzguMjI0IDIwLjE5MjggNjc3Ljk4NiAxOS42MDI3QzY3Ny43NDMgMTkuMDExNyA2NzguMTczIDE4LjE4NzcgNjc4Ljk0NSAxNy43NjY2QzY3OS43MTYgMTcuMzQxMSA2ODAuNTMzIDE3LjQ3NTkgNjgwLjc3NSAxOC4wNjc0WiIgZmlsbD0iIzAwOUU0RCIvPg0KPHBhdGggZD0iTTY1OC4yMiAyNC4wMjMxQzY1OC4yMiAyMS45NjUxIDY1Ni43MTkgMjEuMTIyNiA2NTUuMjM5IDIxLjEyMjZDNjU0LjIzMiAyMS4xMjI2IDY1My40MDQgMjEuNTE4NCA2NTIuNjY0IDIyLjM5MjFINjUyLjYyOVYxNy42MzkySDY1MC4wNzFWMjguODM1M0g2NTIuNjI5VjI0LjAyMzFDNjUzLjIyOCAyMy4yMTYxIDY1My43MzggMjIuODcxMSA2NTQuMzM4IDIyLjg3MTFDNjU1LjEzNCAyMi44NzExIDY1NS42NjIgMjMuMzk4NiA2NTUuNjYyIDI0LjUzMjlWMjcuMjAwOEM2NTYuNTIgMjYuNzg5NiA2NTcuMzkzIDI2LjUzNzQgNjU4LjIyIDI2LjQ0MzhWMjQuMDIzMVpNNjY0LjYzNiAyMS4xMTk5QzY2My41OTQgMjEuMTE5OSA2NjIuNzk5IDIxLjQ4MTEgNjYxLjk4NCAyMi4zNDkzVjIxLjI2MjRINjU5LjQyOFYyNi40MjM0QzY2MC4zMTMgMjYuNTA1OCA2NjEuNDQzIDI2Ljg4NDcgNjYxLjk4NCAyNy41MTA0VjIzLjk2MzRDNjYyLjY1NyAyMy4wMjMyIDY2My4xMzQgMjIuNzA5NyA2NjMuNzcgMjIuNzA5N0M2NjQuNDk0IDIyLjcwOTcgNjY1LjA0NSAyMy4xNTU2IDY2NS4wNDUgMjQuMjI2NFYyOC44MzcySDY2Ny42MDJWMjQuMDI4OUM2NjcuNjAyIDIxLjc5MjYgNjY1LjkwOCAyMS4xMTk5IDY2NC42MzYgMjEuMTE5OVYyMS4xMTk5Wk02NjkuMDE1IDMxLjAxODFINjY2LjA0M1YzMi45ODY0SDY2OC45MDlWMzMuODMxMkg2NjYuMDQzVjM1Ljg2MTlINjY5LjEwM1YzNi43MDU1SDY2NS4wNDZWMzAuMTc1Mkg2NjkuMDE1TDY2OS4wMTUgMzEuMDE4MVpNNjcxLjQ0MiAzNi43MDkzSDY3Mi4zNTJWMzAuMTczM0g2NzEuNDQyVjM2LjcwOTNaTTY3Ni44NTkgMzMuMDQ4NEM2NzcuNTA0IDMzLjA0ODQgNjc3LjkwNCAzMy40NjMxIDY3Ny45MzUgMzQuMTE0Mkg2NzUuNjE2QzY3NS43NDIgMzMuNDM0MiA2NzYuMTYxIDMzLjA0ODQgNjc2Ljg1OSAzMy4wNDg0Wk02NzUuNiAzNC42ODFINjc4Ljg0MkM2NzguODQyIDMzLjA4NjkgNjc4LjA2MiAzMi4zMTggNjc2LjgzOCAzMi4zMThDNjc1LjU2OSAzMi4zMTggNjc0LjY4OCAzMy4xOTI0IDY3NC42ODggMzQuNDk2OUM2NzQuNjg4IDM1LjY4OSA2NzUuNDg0IDM2Ljc4OTggNjc2LjkxNyAzNi43ODk4QzY3Ny42OTggMzYuNzg5OCA2NzguMjAzIDM2LjYyODEgNjc4Ljc2MyAzNi4yODJWMzUuNDU2QzY3OC4yMjIgMzUuNzg1NiA2NzcuNjk4IDM1Ljk3NTggNjc3LjE0NyAzNS45NzU4QzY3Ni4yNjUgMzUuOTc1OCA2NzUuNzQyIDM1LjUzNSA2NzUuNiAzNC42ODA2VjM0LjY4MVpNNjg0Ljc4NiAzMy41MzA5QzY4NC4yNjMgMzMuMTk2NiA2ODMuOTE0IDMzLjA5ODUgNjgzLjUxNSAzMy4wOTg1QzY4Mi42ODIgMzMuMDk4NSA2ODIuMTA1IDMzLjY5NDUgNjgyLjEwNSAzNC41NjdDNjgyLjEwNSAzNS40NTYgNjgyLjcxOSAzNS45OTE2IDY4My42NjggMzUuOTkxNkM2ODQuMDU4IDM1Ljk5MTYgNjg0LjQzIDM1Ljg5NzMgNjg0Ljg4OCAzNS43MDU5VjM2LjU0MjZDNjg0LjU4MiAzNi42Nzc0IDY4My45OTcgMzYuNzg5OCA2ODMuNTE1IDM2Ljc4OThDNjgyLjEzNiAzNi43ODk4IDY4MS4xOCAzNS45MDYyIDY4MS4xOCAzNC42NDMyQzY4MS4xOCAzMy4yMTc4IDY4Mi4wNTQgMzIuMzE4IDY4My40NTMgMzIuMzE4QzY4My45ODcgMzIuMzE4IDY4NC4zNDYgMzIuNDMzOSA2ODQuNzg3IDMyLjYxNDVMNjg0Ljc4NiAzMy41MzA5Wk02ODguOTM0IDMyLjQwMDRINjkwLjM5NVYzMy4xNjUxSDY4OC45MzRWMzUuMzc1MkM2ODguOTM0IDM1Ljg4MTEgNjg5LjMyNyAzNi4wMjc0IDY4OS41OTMgMzYuMDI3NEM2ODkuOTIyIDM2LjAyNzQgNjkwLjI2MiAzNS45MiA2OTAuNjMgMzUuNzA3OVYzNi41MDM3QzY5MC4zMSAzNi42Njc4IDY4OS44MiAzNi43ODk4IDY4OS41MTkgMzYuNzg5OEM2ODguNTI4IDM2Ljc4OTggNjg4LjAyNyAzNi4yMTYxIDY4OC4wMjcgMzUuNDM5MVYzMy4xNjUxSDY4Ny4yMjRWMzMuMDcwM0w2ODguOTM0IDMxLjUxMDJWMzIuNDAwNFpNNjkzLjg3NiAzMi40MDA0VjMzLjM5NjlINjkzLjg5NUM2OTQuMzU5IDMyLjYzNDUgNjk0LjggMzIuMzE4IDY5NS4yMyAzMi4zMThDNjk1LjYwMSAzMi4zMTggNjk1Ljk0NyAzMi40ODAxIDY5Ni4zMjkgMzIuODE2Nkw2OTUuODQ3IDMzLjU2NDRDNjk1LjU3IDMzLjMwOTEgNjk1LjIxMSAzMy4xMzMxIDY5NC45OTUgMzMuMTMzMUM2OTQuMzY4IDMzLjEzMzEgNjkzLjg3NiAzMy43MjY4IDY5My44NzYgMzQuNDYyNlYzNi43MDkzSDY5Mi45NjdWMzIuNDAwNEg2OTMuODc2Wk03MDUuNjU3IDMzLjUzMDlDNzA1LjEzMSAzMy4xOTY2IDcwNC43ODIgMzMuMDk4NSA3MDQuMzgxIDMzLjA5ODVDNzAzLjU0OSAzMy4wOTg1IDcwMi45NzcgMzMuNjk0NSA3MDIuOTc3IDM0LjU2N0M3MDIuOTc3IDM1LjQ1NiA3MDMuNTkyIDM1Ljk5MTYgNzA0LjUzNSAzNS45OTE2QzcwNC45MjUgMzUuOTkxNiA3MDUuMjk1IDM1Ljg5NzMgNzA1Ljc2IDM1LjcwNTlWMzYuNTQyNkM3MDUuNDQ3IDM2LjY3NzQgNzA0Ljg2MiAzNi43ODk4IDcwNC4zOCAzNi43ODk4QzcwMy4wMDQgMzYuNzg5OCA3MDIuMDQ0IDM1LjkwNjIgNzAyLjA0NCAzNC42NDMyQzcwMi4wNDQgMzMuMjE3OCA3MDIuOTIyIDMyLjMxOCA3MDQuMzIgMzIuMzE4QzcwNC44NTUgMzIuMzE4IDcwNS4yMTIgMzIuNDMzOSA3MDUuNjU3IDMyLjYxNDVMNzA1LjY1NyAzMy41MzA5Wk02OTguNzQyIDM2LjcwOTNINjk5LjY1MlYzMi40MDA4SDY5OC43NDJWMzYuNzA5M1oiIGZpbGw9IiMwMDlFNEQiLz4NCjxwYXRoIGQ9Ik02OTkuNjg0IDMwLjg1MjVDNjk5Ljc3MyAzMS4wNjA0IDY5OS42MTggMzEuMzU0NCA2OTkuMzQ0IDMxLjUwNDFDNjk5LjA2OCAzMS42NTQzIDY5OC43NzYgMzEuNjA2MiA2OTguNjkzIDMxLjM5NzhDNjk4LjYxIDMxLjE4NzQgNjk4Ljc2MSAzMC44OTU4IDY5OS4wMzggMzAuNzQ1NkM2OTkuMzExIDMwLjU5MzUgNjk5LjYwMSAzMC42NDIxIDY5OS42ODQgMzAuODUyNVYzMC44NTI1Wk02NTguOTQgMzEuMjAwOUM2NTguNzc5IDMxLjIwMDkgNjU4LjcxMSAzMS4yMjU1IDY1OC42NDYgMzEuMjkzOEM2NTguNjIgMzEuMzIwMyA2NTguNjEgMzEuMzQ3MiA2NTguNiAzMS40MDExTDY1Ny43ODQgMzQuMjg3QzY1Ny41OTMgMzUuMjk5MiA2NTYuMjU5IDM2LjMwOTkgNjU0LjUyMSAzNi4zMDk5SDY1Mi4xMDRMNjUyLjUyMyAzNC44MjdINjU0LjA3NkM2NTQuMjM0IDM0LjgyNyA2NTQuMzU4IDM0Ljc3MjEgNjU0LjQ2MiAzNC42NjQzQzY1NC41IDM0LjYyMjUgNjU0LjU1IDM0LjU1NyA2NTQuNTU2IDM0LjQ4OTZMNjU1LjIwMSAzMS45NjgxQzY1NS4zOTEgMzAuOTU1NSA2NTYuNTM4IDI5LjgzNjkgNjU4LjI3NiAyOS44MzY5SDY2MC43NTFMNjYwLjQzNSAzMS4yMDA5SDY1OC45NFpNNjU5LjQ5NyAzMi45NTk2TDY1OS43NzMgMzIuMDI1OUg2NjIuMjg4QzY2Mi41OTggMzAuNjcyIDY2Mi4zNTQgMjkuNDE3NyA2NjEuNDczIDI4LjU5NjFDNjU5LjY4OSAyNi45MzMyIDY1NS45NTcgMjcuNDk4MyA2NTMuMTc3IDI5Ljk3NzlDNjUyLjc0MyAzMC4zNjMgNjUyLjM3NiAzMC43NzkzIDY1Mi4wNDIgMzEuMjA0OEg2NTMuNTU2TDY1My4yMDQgMzIuMTQwNEg2NTEuMzk1QzY1MS4yMjIgMzIuNDM1NCA2NTEuMDYgMzIuNzI4MSA2NTAuOTM2IDMzLjAyNUg2NTMuMDgxTDY1Mi43MzcgMzMuOTYwN0g2NTAuNjNDNjUwLjI2OSAzNS4zOTAxIDY1MC40OTkgMzYuNzIzMyA2NTEuNDA2IDM3LjU2OTlDNjUzLjE2NyAzOS4yMTE2IDY1Ni44ODggMzguNjM0NiA2NTkuNjY3IDM2LjE1NTRDNjYwLjE1MyAzNS43MjQyIDY2MC41NTUgMzUuMjU4NyA2NjAuOTE4IDM0Ljc4MDhINjU4Ljk3M0w2NTkuMjY5IDMzLjg0NzFINjYxLjU0M0M2NjEuNzEgMzMuNTUwMSA2NjEuODYzIDMzLjI1NjUgNjYxLjk4MyAzMi45NTk2SDY1OS40OTdaIiBmaWxsPSIjMDA5RTREIi8+DQo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfNThfMTExKSI+DQo8cGF0aCBkPSJNNzc1LjA2OCA0MS4yMjc0Qzc2Ni4yODUgNDIuMDQ2MyA3NTcuMTMxIDQwLjc1NjQgNzU1Ljg0OCAzMy44MTlDNzU1LjIyMSAzMC4zOTkgNzU2Ljc2NSAyNi43NzI1IDc1OC44MSAyNC41MTg0VjIzLjMxNDhDNzU1LjEyNiAyNi41OCA3NTMuMTMgMzAuNzExNSA3NTQuMjggMzUuNTkyQzc1NS43NDggNDEuODUxOCA3NjMuNjAzIDQ1LjM5NjcgNzc1LjU5NSA0NC4yMTk1Qzc4MC4zNDIgNDMuNzU0NSA3ODYuNTUgNDIuMjEyIDc5MC44NjkgMzkuODE0NFYzNi40MTA5Qzc4Ni45NDkgMzguNzcxMyA3ODAuNDY4IDQwLjcyMTEgNzc1LjA2OCA0MS4yMjc0VjQxLjIyNzRaTTc5OC4yMDUgMjMuMjMzNUM3OTYuMTIyIDEyLjk1MzMgNzc2LjM3MyAxMi4zMDE2IDc2My42NDMgMjAuMTMzOFYyMC45OTg5Qzc3Ni4zNTkgMTQuMzkxNSA3OTQuMzk1IDE0LjQzMTcgNzk2LjAzNyAyMy45MDE2Qzc5Ni41ODkgMjcuMDM0MiA3OTQuODQzIDMwLjI5NzggNzkxLjcyMyAzMi4xNzdWMzQuNjM0MkM3OTUuNDc2IDMzLjI0MzIgNzk5LjMyNCAyOC43NDQyIDc5OC4yMDUgMjMuMjMzNVYyMy4yMzM1WiIgZmlsbD0iIzBFN0RDMiIvPg0KPHBhdGggZD0iTTc5MC4xNTkgMjEuNzM2OEg3ODcuODU2VjMyLjEwM0M3ODcuODU2IDMzLjMxNzkgNzg4LjQzNyAzNC4zNzQ0IDc5MC4xNTkgMzQuNTQzMlYyMS43MzY4Wk03NjIuNzM5IDI1LjUyMTdINzYwLjQzMkw3NjAuNDMxIDMyLjI5NDNDNzYwLjQzMSAzMy41MTM0IDc2MS4wMTMgMzQuNTY4OCA3NjIuNzM5IDM0LjczNDRWMjUuNTIxN1YyNS41MjE3Wk03NjAuNDMyIDIyLjA1MjFINzYyLjczMlYyNC4yNTg0SDc2MC40MzJWMjIuMDUyMVpNNzc2LjUzIDM0LjYyNzJDNzc0LjY2NiAzNC42MjcyIDc3My44NzcgMzMuMzE3NyA3NzMuODc3IDMyLjAyOFYyMy4wMzU1SDc3Ni4xNlYyNS41MjE3SDc3Ny44NzlWMjcuMzg1M0g3NzYuMTZWMzEuODg1NEM3NzYuMTYgMzIuNDExMyA3NzYuNDA3IDMyLjcwNDQgNzc2Ljk1IDMyLjcwNDRINzc3Ljg3OVYzNC42MjcyTDc3Ni41MyAzNC42MjcyVjM0LjYyNzJaTTc4MC43MzEgMzAuNzk2MUM3ODAuNzMxIDMxLjk3NjggNzgxLjQ2MSAzMi44NDQ2IDc4Mi43NTQgMzIuODQ0NkM3ODMuNzY2IDMyLjg0NDYgNzg0LjI2NiAzMi41NjA1IDc4NC44NSAzMS45NzY4TDc4Ni4yNjEgMzMuMzM0OUM3ODUuMzU3IDM0LjIzNzkgNzg0LjQwOSAzNC43ODcgNzgyLjczNyAzNC43ODdDNzgwLjU1MiAzNC43ODcgNzc4LjQ1OSAzMy41ODE5IDc3OC40NTkgMzAuMDY4NkM3NzguNDU5IDI3LjA2NTEgNzgwLjI4OCAyNS4zNjczIDc4Mi42ODYgMjUuMzY3M0M3ODUuMTI0IDI1LjM2NzMgNzg2LjUyNSAyNy4zNTQ5IDc4Ni41MjUgMjkuOTYzOVYzMC43OTYzSDc4MC43MzFWMzAuNzk2MVpNNzgyLjU4NiAyNy4yNzU2Qzc4MS44MDUgMjcuMjc1NiA3ODEuMjA0IDI3LjY4MjMgNzgwLjk1IDI4LjIzMDlDNzgwLjgwMiAyOC41NjA3IDc4MC43NDcgMjguODE3NyA3ODAuNzMxIDI5LjIyMjlINzg0LjI0OUM3ODQuMjA0IDI4LjIzMDkgNzgzLjc1OSAyNy4yNzU2IDc4Mi41ODYgMjcuMjc1NlpNNzY4LjkzOSAyNy4zODUzQzc2OS42MDggMjcuMzg1MyA3NjkuODg3IDI3LjcxOTggNzY5Ljg4NyAyOC4yNjI2VjM0LjY0MDZINzcyLjE3VjI4LjI0OTJDNzcyLjE3IDI2Ljk1NDIgNzcxLjQ4NyAyNS41MjQxIDc2OS40ODIgMjUuNTI0MUw3NjQuNzY2IDI1LjUyMTdWMzQuNjQwNkg3NjcuMDVWMjcuMzg1M0g3NjguOTM5VjI3LjM4NTNaTTc5Mi42MzcgMjMuNTg5MUM3OTIuMTI5IDIzLjU4OTEgNzkxLjcyNCAyMy4xNzU0IDc5MS43MjQgMjIuNjYyOUM3OTEuNzI0IDIyLjE1MjkgNzkyLjEyOSAyMS43MzY4IDc5Mi42MzcgMjEuNzM2OEM3OTMuMTQyIDIxLjczNjggNzkzLjU1NiAyMi4xNTI5IDc5My41NTYgMjIuNjYyOUM3OTMuNTU2IDIzLjE3NTQgNzkzLjE0MiAyMy41ODkxIDc5Mi42MzcgMjMuNTg5MVpNNzkyLjYzNyAyMS44OTEyQzc5Mi4yMTggMjEuODkxMiA3OTEuODgyIDIyLjI0MDcgNzkxLjg4MiAyMi42NjI5Qzc5MS44ODIgMjMuMDg3NiA3OTIuMjE4IDIzLjQzMDkgNzkyLjYzNyAyMy40MzA5Qzc5My4wNTUgMjMuNDMwOSA3OTMuNDAyIDIzLjA4NzYgNzkzLjQwMiAyMi42NjI5Qzc5My40MDIgMjIuMjQwNyA3OTMuMDU1IDIxLjg5MTIgNzkyLjYzNyAyMS44OTEyWk03OTMuMDQzIDIzLjIxOEg3OTIuODcyQzc5Mi44NjQgMjMuMjE3OSA3OTIuODU3IDIzLjIxNTcgNzkyLjg1MSAyMy4yMTE2Qzc5Mi44NDUgMjMuMjA3NSA3OTIuODQgMjMuMjAxNyA3OTIuODM3IDIzLjE5NDlMNzkyLjYwNSAyMi43OTdDNzkyLjU5OCAyMi43ODg1IDc5Mi41NzkgMjIuNzc4OCA3OTIuNTczIDIyLjc3ODhINzkyLjQ2N1YyMy4xNzU0Qzc5Mi40NjcgMjMuMTk1IDc5Mi40NTMgMjMuMjE4MSA3OTIuNDI4IDIzLjIxODFINzkyLjI3NEM3OTIuMjUxIDIzLjIxODEgNzkyLjIzNSAyMy4xOTUgNzkyLjIzNSAyMy4xNzU0VjIyLjE3NDlDNzkyLjIzNSAyMi4xMTY0IDc5Mi4yNTQgMjIuMDkyNCA3OTIuMzA1IDIyLjA4NUM3OTIuMzYxIDIyLjA3OSA3OTIuNTA1IDIyLjA3MTYgNzkyLjU4NiAyMi4wNzE2Qzc5Mi44NzIgMjIuMDcxNiA3OTMuMDM5IDIyLjE1NjYgNzkzLjAzOSAyMi40MjQ0VjIyLjQ0NEM3OTMuMDM5IDIyLjYwOTQgNzkyLjk1OSAyMi42OTk1IDc5Mi44MzMgMjIuNzM5N0w3OTMuMDc0IDIzLjE1NDdDNzkzLjA3OCAyMy4xNjQgNzkzLjA4IDIzLjE3MzkgNzkzLjA4IDIzLjE4NEM3OTMuMDggMjMuMTk5NyA3OTMuMDcyIDIzLjIxOCA3OTMuMDQzIDIzLjIxOFYyMy4yMThaTTc5Mi44MjEgMjIuNDI0NEM3OTIuODIxIDIyLjMxMjcgNzkyLjc1MiAyMi4yNzczIDc5Mi42MDUgMjIuMjc3M0g3OTIuNDU5VjIyLjU5NDdDNzkyLjQ4MiAyMi41OTQ3IDc5Mi41ODYgMjIuNTk5NiA3OTIuNjA1IDIyLjU5OTZDNzkyLjc1MiAyMi41OTk2IDc5Mi44MjEgMjIuNTUgNzkyLjgyMSAyMi40NDRWMjIuNDI0NFoiIGZpbGw9IiMwRTdEQzIiLz4NCjwvZz4NCjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMV81OF8xMTEpIj4NCjxwYXRoIGQ9Ik01MzMuNzczIDIwLjk5MTFDNTI5LjI2MyAyMC45OTExIDUyNS41OTkgMjQuNjU0NyA1MjUuNTk5IDI5LjE2NDRDNTI1LjU5OSAzMy42NzQxIDUyOS4yNjMgMzcuMzM3NyA1MzMuNzczIDM3LjMzNzdDNTM4LjI4MiAzNy4zMzc3IDU0MS45NDYgMzMuNjc0MSA1NDEuOTQ2IDI5LjE2NDRDNTQxLjk0NiAyNC42NTQ3IDUzOC4yODIgMjAuOTkxMSA1MzMuNzczIDIwLjk5MTFaTTUzMy43NzMgMzYuNTE4NkM1MjkuNzEzIDM2LjUxODYgNTI2LjQxOSAzMy4yMTUgNTI2LjQxOSAyOS4xNjQ0QzUyNi40MTkgMjUuMTEzNyA1MjkuNzEzIDIxLjgxMDIgNTMzLjc3MyAyMS44MTAyQzUzNy44MzIgMjEuODEwMiA1NDEuMTI3IDI1LjExMzcgNTQxLjEyNyAyOS4xNjQ0QzU0MS4xMjcgMzMuMjE1IDUzNy44MzIgMzYuNTE4NiA1MzMuNzczIDM2LjUxODZaIiBmaWxsPSJibGFjayIvPg0KPHBhdGggZD0iTTUzNi42OSAyMy45MjUyQzUzNi42NjMgMjMuOTA3MiA1MzYuNjI3IDIzLjg5ODIgNTM2LjU5MSAyMy44OTgyQzUzNi40ODMgMjMuODk4MiA1MzYuNDAyIDIzLjk3OTIgNTM2LjQwMiAyNC4wODczVjI2LjY0MzdDNTM2LjQwMiAyNi43MzM3IDUzNi4zMyAyNi44MDU3IDUzNi4yNCAyNi44MDU3SDUzMS4yOUM1MzEuMiAyNi44MDU3IDUzMS4xMzcgMjYuNzMzNyA1MzEuMTI4IDI2LjY0MzdWMjQuMDg3M0M1MzEuMTI4IDI0LjA1MTMgNTMxLjExOSAyNC4wMjQyIDUzMS4xMDEgMjMuOTg4MkM1MzEuMDQ3IDIzLjg5ODIgNTMwLjkzIDIzLjg3MTIgNTMwLjgzOSAyMy45MjUyQzUyOS4wMTIgMjUuMDUwNCA1MjcuOTA1IDI3LjAwMzcgNTI3LjkwNSAyOS4xNjQxQzUyNy45MDUgMzEuMzI0NCA1MjkuMDEyIDMzLjI3NzcgNTMwLjg1NyAzNC40MDI5QzUzMC44ODUgMzQuNDIwOSA1MzAuOTIxIDM0LjQyOTkgNTMwLjk1NyAzNC40Mjk5QzUzMS4wNjUgMzQuNDI5OSA1MzEuMTQ2IDM0LjM0ODkgNTMxLjE0NiAzNC4yNDA5VjMxLjY4NDVDNTMxLjE0NiAzMS41OTQ0IDUzMS4yMTggMzEuNTMxNCA1MzEuMzA4IDMxLjUyMjRINTM2LjI1OEM1MzYuMzQ4IDMxLjUyMjQgNTM2LjQyIDMxLjU5NDQgNTM2LjQyIDMxLjY4NDVWMzQuMjQwOUM1MzYuNDIgMzQuMjc2OSA1MzYuNDI5IDM0LjMwMzkgNTM2LjQ0NyAzNC4zMzk5QzUzNi41MDEgMzQuNDI5OSA1MzYuNjE4IDM0LjQ1NjkgNTM2LjcwOCAzNC40MDI5QzUzOC41NTQgMzMuMjc3NyA1MzkuNjYxIDMxLjMyNDQgNTM5LjY2MSAyOS4xNjQxQzUzOS42NjEgMjcuMDAzNyA1MzguNTM2IDI1LjA1MDQgNTM2LjY5IDIzLjkyNTJWMjMuOTI1MlpNNTMwLjE5MSAzMi4zNjg2TDUzMC4yMTggMzIuNjc0Nkw1MzAuMDIgMzIuNDMxNkM1MjguNDk5IDMwLjUxNDMgNTI4LjQ5OSAyNy44MDQ4IDUzMC4wMiAyNS44ODc1TDUzMC4xOTEgMjUuNjcxNUw1MzAuMjE4IDI1LjY0NDVMNTMwLjE5MSAyNS45NTk2QzUzMC4xNjQgMjYuMjExNiA1MzAuMTU1IDI2LjQ3MjYgNTMwLjE1NSAyNi43MzM3VjMxLjU4NTRDNTMwLjE1NSAzMS44NDY1IDUzMC4xNzMgMzIuMTA3NSA1MzAuMTkxIDMyLjM2ODZaTTUzNi40MDIgMzAuMzg4M0M1MzYuNDAyIDMwLjQ3ODMgNTM2LjMzIDMwLjU1MDMgNTM2LjI0IDMwLjU1MDNINTMxLjI5QzUzMS4yIDMwLjU1MDMgNTMxLjEzNyAzMC40NzgzIDUzMS4xMjggMzAuMzg4M1YyNy45Mzk5QzUzMS4xMjggMjcuODQ5OSA1MzEuMiAyNy43Nzc4IDUzMS4yOSAyNy43Nzc4SDUzNi4yNEM1MzYuMzMgMjcuNzc3OCA1MzYuNDAyIDI3Ljg0OTkgNTM2LjQwMiAyNy45Mzk5VjMwLjM4ODNaTTUzNy41MTkgMzIuNDMxNkw1MzcuMzIxIDMyLjY3NDZMNTM3LjM0OCAzMi4zNjg2QzUzNy4zNzUgMzIuMTE2NSA1MzcuMzg0IDMxLjg1NTUgNTM3LjM4NCAzMS41OTQ0VjI2LjczMzdDNTM3LjM4NCAyNi40NzI2IDUzNy4zNzUgMjYuMjExNiA1MzcuMzQ4IDI1Ljk1OTZMNTM3LjMzOSAyNS44MjQ1TDUzNy4zMyAyNS42ODA1VjI1LjY0NDVMNTM3LjUxOSAyNS44ODc1QzUzOC4yNTcgMjYuODA1NyA1MzguNjYyIDI3Ljk3NTkgNTM4LjY2MiAyOS4xNTUxQzUzOC42NjIgMzAuMzM0MiA1MzguMjU3IDMxLjUxMzQgNTM3LjUxOSAzMi40MzE2VjMyLjQzMTZaIiBmaWxsPSJibGFjayIvPg0KPHBhdGggZD0iTTU1NC4yNzYgMjkuMDIwMkM1NTQuMjMxIDI5LjAwMjIgNTU0LjE3NyAyOC45ODQyIDU1NC4xNzcgMjguOTMwMkM1NTQuMTc3IDI4Ljg5NDIgNTU0LjE5NSAyOC44NjcyIDU1NC4yMzEgMjguODQ5MkM1NTQuMjk0IDI4LjgyMjIgNTU1Ljg1MSAyOC4yNjQxIDU1NS44NTEgMjYuNDI3OEM1NTUuODUxIDI0LjM4NDUgNTU0LjQ3NCAyMy4xNjkzIDU1Mi4xNTIgMjMuMTY5M0g1NDYuNTI2VjM1LjE3NzJINTUyLjY2NUM1NTQuNDU2IDM1LjE3NzIgNTU2LjM4MiAzMy45MDggNTU2LjM4MiAzMS44NjQ2QzU1Ni4zODIgMjkuOTExMyA1NTQuOTA2IDI5LjIyNzIgNTU0LjI3NiAyOS4wMjAyVjI5LjAyMDJaTTU0OS4zNjEgMjUuNjI2N0M1NDkuMzYxIDI1LjU4MTcgNTQ5LjM5NyAyNS41NDU2IDU0OS40NDIgMjUuNTQ1Nkg1NTEuNjc1QzU1Mi40MTMgMjUuNTQ1NiA1NTIuOTE3IDI2LjA0MDcgNTUyLjkxNyAyNi43Nzg4QzU1Mi45MTcgMjcuMzU0OSA1NTIuNDY3IDI3Ljk3NiA1NTEuNjIxIDI3Ljk3Nkg1NDkuNDQyQzU0OS4zOTcgMjcuOTc2IDU0OS4zNjEgMjcuOTQgNTQ5LjM2MSAyNy44OTVWMjUuNjI2N1pNNTUxLjY3NSAzMi44MDk4SDU0OS40NDJDNTQ5LjM5NyAzMi44MDk4IDU0OS4zNjEgMzIuNzczOCA1NDkuMzYxIDMyLjcyODhWMzAuMzM0NEM1NDkuMzYxIDMwLjI4OTQgNTQ5LjM5NyAzMC4yNTM0IDU0OS40NDIgMzAuMjUzNEg1NTEuNjIxQzU1Mi42OTIgMzAuMjUzNCA1NTMuMzA0IDMwLjcxMjUgNTUzLjMwNCAzMS41MjI2QzU1My4zMDQgMzIuMzU5NyA1NTIuNzM3IDMyLjgwOTggNTUxLjY3NSAzMi44MDk4VjMyLjgwOThaTTU3NS4zODQgMjcuOTQ5TDU3NC45NTIgMjcuODU5QzU3My45OCAyNy42NTIgNTczLjAzNSAyNy4zOTA5IDU3My4wMzUgMjYuNTUzOEM1NzMuMDM1IDI1LjcxNjcgNTczLjgxOCAyNS4zMzg2IDU3NC41OTIgMjUuMzM4NkM1NzUuNTAxIDI1LjMzODYgNTc2LjQwMSAyNS43NDM3IDU3Ny4wODYgMjYuNDQ1OEw1NzguODY4IDI0LjY4MTVDNTc4LjEwMyAyMy44MzU0IDU3Ni43NDQgMjIuODYzMiA1NzQuNTQ3IDIyLjg2MzJDNTcxLjkwMSAyMi44NjMyIDU3MC4xMTggMjQuMzY2NSA1NzAuMTE4IDI2LjYwNzhDNTcwLjExOCAyOC45NzUyIDU3MS45ODIgMjkuODY2MyA1NzMuNTQ4IDMwLjE5OTRMNTczLjk3MSAzMC4yODk0QzU3NS40OTIgMzAuNjEzNSA1NzYuMjEyIDMwLjg1NjUgNTc2LjIxMiAzMS43MjA2QzU3Ni4yMTIgMzIuNDk0NyA1NzUuNTE5IDMzLjAwNzggNTc0LjQ5MyAzMy4wMDc4QzU3My4yODcgMzMuMDA3OCA1NzIuMjE2IDMyLjQ3NjcgNTcxLjQwNiAzMS40Nzc2TDU2OS41NzggMzMuMjY4OUM1NzAuNTUxIDM0LjQyMTEgNTcxLjgzOCAzNS40NjUyIDU3NC41MjkgMzUuNDY1MkM1NzYuODI1IDM1LjQ2NTIgNTc5LjE1NiAzNC4xMzMgNTc5LjE1NiAzMS41NzY2QzU3OS4xNDcgMjguOTU3MiA1NzcuMzY1IDI4LjM2MzEgNTc1LjM4NCAyNy45NDlWMjcuOTQ5Wk01OTkuMTAzIDIzLjE2OTNWMjcuNTYyQzU5OS4xMDMgMjcuNjA3IDU5OS4wNjcgMjcuNjQzIDU5OS4wMjIgMjcuNjQzSDU5NS4zMzFDNTk1LjI4NiAyNy42NDMgNTk1LjI1IDI3LjYwNyA1OTUuMjUgMjcuNTYyVjIzLjE2OTNINTkyLjIyNlYzNS4xNzcySDU5NS4yNVYzMC40NjA0QzU5NS4yNSAzMC40MTU0IDU5NS4yODYgMzAuMzc5NCA1OTUuMzMxIDMwLjM3OTRINTk5LjAyMkM1OTkuMDY3IDMwLjM3OTQgNTk5LjEwMyAzMC40MTU0IDU5OS4xMDMgMzAuNDYwNFYzNS4xNzcySDYwMi4xNDZWMjMuMTY5M0g1OTkuMTAzWk01ODYuMTQxIDMyLjcxOThDNTg0Ljc4MiAzMi43MTk4IDU4My4zMTUgMzEuNTg1NiA1ODMuMzE1IDI5LjA5MjJDNTgzLjMxNSAyNi44MTQ4IDU4NC42OTIgMjUuNjI2NyA1ODYuMDUxIDI1LjYyNjdDNTg3LjA0MSAyNS42MjY3IDU4Ny43MzQgMjYuMDQwNyA1ODguMjgzIDI2Ljk1ODlMNTkwLjYwNiAyNS40MTk2QzU4OS40MTggMjMuNjczMyA1ODguMDA0IDIyLjg4MTIgNTg2LjAzMyAyMi44ODEyQzU4Mi4xNzEgMjIuODgxMiA1ODAuNDQzIDI2LjAwNDcgNTgwLjQ0MyAyOS4wOTIyQzU4MC40NDMgMzIuODQ1OCA1ODIuNzI5IDM1LjQ2NTIgNTg1Ljk5NyAzNS40NjUyQzU4OC40MjcgMzUuNDY1MiA1ODkuNTM1IDM0LjU3NDEgNTkwLjY5NiAzMi45MjY4TDU4OC4zNTUgMzEuMzUxNkM1ODcuODMzIDMyLjE5NzcgNTg3LjI2NiAzMi43MTk4IDU4Ni4xNDEgMzIuNzE5OFpNNTYzLjE3OCAyMi44NjMyQzU1OS44NzUgMjIuODYzMiA1NTcuNjYxIDI1LjM5MjYgNTU3LjY2MSAyOS4xNjQyQzU1Ny42NjEgMzIuOTM1OCA1NTkuODc1IDM1LjQ2NTIgNTYzLjE3OCAzNS40NjUyQzU2Ni40ODIgMzUuNDY1MiA1NjguNjk2IDMyLjkzNTggNTY4LjY5NiAyOS4xNjQyQzU2OC42OTYgMjUuMzkyNiA1NjYuNDgyIDIyLjg2MzIgNTYzLjE3OCAyMi44NjMyVjIyLjg2MzJaTTU2My4xNzggMzIuNzE5OEM1NjEuNTU4IDMyLjcxOTggNTYwLjUxNCAzMS4zMjQ2IDU2MC41MTQgMjkuMTY0MkM1NjAuNTE0IDI3LjAxMjkgNTYxLjU1OCAyNS42MjY3IDU2My4xNzggMjUuNjI2N0M1NjQuODA4IDI1LjYyNjcgNTY1Ljg2MSAyNy4wMTI5IDU2NS44NjEgMjkuMTY0MkM1NjUuODYxIDMxLjMyNDYgNTY0LjgwOCAzMi43MTk4IDU2My4xNzggMzIuNzE5OFoiIGZpbGw9IiNGODAwMDAiLz4NCjwvZz4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQ2LjM0NCAyMi4xODExQzE0Ny41OTUgMjIuMjg1NCAxNDguODQ1IDIxLjU1NTMgMTQ5LjYyNyAyMC42Mjk4QzE1MC4zOTUgMTkuNjc4MSAxNTAuOTAzIDE4LjQwMDUgMTUwLjc3MyAxNy4wOTY5QzE0OS42NjYgMTcuMTQ5MSAxNDguMjk4IDE3LjgyNjkgMTQ3LjUxNyAxOC43Nzg2QzE0Ni44IDE5LjU5OTkgMTQ2LjE4OCAyMC45Mjk2IDE0Ni4zNDQgMjIuMTgxMVpNMTQ3Ljg0MSAyMy4wNzk3QzE0OC42NTMgMjIuNzYwNiAxNDkuNjU4IDIyLjM2NTYgMTUwLjc2IDIyLjQyOTFDMTUxLjQ2MyAyMi40ODEyIDE1My40OTUgMjIuNjg5OCAxNTQuNzk4IDI0LjYxOTJDMTU0Ljc5MiAyNC42MjM3IDE1NC43NzggMjQuNjMyMyAxNTQuNzU5IDI0LjY0NUMxNTQuNDM2IDI0Ljg1NDggMTUyLjM5IDI2LjE4NzEgMTUyLjQxNCAyOC44MTY5QzE1Mi40MzkgMzEuOTQ5OSAxNTQuOTg4IDMzLjExODMgMTU1LjMyMiAzMy4yNzExQzE1NS4zNDQgMzMuMjgxMSAxNTUuMzU2IDMzLjI4NjcgMTU1LjM1OCAzMy4yODgzQzE1NS4zNTYgMzMuMjkyNiAxNTUuMzU0IDMzLjMwMSAxNTUuMzUgMzMuMzEzM0MxNTUuMjgzIDMzLjUyODggMTU0Ljg0NSAzNC45NDg5IDE1My44NDcgMzYuNDA0QzE1Mi45MjIgMzcuNzU5OCAxNTEuOTcxIDM5LjA4OTUgMTUwLjQ2IDM5LjExNTZDMTQ5Ljc0OSAzOS4xMjgzIDE0OS4yNyAzOC45MjExIDE0OC43NzIgMzguNzA1NEMxNDguMjQ3IDM4LjQ3ODUgMTQ3LjcwMSAzOC4yNDIyIDE0Ni44NCAzOC4yNDIyQzE0NS45NDcgMzguMjQyMiAxNDUuMzc2IDM4LjQ4NDggMTQ0LjgyNiAzOC43MTg0QzE0NC4zNDggMzguOTIxNCAxNDMuODg3IDM5LjExNzQgMTQzLjI0NSAzOS4xNDE3QzE0MS43ODYgMzkuMTkzOCAxNDAuNjc5IDM3LjcwNzcgMTM5Ljc1NCAzNi4zNTE5QzEzNy44NjYgMzMuNjE0MyAxMzYuNDIgMjguNjM0NCAxMzguMzc0IDI1LjI3MUMxMzkuMzI1IDIzLjU4OTMgMTQxLjA1NyAyMi41MzM0IDE0Mi45MTkgMjIuNTA3M0MxNDMuNzMyIDIyLjQ5MjUgMTQ0LjUwNyAyMi44MDA2IDE0NS4xODQgMjMuMDcwMUMxNDUuNzAyIDIzLjI3NTggMTQ2LjE2MiAyMy40NTg5IDE0Ni41NCAyMy40NTg5QzE0Ni44NzcgMjMuNDU4OSAxNDcuMzE5IDIzLjI4NTEgMTQ3Ljg0MSAyMy4wNzk3WiIgZmlsbD0iYmxhY2siLz4NCjxwYXRoIGQ9Ik0zNi44NTg3IDM3LjUyNDFIMzEuOTg3NEwzNS4wMzQyIDE5LjY2NjhIMzkuOTA1MkwzNi44NTg3IDM3LjUyNDFaIiBmaWxsPSIjMDA1NzlGIi8+DQo8cGF0aCBkPSJNNTQuNTE1NyAyMC4xMDQxQzUzLjU1NDkgMTkuNzQyOCA1Mi4wMzA5IDE5LjM0MzggNTAuMTQ2NiAxOS4zNDM4QzQ1LjMzNjEgMTkuMzQzOCA0MS45NDg2IDIxLjc3NTMgNDEuOTI3OCAyNS4yNTE2QzQxLjg4NzggMjcuODE2NSA0NC4zNTMxIDI5LjI0MSA0Ni4xOTcgMzAuMDk2MkM0OC4wODE2IDMwLjk3MDEgNDguNzIyMyAzMS41NDA1IDQ4LjcyMjMgMzIuMzE5NEM0OC43MDMxIDMzLjUxNTcgNDcuMTk5NCAzNC4wNjcyIDQ1Ljc5NjkgMzQuMDY3MkM0My44NTIxIDM0LjA2NzIgNDIuODEgMzMuNzgyOSA0MS4yMjY0IDMzLjExNzNMNDAuNTg1IDMyLjgzMkwzOS45MDMzIDM2Ljg0MDZDNDEuMDQ1OCAzNy4zMzM5IDQzLjE1MDcgMzcuNzcxNyA0NS4zMzYxIDM3Ljc5MDlDNTAuNDQ3MyAzNy43OTA5IDUzLjc3NDkgMzUuMzk3MSA1My44MTQzIDMxLjY5MjVDNTMuODMzOCAyOS42NTk3IDUyLjUzMiAyOC4xMDIgNDkuNzI1NCAyNi44MjkyQzQ4LjAyMTcgMjYuMDEyMSA0Ni45NzgzIDI1LjQ2MTIgNDYuOTc4MyAyNC42MjUyQzQ2Ljk5ODMgMjMuODY1MiA0Ny44NjA4IDIzLjA4NjggNDkuNzg0IDIzLjA4NjhDNTEuMzY3NyAyMy4wNDg2IDUyLjUzMTIgMjMuNDA5NCA1My40MTI2IDIzLjc3MDVMNTMuODUzMiAyMy45NjAxTDU0LjUxNTcgMjAuMTA0MVoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik02MC45OTI0IDMxLjE5NzlDNjEuMzkzNiAzMC4xNzIgNjIuOTM3MiAyNi4yMDE2IDYyLjkzNzIgMjYuMjAxNkM2Mi45MTcgMjYuMjM5NyA2My4zMzc2IDI1LjE1NjggNjMuNTc4MSAyNC40OTE5TDYzLjkxODYgMjYuMDMwNkM2My45MTg2IDI2LjAzMDYgNjQuODQxIDMwLjMwNTEgNjUuMDQxNCAzMS4xOTc5QzY0LjI4IDMxLjE5NzkgNjEuOTU0NiAzMS4xOTc5IDYwLjk5MjQgMzEuMTk3OVpNNjcuMDA1NCAxOS42NjY4SDYzLjIzNzRDNjIuMDc1NSAxOS42NjY4IDYxLjE5MjcgMTkuOTg5NSA2MC42OTE0IDIxLjE0ODRMNTMuNDU1OCAzNy41MjM5SDU4LjU2NzFDNTguNTY3MSAzNy41MjM5IDU5LjQwODUgMzUuMzE5OSA1OS41ODk0IDM0Ljg0NTJDNjAuMTUwMSAzNC44NDUyIDY1LjEyMjMgMzQuODQ1MiA2NS44NDM3IDM0Ljg0NTJDNjUuOTgzNSAzNS40NzIxIDY2LjQyNDkgMzcuNTIzOSA2Ni40MjQ5IDM3LjUyMzlINzAuOTM1Mkw2Ny4wMDU0IDE5LjY2NjhWMTkuNjY2OFoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik0yNy45MTggMTkuNjY2OEwyMy4xNDc1IDMxLjg0MzhMMjIuNjI2MiAyOS4zNzQxQzIxLjc0NDIgMjYuNTI0NSAxOC45NzgxIDIzLjQyODQgMTUuODkxNCAyMS44ODlMMjAuMjYxIDM3LjUwNTJIMjUuNDEyMkwzMy4wNjkgMTkuNjY2OEgyNy45MThWMTkuNjY2OFoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik0xOC43MTg0IDE5LjY2NjhIMTAuODgxMUwxMC44MDA5IDIwLjAyNzZDMTYuOTE0NSAyMS41MDk1IDIwLjk2MzUgMjUuMDgxNSAyMi42MjcgMjkuMzc0OUwyMC45MjMyIDIxLjE2NzlDMjAuNjQyNyAyMC4wMjc0IDE5Ljc4MDcgMTkuNzA0NCAxOC43MTg0IDE5LjY2NjhaIiBmaWxsPSIjRkFBNjFBIi8+DQo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDJfNThfMTExKSI+DQo8cGF0aCBkPSJNMjIxLjE1OCAxNy40OTlWMTguOTM1NkgyMzEuMzA2VjE3LjQ5OUgyMjEuMTU4Wk0yMzIuNzQ0IDE3LjQ5OVYxOC45MzU2SDI0Ny4yMDZDMjQ3LjIwNiAxOC45MzU2IDI0NS43MjkgMTcuNDk5IDI0My43NzMgMTcuNDk5SDIzMi43NDRaTTI1MC4wNDMgMTcuNDk5VjE4LjkzNTZIMjU4Ljc5M0wyNTguMjczIDE3LjQ5OUgyNTAuMDQzWk0yNjUuMDY1IDE3LjQ5OUwyNjQuNTQ2IDE4LjkzNTZIMjczLjIxNlYxNy40OTlIMjY1LjA2NVpNMjIxLjE1OCAyMC4yOTI5VjIxLjcyOTZIMjMxLjMwNlYyMC4yOTI5SDIyMS4xNThaTTIzMi43NDQgMjAuMjk1VjIxLjcyOTdIMjQ4Ljg4NEMyNDguODg0IDIxLjcyOTcgMjQ4LjY5NiAyMC42MjM5IDI0OC4zNjcgMjAuMjk1SDIzMi43NDRaTTI1MC4wNDMgMjAuMjk1VjIxLjcyOTdIMjU5Ljc1MkwyNTkuMjcxIDIwLjI5NUgyNTAuMDQzWk0yNjQuMDI3IDIwLjI5NUwyNjMuNTQ2IDIxLjcyOTdIMjczLjIxNlYyMC4yOTVIMjY0LjAyN1YyMC4yOTVaTTIyNC4wNzQgMjMuMDg2OVYyNC41MjU3SDIyOC40NjlWMjMuMDg2OUgyMjQuMDc0VjIzLjA4NjlaTTIzNS42NjEgMjMuMDg2OVYyNC41MjU3SDI0MC4wNTZWMjMuMDg2OUgyMzUuNjYxVjIzLjA4NjlaTTI0NC4zMzEgMjMuMDg2OVYyNC41MjU3SDI0OC43MjZDMjQ4LjcyNiAyNC41MjU3IDI0OS4wMDUgMjMuNzY1OSAyNDkuMDA1IDIzLjA4NjlIMjQ0LjMzMVYyMy4wODY5Wk0yNTIuOTYgMjMuMDg2OVYyNC41MjU3SDI2MC43NTJMMjYwLjIzMiAyMy4wODY5SDI1Mi45NlYyMy4wODY5Wk0yNjMuMDY5IDIzLjA4NjlMMjYyLjU0OCAyNC41MjU3SDI3MC4zNzlWMjMuMDg2OUgyNjMuMDY5VjIzLjA4NjlaTTIyNC4wNzQgMjUuODgzVjI3LjMxOTdIMjI4LjQ2OVYyNS44ODNIMjI0LjA3NFYyNS44ODNaTTIzNS42NjEgMjUuODgzVjI3LjMxOTdIMjQ2Ljg4N0MyNDYuODg3IDI3LjMxOTcgMjQ3LjgyNiAyNi41ODI1IDI0OC4xMjUgMjUuODgzSDIzNS42NjFaTTI1Mi45NiAyNS44ODNWMjcuMzE5N0gyNTcuMzU1VjI2LjUyTDI1Ny42MzQgMjcuMzE5N0gyNjUuNjg0TDI2NS45ODQgMjYuNTJWMjcuMzE5N0gyNzAuMzc5VjI1Ljg4M0gyNjIuMTI5TDI2MS42OTEgMjcuMDk5OUwyNjEuMjUxIDI1Ljg4M0gyNTIuOTZaTTIyNC4wNzQgMjguNjc3VjMwLjExMzdIMjI4LjQ2OVYyOC42NzdIMjI0LjA3NFpNMjM1LjY2MSAyOC42NzdWMzAuMTEzN0gyNDguMTI1QzI0Ny44MjYgMjkuNDE2NSAyNDYuODg3IDI4LjY3NyAyNDYuODg3IDI4LjY3N0gyMzUuNjYxWk0yNTIuOTYgMjguNjc3VjMwLjExMzdIMjU3LjM1NVYyOC42NzdIMjUyLjk2Wk0yNTguMTUzIDI4LjY3N0wyNTguNjg1IDMwLjExMzdIMjY0LjcyMUwyNjUuMjI2IDI4LjY3N0gyNTguMTUzWk0yNjUuOTg0IDI4LjY3N1YzMC4xMTM3SDI3MC4zNzlWMjguNjc3SDI2NS45ODRaTTIyNC4wNzQgMzEuNDcxVjMyLjkwNzZIMjI4LjQ2OVYzMS40NzFIMjI0LjA3NFpNMjM1LjY2MSAzMS40NzFWMzIuOTA3NkgyNDAuMDU2VjMxLjQ3MUgyMzUuNjYxWk0yNDQuMzMxIDMxLjQ3MVYzMi45MDc2SDI0OS4wMDVDMjQ5LjAwNSAzMi4yMjk2IDI0OC43MjYgMzEuNDcxIDI0OC43MjYgMzEuNDcxSDI0NC4zMzFWMzEuNDcxWk0yNTIuOTYgMzEuNDcxVjMyLjkwNzZIMjU3LjM1NVYzMS40NzFIMjUyLjk2Wk0yNTkuMTUxIDMxLjQ3MUwyNTkuNjY2IDMyLjkwNzZIMjYzLjcxM0wyNjQuMjMyIDMxLjQ3MUgyNTkuMTUxWk0yNjUuOTg0IDMxLjQ3MVYzMi45MDc2SDI3MC4zNzlWMzEuNDcxSDI2NS45ODRaTTIyMS4yMzcgMzQuMjY1VjM1LjcwMzdIMjMxLjM4NlYzNC4yNjVIMjIxLjIzN1pNMjMyLjc0NCAzNC4yNjVWMzUuNzAzN0gyNDguMzY3QzI0OC42OTYgMzUuMzc0MyAyNDguODg0IDM0LjI2NSAyNDguODg0IDM0LjI2NUgyMzIuNzQ0VjM0LjI2NVpNMjUwLjEyMyAzNC4yNjVWMzUuNzAzN0gyNTcuMzU1VjM0LjI2NUgyNTAuMTIzWk0yNjAuMTUxIDM0LjI2NUwyNjAuNjggMzUuNzAzN0gyNjIuNzM5TDI2My4yMzYgMzQuMjY1SDI2MC4xNTFaTTI2NS45ODQgMzQuMjY1VjM1LjcwMzdIMjczLjI5NVYzNC4yNjVIMjY1Ljk4NFpNMjIxLjIzNyAzNy4wNjFWMzguNDk3N0gyMzEuMzg2VjM3LjA2MUgyMjEuMjM3Wk0yMzIuNzQ0IDM3LjA2MVYzOC40OTU2SDI0My43NzNDMjQ1LjcyOSAzOC40OTU2IDI0Ny4yMDYgMzcuMDYxIDI0Ny4yMDYgMzcuMDYxSDIzMi43NDRaTTI1MC4xMjMgMzcuMDYxVjM4LjQ5NzdIMjU3LjM1NVYzNy4wNjFIMjUwLjEyM1pNMjYxLjE1NSAzNy4wNjFMMjYxLjY2NCAzOC40OTM2TDI2MS43NTIgMzguNDk1NkwyNjIuMjY5IDM3LjA2MUgyNjEuMTU1VjM3LjA2MVpNMjY1Ljk4NCAzNy4wNjFWMzguNDk3N0gyNzMuMjk1VjM3LjA2MUgyNjUuOTg0WiIgZmlsbD0iIzFGNzBDMSIvPg0KPC9nPg0KPGRlZnM+DQo8Y2xpcFBhdGggaWQ9ImNsaXAwXzU4XzExMSI+DQo8cmVjdCB3aWR0aD0iNDQuNDQ3MyIgaGVpZ2h0PSIyOS42MzE1IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUzLjk1NSAxNC44MTU1KSIvPg0KPC9jbGlwUGF0aD4NCjxjbGlwUGF0aCBpZD0iY2xpcDFfNThfMTExIj4NCjxyZWN0IHdpZHRoPSI3Ni41NDgxIiBoZWlnaHQ9IjE2LjM1MDciIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MjUuNTk5IDIwLjk4ODkpIi8+DQo8L2NsaXBQYXRoPg0KPGNsaXBQYXRoIGlkPSJjbGlwMl81OF8xMTEiPg0KPHJlY3Qgd2lkdGg9IjUyLjEzNzIiIGhlaWdodD0iMjAuOTk4NyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMS4xNTggMTcuNDk5KSIvPg0KPC9jbGlwUGF0aD4NCjwvZGVmcz4NCjwvc3ZnPg0K\\\" style=\\\"\\n width: 742.5px;\\n position: relative;\\n top: 107px;\\n left: 32px;\\n \\\">\\n <a href=\" + accountURL + \" style=\\\"\\n float: left;\\n border-radius: 56px;\\n background: #0D6EFD;\\n padding-top: 8px;\\n width: 280px;\\n height: 38px;\\n text-align: center;\\n position: relative;\\n top: 127px;\\n left: 274px;\\n font-size: 16px;\\n color: white;\\n text-decoration: none;\\n letter-spacing: 0.02em;\\n \\\">Claim your FREE account</a>\\n <div style=\\\"\\n font-size: 14px;\\n position: relative;\\n top: 180px;\\n left: 19px;\\n letter-spacing: 0.02em;\\n font-weight: 500;\\n line-height: 125%;\\n\\\">have a Syncfusion account? <a href=\\\"https://www.syncfusion.com/account/login?ReturnUrl=/account/login\\\" style=\\\"text-decoration: none;\\ncolor: #0D6EFD;\\nfont-weight: 500;\\\">Sign In</a></div>\\n </div>\\n </div>\";\n if (typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n var errorBackground = createElement('div', {\n innerHTML: bannerTemplate\n });\n document.body.appendChild(errorBackground);\n }\n};\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 { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, isBlazor } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass, select } from './dom';\nimport { validateLicense, createLicenseOverlay, componentList } from './validate-lic';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n// Decalre the static variable to count the instance\nvar instancecount = 0;\n// Decalre the static variable to find if control limit exceed or not\nvar isvalid = true;\n// We have added styles to inline type so here declare the static variable to detect if banner is added or not\nvar isBannerAdded = false;\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\nexport function enableVersionBasedPersistence(status) {\n versionBasedStatePersistence = status;\n}\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n *\n * @param {Object} options ?\n * @param {string} selector ?\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n /**\n * string template option for Blazor template rendering\n *\n * @private\n */\n _this.isStringTemplate = false;\n _this.needsID = false;\n _this.isReactHybrid = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n // Based on the considered control list we have count the instance\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\" && !validateLicense()) {\n if (componentList.indexOf(_this.getModuleName()) !== -1) {\n instancecount = instancecount + 1;\n if (instancecount > 5) {\n isvalid = false;\n }\n }\n }\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n /**\n * Destroys the sub modules while destroying the widget\n *\n * @returns {void} ?\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n removeClass([this.element], ['e-control']);\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n *\n * @returns {void} ?\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n Component.prototype.accessMount = function () {\n if (this.mount && !this.isReactHybrid) {\n this.mount();\n }\n };\n /**\n * Returns the route element of the component\n *\n * @returns {HTMLElement} ?\n */\n Component.prototype.getRootElement = function () {\n if (this.isReactHybrid) {\n // eslint-disable-next-line\n return this.actualElement;\n }\n else {\n return this.element;\n }\n };\n /**\n * Returns the persistence data for component\n *\n * @returns {any} ?\n */\n // eslint-disable-next-line\n Component.prototype.getLocalData = function () {\n var eleId = this.getModuleName() + this.element.id;\n if (versionBasedStatePersistence) {\n return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n }\n else {\n return window.localStorage.getItem(eleId);\n }\n };\n /**\n * Appends the control within the given HTML element\n *\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n * @returns {void} ?\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = select(selector, document);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n // Checked weather cases are valid or not. If control leads to more than five counts \n if (!isvalid && !isBannerAdded) {\n createLicenseOverlay();\n isBannerAdded = true;\n }\n this.render();\n if (!this.mount) {\n this.trigger('created');\n }\n else {\n this.accessMount();\n }\n }\n };\n /**\n * It is used to process the post rendering functionalities to a component.\n *\n * @param {Node} wrapperElement ?\n * @returns {void} ?\n */\n Component.prototype.renderComplete = function (wrapperElement) {\n if (isBlazor()) {\n var sfBlazor = 'sfBlazor';\n // eslint-disable-next-line\n window[sfBlazor].renderComplete(this.element, wrapperElement);\n }\n this.isRendered = true;\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n *\n * @returns {void} ?\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @returns {void} ?\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n *\n * @returns {Function} ?\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @param {Function} moduleList ?\n * @returns {void} ?\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[parseInt(i.toString(), 10)]) === -1) {\n this.prototype.injectedModules.push(moduleList[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * This is a instance method to create an element.\n *\n * @param {string} tagName ?\n * @param {ElementProperties} prop ?\n * @param {boolean} isVDOM ?\n * @returns {any} ?\n * @private\n */\n // eslint-disable-next-line\n Component.prototype.createElement = function (tagName, prop, isVDOM) {\n return createElement(tagName, prop);\n };\n /**\n *\n * @param {Function} handler - handler to be triggered after state Updated.\n * @param {any} argument - Arguments to be passed to caller.\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n // eslint-disable-next-line\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n // tslint: enable: no-any\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.detectFunction = function (args) {\n var prop = Object.keys(args);\n if (prop.length) {\n this[prop[0]] = args[prop[0]];\n }\n };\n Component.prototype.mergePersistData = function () {\n var data;\n if (versionBasedStatePersistence) {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n }\n else {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n }\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n if (versionBasedStatePersistence) {\n window.localStorage.setItem(this.getModuleName() +\n this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n }\n else {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n }\n };\n // eslint-disable-next-line\n Component.prototype.renderReactTemplates = function (callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\n // eslint-disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n // eslint-disable-next-line\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // eslint-disable-next-line\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n var regExp = RegExp;\n return new regExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[\"\" + key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[\"\" + key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection\n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(/if|/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s-+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\nvar SINGLE_SLASH = /\\\\/gi;\nvar DOUBLE_SLASH = /\\\\\\\\/gi;\nvar WORDFUNC = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar WINDOWFUNC = /\\window\\./gm;\n/**\n * The function to set regular expression for template expression string.\n *\n * @param {RegExp} value - Value expression.\n * @returns {RegExp} ?\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n *\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper - Helper functions as an object.\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n * @private\n */\nexport function compile(template, helper, ignorePrefix) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\n // eslint-disable-next-line\n var condtion = \"var valueRegEx = (/value=\\\\'([A-Za-z0-9 _]*)((.)([\\\\w)(!-;?-\\u25A0\\\\s]+)['])/g);\\n var hrefRegex = (/(?:href)([\\\\s='\\\"./]+)([\\\\w-./?=&\\\\\\\\#\\\"]+)((.)([\\\\w)(!-;/?-\\u25A0\\\\s]+)['])/g);\\n if(str.match(valueRegEx)){\\n var check = str.match(valueRegEx);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(valueRegEx)[i].split('value=')[1];\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n str = str.replace(str, str1);\\n }\\n else if (str.match(/(?:href='')/) === null) {\\n if(str.match(hrefRegex)) {\\n var check = str.match(hrefRegex);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(hrefRegex)[i].split('href=')[1];\\n if (check1) {\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n }\\n str = str.replace(str, str1);\\n }\\n }\\n \";\n var fnCode = 'var str=\\\"' + evalExpResult + '\\\";' + condtion + ' return str;';\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n/** function used to evaluate the function expression\n *\n * @param {string} str ?\n * @param {string} nameSpace ?\n * @param {Object} helper ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction evalExp(str, nameSpace, helper, ignorePrefix) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n var isClass = str.match(/class=\"([^\"]+|)\\s{2}/g);\n var singleSpace = '';\n if (isClass) {\n isClass.forEach(function (value) {\n singleSpace = value.replace(/\\s\\s+/g, ' ');\n str = str.replace(value, singleSpace);\n });\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, \n // eslint-disable-next-line\n function (match, cnt, offset, matchStr) {\n var SPECIAL_CHAR = /@|#|\\$/gm;\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n // eslint-disable-next-line\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n // eslint-disable-next-line\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n var ftArray = matches[1].split(',');\n if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n }\n var splRegexp = /@|\\$|#/gm;\n var arrObj = /\\]\\./gm;\n if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n var splArrRegexp = /@|\\$|#|\\]\\./gm;\n if (splArrRegexp.test(cnt)) {\n // tslint:disable-next-line\n cnt = '\"+ ' + (fNameSpace === 'global' ? '' : fNameSpace) + cnt.replace(matches[1], rlStr.replace(WORDFUNC, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '+ \"';\n }\n }\n else {\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys, ignorePrefix)) +\n '+\"';\n }\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n // handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n // eslint-disable-next-line\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition\n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else if (SPECIAL_CHAR.test(cnt)) {\n // template string with double slash with special character\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n }\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // template string with double slash\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = cnt !== '' ? '\"+' + addNameSpace(cnt.replace(/,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys, ignorePrefix) + '+\"' : ' ';\n }\n }\n return cnt;\n });\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, ignorePrefix) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1 && !ignorePrefix) ? nameSpace + '.' + str : str);\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n var arrObjReg = /^\\..*/gm;\n return ((addNS && !(NOT_NUMBER.test(str)) &&\n ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n// eslint-disable-next-line\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n // eslint-disable-next-line\n tempStr = tempStr;\n }\n else {\n tempStr = tempStr.replace(SINGLE_SLASH, double);\n }\n return tempStr;\n}\n/**\n *\n * @param {string} str ?\n * @param {string} nameSpaceNew ?\n * @param {string[]} keys ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, ignorePrefix) {\n str = str.trim();\n var windowFunc = /\\window\\./gm;\n if (!windowFunc.test(str)) {\n var quotes = /'|\"/gm;\n var splRegexp = /@|\\$|#/gm;\n if (splRegexp.test(str)) {\n str = NameSpaceForspecialChar(str, (keys.indexOf(str) === -1), nameSpaceNew, keys) + '\"]';\n }\n if (ARR_OBJ.test(str)) {\n return NameSpaceArrObj(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys);\n }\n else {\n return addNameSpace(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys, ignorePrefix);\n }\n }\n else {\n return str;\n }\n}\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined, isBlazor } from './util';\nvar HAS_ROW = /^[\\n\\r.]+<tr|^<tr/;\nvar HAS_SVG = /^[\\n\\r.]+<svg|^<path|^<g/;\nexport var blazorTemplates = {};\n/**\n *\n * @returns {string} ?\n */\nexport function getRandomId() {\n return '-' + Math.random().toString(36).substr(2, 5);\n}\n/**\n * Compile the template string into template function.\n *\n * @param {string} templateString - The template string which is going to convert.\n * @param {Object} helper - Helper functions as an object.\n * @param {boolean} ignorePrefix ?\n * @returns {NodeList} ?\n * @private\n */\n// eslint-disable-next-line\nexport function compile(templateString, helper, ignorePrefix) {\n var compiler = engineObj.compile(templateString, helper, ignorePrefix);\n // eslint-disable-next-line\n return function (data, component, propName, templateId, isStringTemplate, index, element, root) {\n var result = compiler(data, component, propName, element, root);\n var blazorTemplateId = 'BlazorTemplateId';\n if (isBlazor() && !isStringTemplate) {\n var randomId = getRandomId();\n var blazorId = templateId + randomId;\n if (!blazorTemplates[\"\" + templateId]) {\n blazorTemplates[\"\" + templateId] = [];\n }\n if (!isNullOrUndefined(index)) {\n var keys = Object.keys(blazorTemplates[\"\" + templateId][parseInt(index.toString(), 10)]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key !== blazorTemplateId && data[\"\" + key]) {\n blazorTemplates[\"\" + templateId][parseInt(index.toString(), 10)][\"\" + key] = data[\"\" + key];\n }\n if (key === blazorTemplateId) {\n blazorId = blazorTemplates[\"\" + templateId][parseInt(index.toString(), 10)][\"\" + key];\n }\n }\n }\n else {\n data[\"\" + blazorTemplateId] = blazorId;\n blazorTemplates[\"\" + templateId].push(data);\n }\n // eslint-disable-next-line\n return propName === 'rowTemplate' ? [createElement('tr', { id: blazorId, className: 'e-blazor-template' })] :\n // eslint-disable-next-line\n [createElement('div', { id: blazorId, className: 'e-blazor-template' })];\n }\n if (typeof result === 'string') {\n if (HAS_SVG.test(result)) {\n var ele = createElement('svg', { innerHTML: result });\n return ele.childNodes;\n }\n else {\n var ele = createElement((HAS_ROW.test(result) ? 'table' : 'div'), { innerHTML: result });\n return ele.childNodes;\n }\n }\n else {\n return result;\n }\n };\n}\n/**\n *\n * @param {string} templateId ?\n * @param {string} templateName ?\n * @param {string} comp ?\n * @param {boolean} isEmpty ?\n * @param {Function} callBack ?\n * @returns {void} ?\n */\nexport function updateBlazorTemplate(templateId, templateName, comp, isEmpty, callBack) {\n if (isBlazor()) {\n var ejsIntrop = 'sfBlazor';\n window[\"\" + ejsIntrop].updateTemplate(templateName, blazorTemplates[\"\" + templateId], templateId, comp, callBack);\n if (isEmpty !== false) {\n blazorTemplates[\"\" + templateId] = [];\n }\n }\n}\n/**\n *\n * @param {string} templateId ?\n * @param {string} templateName ?\n * @param {number} index ?\n * @returns {void} ?\n */\nexport function resetBlazorTemplate(templateId, templateName, index) {\n var templateDiv = document.getElementById(templateId);\n if (templateDiv) {\n // eslint-disable-next-line\n var innerTemplates = templateDiv.getElementsByClassName('blazor-inner-template');\n for (var i = 0; i < innerTemplates.length; i++) {\n var tempId = ' ';\n if (!isNullOrUndefined(index)) {\n tempId = innerTemplates[parseInt(index.toString(), 10)].getAttribute('data-templateId');\n }\n else {\n tempId = innerTemplates[parseInt(i.toString(), 10)].getAttribute('data-templateId');\n }\n var tempElement = document.getElementById(tempId);\n if (tempElement) {\n var length_1 = tempElement.childNodes.length;\n for (var j = 0; j < length_1; j++) {\n if (!isNullOrUndefined(index)) {\n innerTemplates[parseInt(index.toString(), 10)].appendChild(tempElement.childNodes[0]);\n i = innerTemplates.length;\n }\n else {\n innerTemplates[parseInt(i.toString(), 10)].appendChild(tempElement.childNodes[0]);\n }\n }\n }\n }\n }\n}\n/**\n * Set your custom template engine for template rendering.\n *\n * @param {ITemplateEngine} classObj - Class object for custom template.\n * @returns {void} ?\n * @private\n */\nexport function setTemplateEngine(classObj) {\n engineObj.compile = classObj.compile;\n}\n/**\n * Get current template engine for template rendering\n *\n * @returns {string} ?\n * @private\n */\nexport function getTemplateEngine() {\n return engineObj.compile;\n}\n//Default Engine Class\nvar Engine = /** @class */ (function () {\n function Engine() {\n }\n // eslint-disable-next-line\n Engine.prototype.compile = function (templateString, helper, ignorePrefix) {\n if (helper === void 0) { helper = {}; }\n return render(templateString, helper);\n };\n return Engine;\n}());\nvar engineObj = { compile: new Engine().compile };\n","/***\n * Hijri parser\n */\n// eslint-disable-next-line\nexport var HijriParser;\n(function (HijriParser) {\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990,\n 29019, 29049, 29078, 29108, 29137, 29167, 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522,\n 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759, 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053,\n 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348, 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585,\n 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939, 30968, 30998, 31027, 31057, 31086, 31116,\n 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530, 31559, 31589, 31618, 31648,\n 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120, 32150, 32180,\n 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243,\n 33272, 33302, 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775,\n 33804, 33834, 33863, 33893, 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306,\n 34336, 34365, 34395, 34424, 34454, 34483, 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837,\n 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074, 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370,\n 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665, 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901,\n 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254, 36284, 36314, 36343, 36373, 36403, 36433,\n 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845, 36875, 36904, 36934, 36963,\n 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436, 37465, 37495,\n 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558,\n 38587, 38617, 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089,\n 39118, 39148, 39178, 39208, 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621,\n 39650, 39680, 39709, 39739, 39768, 39798, 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153,\n 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389, 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685,\n 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980, 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216,\n 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570, 41599, 41629, 41658, 41688, 41718, 41748,\n 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161, 42190, 42220, 42249, 42279,\n 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751, 42780, 42810,\n 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873,\n 43903, 43932, 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405,\n 44434, 44464, 44493, 44523, 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936,\n 44966, 44996, 45025, 45055, 45084, 45114, 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468,\n 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704, 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999,\n 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295, 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531,\n 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885, 46915, 46944, 46974, 47003, 47033, 47063,\n 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476, 47506, 47535, 47565, 47594,\n 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066, 48096, 48125,\n 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189,\n 49218, 49248, 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720,\n 49749, 49779, 49809, 49838, 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252,\n 50281, 50311, 50340, 50370, 50400, 50429, 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784,\n 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019, 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315,\n 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611, 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846,\n 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200, 52230, 52260, 52290, 52319, 52349, 52379,\n 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792, 52822, 52851, 52881, 52910,\n 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383, 53412, 53441,\n 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505,\n 54535, 54564, 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036,\n 55066, 55095, 55125, 55154, 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567,\n 55597, 55627, 55657, 55686, 55716, 55745, 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100,\n 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335, 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631,\n 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926, 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162,\n 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517, 57546, 57576, 57605, 57634, 57664, 57694,\n 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107, 58137, 58167, 58196, 58226,\n 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698, 58727, 58757,\n 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820,\n 59850, 59879, 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352,\n 60381, 60411, 60440, 60469, 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883,\n 60912, 60942, 60972, 61002, 61031, 61061, 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415,\n 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651, 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947,\n 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242, 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478,\n 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832, 62862, 62891, 62921, 62950, 62980, 63009,\n 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423, 63453, 63482, 63512, 63541,\n 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014, 64043, 64073,\n 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136,\n 65166, 65195, 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667,\n 65697, 65726, 65755, 65785, 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199,\n 66228, 66258, 66287, 66317, 66346, 66376, 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730,\n 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967, 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262,\n 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557, 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793,\n 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148, 68177, 68207, 68236, 68266, 68295, 68325,\n 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738, 68768, 68797, 68827, 68857,\n 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330, 69359, 69388,\n 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451,\n 70481, 70510, 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983,\n 71013, 71042, 71071, 71101, 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514,\n 71543, 71573, 71602, 71632, 71662, 71691, 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046,\n 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282, 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577,\n 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872, 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109,\n 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464, 73493, 73523, 73552, 73581, 73611, 73640,\n 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053, 74083, 74113, 74142, 74172,\n 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645, 74675, 74704,\n 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766,\n 75796, 75826, 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299,\n 76328, 76358, 76387, 76416, 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830,\n 76859, 76889, 76918, 76948, 76977, 77007, 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361,\n 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598, 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893,\n 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188, 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425,\n 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779, 78808, 78838, 78867, 78897, 78926, 78956,\n 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369, 79399, 79428, 79458, 79487,\n 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960, 79990\n ];\n /**\n *\n * @param {Date} gDate ?\n * @returns {Object} ?\n */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100.);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631. / 30.;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[parseInt(i.toString(), 10)] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n /**\n *\n * @param {number} year ?\n * @param {number} month ?\n * @param {number} day ?\n * @returns {Date} ?\n */\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue, isBlazor } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined, extend } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|K|cccc|ccc|WW|W|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n f: 'getMilliseconds'\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era',\n 'f': 'milliseconds'\n};\nvar timeSeparator = 'timeSeparator';\n/* tslint:disable no-any */\n/**\n * Date Format is a framework provides support for date formatting.\n *\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which date will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numObject = getValue('parserObject.numbers', dependable);\n var dateObject = dependable.dateObject;\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n if (isBlazor()) {\n resPattern = resPattern.replace(/tt/, 'a');\n }\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = isBlazor() ?\n extend({}, numObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n switch (char) {\n case 'E':\n case 'c':\n if (isBlazor()) {\n // eslint-disable-next-line\n formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n // eslint-disable-next-line\n formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n }\n break;\n case 'a':\n formatOptions.designator = isBlazor() ?\n getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n break;\n case 'G':\n // eslint-disable-next-line\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n *\n * @param {Date} value ?\n * @param {FormatOptions} options ?\n * @returns {string} ?\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var curvalstr = '';\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n // eslint-disable-next-line\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n // eslint-disable-next-line\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n case 'f':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else if (char === 'f') {\n isNumber = false;\n processNumber = true;\n // eslint-disable-next-line\n curvalstr = value[timeSetter[char]]().toString();\n curvalstr = curvalstr.substring(0, length_1);\n var curlength = curvalstr.length;\n if (length_1 !== curlength) {\n if (length_1 > 3) {\n continue;\n }\n for (var i = 0; i < length_1 - curlength; i++) {\n curvalstr = '0' + curvalstr.toString();\n }\n }\n curstr += curvalstr;\n }\n else {\n // eslint-disable-next-line\n curval = value[timeSetter[char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n // eslint-disable-next-line\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n // eslint-disable-next-line\n ret += options.designator[desig];\n break;\n case 'G':\n // eslint-disable-next-line\n var dec = value.getFullYear() < 0 ? 0 : 1;\n // eslint-disable-next-line\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n // eslint-disable-next-line\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/'/g, '');\n break;\n case 'z':\n // eslint-disable-next-line\n var timezone = value.getTimezoneOffset();\n // eslint-disable-next-line\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n // eslint-disable-next-line\n ret += options.numMapper.numberSymbols[timeSeparator];\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n case 'W':\n isNumber = true;\n curval = base.getWeekOfYear(value);\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n DateFormat.getCurrentDateValue = function (value, isIslamic) {\n if (isIslamic) {\n return HijriParser.getHijriDate(value);\n }\n return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n };\n /**\n * Returns two digit numbers for given value and length\n *\n * @param {number} val ?\n * @param {number} len ?\n * @returns {string} ?\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n *\n * @param {number} tVal ?\n * @param {string} pattern ?\n * @returns {string} ?\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","import { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits'\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n *\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n var numObject = dependable.numericObject;\n dOptions.numberMapper = isBlazor() ? extend({}, numObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + percentSign];\n dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n if (!isBlazor()) {\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n }\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency && !isBlazor()) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n if (!isBlazor()) {\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n }\n else {\n cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n if (fOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n }\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n *\n * @param {string} pattern ?\n * @returns {GroupDetails} ?\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n *\n * @param {number} val1 ?\n * @param {number} val2 ?\n * @param {boolean} checkbothExist ?\n * @param {boolean} isFraction ?\n * @returns {boolean} ?\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n // eslint-disable-next-line\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n *\n * @param {number} val ?\n * @param {string} text ?\n * @param {boolean} isFraction ?\n * @returns {void} ?\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n *\n * @param {number} value ?\n * @param {base.GenericFormatOptions} fOptions ?\n * @param {CommonOptions} dOptions ?\n * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n if (dOptions.isCustomFormat && curData.minimumFractionDigits < curData.maximumFractionDigits\n && /\\d+\\.\\d+/.test(fValue)) {\n var temp = fValue.split('.');\n var decimalPart = temp[1];\n var len = decimalPart.length;\n for (var i = len - 1; i >= 0; i--) {\n if (decimalPart[\"\" + i] === '0' && i >= curData.minimumFractionDigits) {\n decimalPart = decimalPart.slice(0, i);\n }\n else {\n break;\n }\n }\n fValue = temp[0] + '.' + decimalPart;\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n fValue = curData.format === \"#,###,,;(#,###,,)\" ? this.customPivotFormat(parseInt(fValue)) : fValue;\n if (curData.useGrouping) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @returns {string} ?\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n *\n * @param {string} val ?\n * @param {number} level1 ?\n * @param {string} sep ?\n * @param {string} decimalSymbol ?\n * @param {number} level2 ?\n * @returns {string} ?\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @returns {string} ?\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n *\n * @param {string} value ?\n * @param {number} min ?\n * @returns {string} ?\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n /**\n * Returns custom format for pivot table\n *\n * @param {number} value ?\n */\n NumberFormat.customPivotFormat = function (value) {\n if (value >= 500000) {\n value /= 1000000;\n var _a = value.toString().split(\".\"), integer = _a[0], decimal = _a[1];\n return decimal && +decimal.substring(0, 1) >= 5\n ? Math.ceil(value).toString()\n : Math.floor(value).toString();\n }\n return \"\";\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined, isBlazor } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar standalone = 'stand-alone';\nvar latnRegex = /^[0-9]*$/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth',\n milliseconds: 'setMilliseconds'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n *\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which string date will be parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), false, isBlazor());\n var parseOptions = {};\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {}, culture: culture };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n // eslint-disable-next-line\n var numMapper = isBlazor() ? dependable.parserObject.numbers :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[parseInt(i.toString(), 10)];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n // eslint-disable-next-line\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // eslint-disable-next-line\n var weekData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n var weekObject = parser.reverseObject(weekData);\n // tslint:enable\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n case 'f':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n var monthData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(monthData);\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else if (char === 'f') {\n if (len > 3) {\n continue;\n }\n isNumber = true;\n regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'W':\n // eslint-disable-next-line\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n // eslint-disable-next-line\n var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(periodValur);\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n // eslint-disable-next-line\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n // eslint-disable-next-line\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n // eslint-disable-next-line\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n // eslint-disable-next-line\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n // eslint-disable-next-line\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n // eslint-disable-next-line\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[\"\" + charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n var regExp = RegExp;\n parseOptions.parserRegex = new regExp('^' + regexString + '$', 'i');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n if (parseOptions.isIslamic) {\n var dobj = {};\n var tYear = parsedDateParts.year;\n var tDate = parsedDateParts.day;\n var tMonth = parsedDateParts.month;\n var ystrig = tYear ? (tYear + '') : '';\n var is2DigitYear = (ystrig.length === 2);\n if (!tYear || !tMonth || !tDate || is2DigitYear) {\n dobj = HijriParser.getHijriDate(new Date());\n }\n if (is2DigitYear) {\n tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n }\n // tslint:disable-next-line\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /* tslint:disable */\n /**\n * Returns date object for provided date options\n *\n * @param {DateParts} options ?\n * @param {Date} value ?\n * @returns {Date} ?\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'milliseconds', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n // eslint-disable-next-line\n var tValue = options[key];\n if (isUndefined(tValue) && key === 'day') {\n res.setDate(1);\n }\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n // eslint-disable-next-line\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n // eslint-disable-next-line\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n *\n * @param {string} value ?\n * @param {ParseOptions} parseOptions ?\n * @param {NumericOptions} num ?\n * @returns {DateParts} ?\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[\"\" + prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n // eslint-disable-next-line\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[\"\" + prop] = val;\n }\n }\n else {\n // eslint-disable-next-line\n matchString = ((prop === 'month') && (!parseOptions.isIslamic) && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US'))\n ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n // eslint-disable-next-line\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n *\n * @param {string} value ?\n * @param {NumericOptions} option ?\n * @returns {number} ?\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n *\n * @param {string} hourFormat ?\n * @param {base.TimeZoneOptions} tZone ?\n * @param {string} nRegex ?\n * @returns {string} ?\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n // eslint-disable-next-line\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n *\n * @param {boolean} flag ?\n * @param {string} val1 ?\n * @param {string} val2 ?\n * @param {NumericOptions} num ?\n * @returns {number} ?\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar regExp = RegExp;\nvar parseRegex = new regExp('^([^0-9]*)' + '(([0-9,]*[0-9]+)(\\.[0-9]+)?)' + '([Ee][+-]?[0-9]+)?([^0-9]*)$');\nvar groupRegex = /,/g;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n *\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n if (!parseOptions.fractionDigits) {\n if (option.maximumFractionDigits) {\n parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n }\n }\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n var numbers = getValue('numbers', dependable.parserObject);\n // eslint-disable-next-line\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // eslint-disable-next-line\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern;\n if (!isBlazor()) {\n symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n }\n else {\n parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n if (parseOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n }\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n *\n * @param {string} value ?\n * @param {NumericParts} options ?\n * @param {NumericOptions} numOptions ?\n * @returns {number} ?\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n value = value.indexOf('-') !== -1 ? value.replace('-.', '-0.') : value;\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (options.maximumFractionDigits) {\n ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n var decimalSplitValue = value.split('.');\n if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n ret = +(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));\n }\n return ret;\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","import { isNullOrUndefined, getValue, extend, isBlazor } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n /**\n * To attach handler for given property in current context.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @returns {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[\"\" + property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[\"\" + property], handler)) {\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @returns {void} ?\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[parseInt(i.toString(), 10)].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[parseInt(i.toString(), 10)].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[\"\" + property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it was failure to call.\n * @returns {void} ?\n */\n Observer.prototype.notify = function (property, argument, successHandler, errorHandler) {\n if (this.notExist(property)) {\n if (successHandler) {\n successHandler.call(this, argument);\n }\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var blazor = 'Blazor';\n var curObject = getValue(property, this.boundedEvents).slice(0);\n if (window[\"\" + blazor]) {\n return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\n }\n else {\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n if (successHandler) {\n successHandler.call(this, argument);\n }\n }\n };\n Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n var _this = this;\n var isTrigger = index === objs.length - 1;\n if (index < objs.length) {\n var obj_1 = objs[parseInt(index.toString(), 10)];\n var promise = obj_1.handler.call(obj_1.context, argument);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n return promise;\n }\n promise.then(function (data) {\n data = typeof data === 'string' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data;\n extend(argument, argument, data, true);\n if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return _this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }).catch(function (data) {\n if (errorHandler) {\n errorHandler.call(obj_1.context, typeof data === 'string' &&\n _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n }\n });\n }\n else if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }\n };\n // eslint-disable-next-line\n Observer.prototype.dateReviver = function (key, value) {\n var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n return (new Date(value));\n }\n return (value);\n };\n Observer.prototype.isJson = function (value) {\n try {\n JSON.parse(value);\n }\n catch (e) {\n return false;\n }\n return true;\n };\n /**\n * To destroy handlers in the event\n *\n * @returns {void} ?\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n // eslint-disable-next-line\n return this.boundedEvents.hasOwnProperty(prop) === false || this.boundedEvents[prop].length <= 0;\n };\n /**\n * Returns if the handler is present.\n *\n * @param {BoundOptions[]} boundedEvents ?\n * @param {Function} handler ?\n * @returns {boolean} ?\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\nvar regExp = RegExp;\nexport var blazorCultureFormats = {\n 'en-US': {\n 'd': 'M/d/y',\n 'D': 'EEEE, MMMM d, y',\n 'f': 'EEEE, MMMM d, y h:mm a',\n 'F': 'EEEE, MMMM d, y h:mm:s a',\n 'g': 'M/d/y h:mm a',\n 'G': 'M/d/yyyy h:mm:ss tt',\n 'm': 'MMMM d',\n 'M': 'MMMM d',\n 'r': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 'R': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 's': 'yyyy\\'-\\'MM\\'-\\'dd\\'T\\'HH\\':\\'mm\\':\\'ss',\n 't': 'h:mm tt',\n 'T': 'h:m:s tt',\n 'u': 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n 'U': 'dddd, MMMM d, yyyy h:mm:ss tt',\n 'y': 'MMMM yyyy',\n 'Y': 'MMMM yyyy'\n }\n};\n/**\n * Date base common constants and function for date parser and formatter.\n */\n// eslint-disable-next-line\nexport var IntlBase;\n(function (IntlBase) {\n /* eslint-disable */\n // tslint:disable-next-line:max-line-length.\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*[0#\\ ]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n IntlBase.dateConverterMapper = /dddd|ddd/ig;\n var defaultFirstDay = 'sun';\n IntlBase.islamicRegex = /^islamic/;\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = new regExp(\"(^[ncpae]{1})([0-1]?[0-9]|20)?$\", \"i\");\n IntlBase.currencyFormatRegex = new regExp(\"(^[ca]{1})([0-1]?[0-9]|20)?$\", \"i\");\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n '1-alt-variant': 'Common Era'\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y'\n }\n }\n },\n 'islamic': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Muh.',\n '2': 'Saf.',\n '3': 'Rab. I',\n '4': 'Rab. II',\n '5': 'Jum. I',\n '6': 'Jum. II',\n '7': 'Raj.',\n '8': 'Sha.',\n '9': 'Ram.',\n '10': 'Shaw.',\n '11': 'Dhuʻl-Q.',\n '12': 'Dhuʻl-H.'\n },\n 'narrow': {\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '10': '10',\n '11': '11',\n '12': '12'\n },\n 'wide': {\n '1': 'Muharram',\n '2': 'Safar',\n '3': 'Rabiʻ I',\n '4': 'Rabiʻ II',\n '5': 'Jumada I',\n '6': 'Jumada II',\n '7': 'Rajab',\n '8': 'Shaʻban',\n '9': 'Ramadan',\n '10': 'Shawwal',\n '11': 'Dhuʻl-Qiʻdah',\n '12': 'Dhuʻl-Hijjah'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'AH'\n },\n 'eraAbbr': {\n '0': 'AH'\n },\n 'eraNarrow': {\n '0': 'AH'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y G',\n 'long': 'MMMM d, y G',\n 'medium': 'MMM d, y G',\n 'short': 'M/d/y GGGGG'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y G',\n 'yyyy': 'y G',\n 'yyyyM': 'M/y GGGGG',\n 'yyyyMd': 'M/d/y GGGGG',\n 'yyyyMEd': 'E, M/d/y GGGGG',\n 'yyyyMMM': 'MMM y G',\n 'yyyyMMMd': 'MMM d, y G',\n 'yyyyMMMEd': 'E, MMM d, y G',\n 'yyyyMMMM': 'MMMM y G',\n 'yyyyQQQ': 'QQQ y G',\n 'yyyyQQQQ': 'QQQQ y G'\n }\n }\n }\n },\n 'timeZoneNames': {\n 'hourFormat': '+HH:mm;-HH:mm',\n 'gmtFormat': 'GMT{0}',\n 'gmtZeroFormat': 'GMT'\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n }\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###'\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n IntlBase.blazorDefaultObject = {\n 'numbers': {\n 'mapper': {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9'\n },\n 'mapperDigits': '0123456789',\n 'numberSymbols': {\n 'decimal': '.',\n 'group': ',',\n 'plusSign': '+',\n 'minusSign': '-',\n 'percentSign': '%',\n 'nan': 'NaN',\n 'timeSeparator': ':',\n 'infinity': '∞'\n },\n 'timeSeparator': ':',\n 'currencySymbol': '$',\n 'currencypData': {\n 'nlead': '$',\n 'nend': '',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentpData': {\n 'nlead': '',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentnData': {\n 'nlead': '-',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'currencynData': {\n 'nlead': '($',\n 'nend': ')',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalnData': {\n 'nlead': '-',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalpData': {\n 'nlead': '',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n }\n },\n 'dates': {\n 'dayPeriods': {\n 'am': 'AM',\n 'pm': 'PM'\n },\n 'dateSeperator': '/',\n 'days': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n },\n 'months': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n },\n 'eras': {\n '1': 'AD'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n *\n * @private\n * @param {string} skeleton ?\n * @param {Object} dateObject ?\n * @param {string} type ?\n * @param {boolean} isIslamic ?\n * @param {string} blazorCulture ?\n * @returns {string} ?\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n var resPattern;\n var iType = type || 'date';\n if (blazorCulture) {\n resPattern = compareBlazorDateFormats({ skeleton: skeleton }, blazorCulture).format ||\n compareBlazorDateFormats({ skeleton: 'd' }, 'en-US').format;\n }\n else {\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n if (isUndefined(resPattern) && skeleton === 'yMd') {\n resPattern = 'M/d/y';\n }\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n *\n * @private\n * @param {Object} cldr ?\n * @param {string} culture ?\n * @param {string} mode ?\n * @param {boolean} isNumber ?\n * @returns {any} ?\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || (isBlazor() ? IntlBase.blazorDefaultObject : IntlBase.defaultObject);\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n var dateString = isBlazor() ? 'dates' : ('dates.calendars.' + calendartype);\n ret.dateObject = getValue(dateString, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n *\n * @private\n * @param {string} type ?\n * @param {string} numSystem ?\n * @param {Object} obj ?\n * @param {boolean} isAccount ?\n * @returns {string} ?\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n *\n * @param {string} format ?\n * @returns {string} ?\n */\n function ConvertDateToWeekFormat(format) {\n var convertMapper = format.match(IntlBase.dateConverterMapper);\n if (convertMapper && isBlazor()) {\n var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n return format.replace(IntlBase.dateConverterMapper, tempString);\n }\n return format;\n }\n IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n /**\n *\n * @param {DateFormatOptions} formatOptions ?\n * @param {string} culture ?\n * @returns {DateFormatOptions} ?\n */\n function compareBlazorDateFormats(formatOptions, culture) {\n var format = formatOptions.format || formatOptions.skeleton;\n var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n if (!curFormatMapper) {\n curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n }\n if (curFormatMapper) {\n curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n }\n return formatOptions;\n }\n IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n /**\n * Returns proper numeric skeleton\n *\n * @private\n * @param {string} skeleton ?\n * @returns {any} ?\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n // eslint-disable-next-line\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n *\n * @private\n * @param {string} pattern ?\n * @param {boolean} needFraction ?\n * @param {string} cSymbol ?\n * @param {boolean} fractionOnly ?\n * @returns {any} ?\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n *\n * @private\n * @param {string} val ?\n * @param {string} sym ?\n * @returns {string} ?\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n IntlBase.changeCurrencySymbol = changeCurrencySymbol;\n /**\n * Returns currency symbol based on currency code ?\n *\n * @private\n * @param {Object} numericObject ?\n * @param {string} currencyCode ?\n * @param {string} altSymbol ?\n * @returns {string} ?\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) ||\n getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n return getCurrency;\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {any} obj ?\n * @returns {any} ?\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n // eslint-disable-next-line\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {Object} numObject ?\n * @returns {any} ?\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n return cOptions;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n var spaceCapture = integerPart.match(/\\ $/g) ? true : false;\n var spaceGrouping = integerPart.replace(/\\ $/g, '').indexOf(' ') !== -1;\n cOptions.useGrouping = integerPart.indexOf(',') !== -1 || spaceGrouping;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n dOptions.isCustomFormat = true;\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n // eslint-disable-next-line\n cOptions.groupSeparator = spaceGrouping ? ' ' : dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/'/g, '');\n cOptions.nend = spaceCapture ? ' ' + cOptions.nend.replace(/'/g, '') : cOptions.nend.replace(/'/g, '');\n }\n return cOptions;\n }\n IntlBase.customNumberFormat = customNumberFormat;\n /**\n * Returns formatting options for currency or percent type\n *\n * @private\n * @param {string[]} parts ?\n * @param {string} actual ?\n * @param {string} symbol ?\n * @returns {any} ?\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[parseInt(i.toString(), 10)];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n // eslint-disable-next-line\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n // eslint-disable-next-line\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n *\n * @private\n * @param {Object} dateObj ?\n * @returns {string} ?\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[dM]([^dM])[dM]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n *\n * @private\n * @param {string} culture ?\n * @param {DateFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcelFormat ?\n * @returns {string} ?\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n if (isBlazor()) {\n options = compareBlazorDateFormats(options, culture);\n }\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n // eslint-disable-next-line\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n *\n * @param {string} actual ?\n * @param {any} option ?\n * @returns {any} ?\n */\n // eslint-disable-next-line\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n // eslint-disable-next-line\n var split = actual.split(',');\n actual = (split[0] + getValue('numberMapper.numberSymbols.group', option) +\n split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option)));\n }\n else {\n actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n }\n return actual;\n }\n /**\n * Returns Native Number pattern\n *\n * @private\n * @param {string} culture ?\n * @param {NumberFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcel ?\n * @returns {string} ?\n */\n function getActualNumberFormat(culture, options, cldr, isExcel) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numrericObject = dependable.numericObject;\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n var type = IntlBase.formatRegex.test(options.format) ? getProperNumericSkeleton(options.format || 'N') : {};\n var dOptions = {};\n if (curMatch) {\n dOptions.numberMapper = isBlazor() ?\n extend({}, dependable.numericObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) :\n getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode, options.altSymbol);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = isBlazor() ? true : (split.length > 1);\n curObj.nData = isBlazor() ? getValue(type.type + 'nData', numrericObject) :\n getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) :\n getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency' || (parseOptions.type && isBlazor())) {\n if (isBlazor() && parseOptions.type !== 'currency') {\n curObj.pData = getValue(parseOptions.type + 'pData', numrericObject);\n curObj.nData = getValue(parseOptions.type + 'nData', numrericObject);\n }\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern || isBlazor()) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent' && !isBlazor()) {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/'/g, '\"');\n }\n if (Object.keys(dOptions).length > 0) {\n actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n /**\n *\n * @param {string} pattern ?\n * @param {number} minDigits ?\n * @param {number} maxDigits ?\n * @returns {string} ?\n */\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n IntlBase.fractionDigitsPattern = fractionDigitsPattern;\n /**\n *\n * @param {string} pattern ?\n * @param {number} digits ?\n * @returns {string} ?\n */\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n IntlBase.minimumIntegerPattern = minimumIntegerPattern;\n /**\n *\n * @param {string} pattern ?\n * @returns {string} ?\n */\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[parseInt(x.toString(), 10)] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n IntlBase.groupingPattern = groupingPattern;\n /**\n *\n * @param {string} culture ?\n * @param {Object} cldr ?\n * @returns {number} ?\n */\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[\"\" + iCulture] || mapper[iCulture.slice(0, 2)] || defaultFirstDay;\n }\n return firstDayMapper[\"\" + firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n /**\n * @private\n * @param {any} pData ?\n * @param {string} aCurrency ?\n * @param {string} rCurrency ?\n * @returns {void} ?\n */\n function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n var iCurrency = getBlazorCurrencySymbol(rCurrency);\n if (aCurrency !== iCurrency) {\n for (var _i = 0, pData_1 = pData; _i < pData_1.length; _i++) {\n var data = pData_1[_i];\n data.nend = data.nend.replace(aCurrency, iCurrency);\n data.nlead = data.nlead.replace(aCurrency, iCurrency);\n }\n }\n }\n IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n /**\n * @private\n * @param {Date} date ?\n * @returns {number} ?\n */\n function getWeekOfYear(date) {\n var newYear = new Date(date.getFullYear(), 0, 1);\n var day = newYear.getDay();\n var weeknum;\n day = (day >= 0 ? day : day + 7);\n var daynum = Math.floor((date.getTime() - newYear.getTime() -\n (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n if (day < 4) {\n weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n if (weeknum > 52) {\n var nYear = new Date(date.getFullYear() + 1, 0, 1);\n var nday = nYear.getDay();\n nday = nday >= 0 ? nday : nday + 7;\n weeknum = nday < 4 ? 1 : 53;\n }\n }\n else {\n weeknum = Math.floor((daynum + day - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n *\n * @param {string|Object} options ?\n * @param {string} type ?\n * @param {boolean} async ?\n * @returns defaultType any\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n *\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n *\n * Send the request to server.\n *\n * @param {any} data - To send the user data\n * @return {Promise} ?\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false,\n httpRequest: null\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n // eslint-disable-next-line\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n eventArgs.httpRequest = _this.httpRequest;\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n *\n * @param {string} key Key to search in the response header\n * @returns {string} ?\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n // eslint-disable-next-line\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n // eslint-disable-next-line\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ /]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ /]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ /]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ /]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ /]([\\w.]+)/i,\n SAFARI: /(safari)[ /]([\\w.]+)/i,\n WEBKIT: /(webkit)[ /]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n *\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[\"\" + key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n // eslint-disable-next-line\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n *\n * @param {string} event - type of event triggered.\n * @returns {boolean}\n */\n Browser.getEvent = function (event) {\n // eslint-disable-next-line\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[\"\" + event].isPointer :\n (Browser.isTouch ? events[\"\" + event].isTouch + (!Browser.isDevice ? ' ' + events[\"\" + event].isDevice : '')\n : events[\"\" + event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n *\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n *\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n *\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n *\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * Check whether the browser on the iPad device is Safari or not\n *\n * @returns {boolean}\n */\n Browser.isSafari = function () {\n return (Browser.isDevice && Browser.isIos && Browser.isTouch && typeof window !== 'undefined'\n && window.navigator.userAgent.toLowerCase().indexOf('iphone') === -1\n && window.navigator.userAgent.toLowerCase().indexOf('safari') > -1);\n };\n /**\n * To get the value based on provided key and regX\n *\n * @param {string} key ?\n * @param {RegExp} regX ?\n * @returns {Object} ?\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = typeof window !== 'undefined' ? window.browserDetails : {};\n if (typeof navigator !== 'undefined' && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true) {\n browserDetails['isIos'] = true;\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\n }\n if ('undefined' === typeof browserDetails[\"\" + key]) {\n return browserDetails[\"\" + key] = regX.test(Browser.userAgent);\n }\n return browserDetails[\"\" + key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties\n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n *\n * @param {string} uA ?\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n *\n * @returns {BrowserInfo} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return (window.browserDetails.isTouch =\n ('ontouchstart' in window.navigator) ||\n (window &&\n window.navigator &&\n (window.navigator.maxTouchPoints > 0)) || ('ontouchstart' in window));\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { debounce, extend } from './util';\nimport { Browser } from './browser';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * ```html\n * <div id=\"Eventdiv\"> </div>\n * <script>\n * let node: HTMLElement = document.querySelector(\"#Eventdiv\");\n * EventHandler.addEventListener(node, \"click\", function(){\n * // click handler function code\n * });\n * EventHandler.addEventListener(node, \"onmouseover\", function(){\n * // mouseover handler function code\n * });\n * EventHandler.removeEventListener(node, \"click\", function(){\n * // click handler function code\n * });\n * eventObj.clearEvents();\n * </script>\n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n *\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} intDebounce - Specifies at what interval given event listener should be triggered.\n * @returns {Function} ?\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[parseInt(i.toString(), 10)],\n listener: listener,\n debounce: debounceListener\n });\n if (Browser.isIE) {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener);\n }\n else {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false });\n }\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n *\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @returns {void} ?\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[parseInt(j.toString(), 10)] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[parseInt(j.toString(), 10)], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n *\n * @param {any} element - Specifies the target html element to clear the events\n * @returns {void} ?\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n // eslint-disable-next-line\n eventData = EventHandler.addOrGetEventData(element);\n // eslint-disable-next-line\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[parseInt(i.toString(), 10)].name, copyData[parseInt(i.toString(), 10)].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n *\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @returns {void} ?\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n /**\n * Inject required modules in component library\n *\n * @returns {void} ?\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[parseInt(i.toString(), 10)];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module && module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n *\n * @returns {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n *\n * @param {ModuleDeclaration[]} moduleList ?\n * @returns {void} ?\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n *\n * @param {string} name ?\n * @returns {string} ?\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n *\n * @param {string} modName ?\n * @returns {boolean} ?\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.isComplexArraySetter = false;\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // eslint-disable-next-line\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.isParentArray = isArray;\n this.setProperties(defaultValue, true);\n }\n /**\n * Updates the property changes\n *\n * @param {boolean} val ?\n * @param {string} propName ?\n * @returns {void} ?\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[\"\" + propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[\"\" + propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n *\n * @param {Object} prop ?\n * @param {boolean} muteOnChange ?\n * @returns {void} ?\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n *\n * @param {string} key ?\n * @param {Object} newValue ?\n * @param {Object} oldValue ?\n * @param {boolean} restrictServerDataBind ?\n * @returns {void} ?\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n if (!restrictServerDataBind) {\n this.serverDataBind(key, newValue, true);\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n var parent_1;\n var newChanges = {};\n var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n /* istanbul ignore else */\n if (parentKey.indexOf('.') !== -1) {\n var complexKeys = parentKey.split('.');\n parent_1 = newChanges;\n for (var i = 0; i < complexKeys.length; i++) {\n var isFinal = i === complexKeys.length - 1;\n parent_1[complexKeys[parseInt(i.toString(), 10)]] = isFinal ? value : {};\n parent_1 = isFinal ? parent_1 : parent_1[complexKeys[parseInt(i.toString(), 10)]];\n }\n }\n else {\n newChanges[\"\" + parentKey] = {};\n parent_1 = newChanges[\"\" + parentKey];\n newChanges[\"\" + parentKey][\"\" + key] = value;\n }\n /* istanbul ignore next */\n if (this.isParentArray) {\n var actionProperty = 'ejsAction';\n parent_1[\"\" + actionProperty] = action ? action : 'none';\n }\n this.controlParent.serverDataBind(newChanges);\n }\n };\n ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n // eslint-disable-next-line\n var index = '';\n var propName = this.propName;\n /* istanbul ignore next */\n if (this.isParentArray) {\n index = this.parentObj[this.propName].indexOf(this);\n var valueLength = this.parentObj[this.propName].length;\n valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);\n index = index !== -1 ? '-' + index : '-' + valueLength;\n propName = propName + index;\n }\n if (this.controlParent !== this.parentObj) {\n propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n }\n return propName;\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent, isBlazor } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\nvar isDraggedObject = { isDragged: false };\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n * <div id='drag'>Draggable</div>\n * <script>\n * var ele = document.getElementById('drag');\n * var drag:Draggable = new Draggable(ele,{\n * clone:false,\n * drag: function(e) {\n * //drag handler code.\n * },\n * handle:'.class'\n * });\n * </script>\n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n _this.eleTop = 0;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.parentScrollX = 0;\n _this.parentScrollY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer);\n };\n /* istanbul ignore next */\n Draggable.prototype.getScrollableParent = function (element, axis) {\n var scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };\n var client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };\n if (isNullOrUndefined(element)) {\n return null;\n }\n if (element[scroll[\"\" + axis]] > element[client[\"\" + axis]]) {\n if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {\n if (axis === 'vertical') {\n this.parentScrollY = this.parentScrollY +\n (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n this.tempScrollHeight = element.scrollHeight;\n }\n else {\n this.parentScrollX = this.parentScrollX +\n (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n this.tempScrollWidth = element.scrollWidth;\n }\n if (!isNullOrUndefined(element)) {\n return this.getScrollableParent(element.parentNode, axis);\n }\n else {\n return element;\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n };\n Draggable.prototype.getScrollableValues = function () {\n this.parentScrollX = 0;\n this.parentScrollY = 0;\n var isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');\n var verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');\n var horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.currentStateTarget = evt.target;\n if (this.isDragStarted()) {\n return;\n }\n else {\n this.isDragStarted(true);\n this.externalInitialize = false;\n }\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n /* tslint:disable no-any */\n var abortSelectors = this.abort;\n if (typeof abortSelectors === 'string') {\n abortSelectors = [abortSelectors];\n }\n for (var i = 0; i < abortSelectors.length; i++) {\n if (!isNullOrUndefined(closest(evt.target, abortSelectors[parseInt(i.toString(), 10)]))) {\n /* istanbul ignore next */\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n return;\n }\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.getScrollableValues();\n if (evt.clientX === evt.pageX) {\n this.parentScrollX = 0;\n }\n if (evt.clientY === evt.pageY) {\n this.parentScrollY = 0;\n }\n this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n if (evt.type !== 'touchstart' && this.isPreventSelect) {\n document.body.classList.add('e-prevent-select');\n }\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10)\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n /* istanbul ignore next */\n if (this.isReplaceDragEle) {\n element = this.currentStateCheck(evt.target, element);\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n var args = {\n event: evt,\n element: element,\n target: curTarget,\n bindEvents: isBlazor() ? this.bindDragEvents.bind(this) : null,\n dragElement: dragTargetElement\n };\n this.trigger('dragStart', args);\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n this.getScrollableValues();\n // when drag element has margin-top\n var styles = getComputedStyle(element);\n var marginTop = parseFloat(styles.marginTop);\n /* istanbul ignore next */\n if (this.clone && marginTop !== 0) {\n pos.top += marginTop;\n }\n this.eleTop = !isNaN(parseFloat(styles.top)) ? parseFloat(styles.top) - this.offset.top : 0;\n /* istanbul ignore next */\n // if (this.eleTop > 0) {\n // pos.top += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n pos.top -= this.parentScrollY;\n pos.left -= this.parentScrollX;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n pos.top += this.dragArea.scrollTop;\n }\n this.dragElePosition = { top: pos.top, left: pos.left };\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n if (!isBlazor()) {\n this.bindDragEvents(dragTargetElement);\n }\n }\n };\n Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n // tslint:disable-next-line:max-func-body-length\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (this.clone && evt.changedTouches && Browser.isDevice && Browser.isTouch) {\n evt.preventDefault();\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n var flag = true;\n if (this.hoverObject) {\n if (this.hoverObject.instance !== eleObj.instance) {\n this.triggerOutFunction(evt, eleObj);\n }\n else {\n flag = false;\n }\n }\n if (flag) {\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n }\n else if (this.hoverObject) {\n this.triggerOutFunction(evt, eleObj);\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n var styles = getComputedStyle(helperElement);\n if (this.dragArea) {\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft && dLeft > 0) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n }\n else {\n left = dLeft < 0 ? this.dragLimit.left : dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop && dTop > 0) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n }\n else {\n top = dTop < 0 ? this.dragLimit.top : dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var draEleTop;\n var draEleLeft;\n if (this.helperElement.classList.contains('e-treeview')) {\n if (this.dragArea) {\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - this.borderWidth.top);\n draEleLeft = (left - iLeft) < 0 ? this.dragLimit.left : (left - this.borderWidth.left);\n }\n else {\n draEleTop = top - this.borderWidth.top;\n draEleLeft = left - this.borderWidth.left;\n }\n }\n else {\n if (this.dragArea) {\n var isDialogEle = this.helperElement.classList.contains('e-dialog');\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);\n draEleLeft = (left - iLeft) < 0 ? isDialogEle ? (left - (iLeft - this.borderWidth.left)) :\n this.dragElePosition.left : (left - iLeft);\n }\n else {\n draEleTop = top - iTop;\n draEleLeft = left - iLeft;\n }\n }\n var marginTop = parseFloat(getComputedStyle(this.element).marginTop);\n // when drag-element has margin-top\n /* istanbul ignore next */\n if (marginTop > 0) {\n if (this.clone) {\n draEleTop += marginTop;\n if (dTop < 0) {\n if ((marginTop + dTop) >= 0) {\n draEleTop = marginTop + dTop;\n }\n else {\n draEleTop -= marginTop;\n }\n }\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\n if ((top - iTop) < 0) {\n if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {\n var tempDraEleTop = this.dragLimit.top + dTop - iTop;\n if ((tempDraEleTop + marginTop + iTop) < 0) {\n draEleTop -= marginTop + iTop;\n }\n else {\n draEleTop = tempDraEleTop;\n }\n }\n else {\n draEleTop -= marginTop + iTop;\n }\n }\n }\n if (this.dragArea && this.helperElement.classList.contains('e-treeview')) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n draEleTop = (draEleTop + helperHeight) > this.dragLimit.bottom ? (this.dragLimit.bottom - helperHeight) : draEleTop;\n }\n /* istanbul ignore next */\n // if(this.eleTop > 0) {\n // draEleTop += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n draEleTop -= this.parentScrollY;\n draEleLeft -= this.parentScrollX;\n }\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n draEleTop += this.dragArea.scrollTop;\n }\n var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll && !this.helperElement.classList.contains('e-treeview')) {\n this.helperElement.scrollIntoView();\n }\n var elements = document.querySelectorAll(':hover');\n if (this.enableAutoScroll && this.helperElement.classList.contains('e-treeview')) {\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n /* tslint:disable no-any */\n var scrollParent = this.getScrollParent(elements, false);\n if (this.elementInViewport(this.helperElement)) {\n this.getScrollPosition(scrollParent, draEleTop);\n }\n else if (!this.elementInViewport(this.helperElement)) {\n elements = [].slice.call(document.querySelectorAll(':hover'));\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n scrollParent = this.getScrollParent(elements, true);\n this.getScrollPosition(scrollParent, draEleTop);\n }\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n /* tslint:disable no-any */\n Draggable.prototype.getScrollParent = function (node, reverse) {\n /* tslint:disable no-any */\n var nodeEl = reverse ? node.reverse() : node;\n var hasScroll;\n for (var i = nodeEl.length - 1; i >= 0; i--) {\n hasScroll = window.getComputedStyle(nodeEl[parseInt(i.toString(), 10)])['overflow-y'];\n if ((hasScroll === 'auto' || hasScroll === 'scroll')\n && nodeEl[parseInt(i.toString(), 10)].scrollHeight > nodeEl[parseInt(i.toString(), 10)].clientHeight) {\n return nodeEl[parseInt(i.toString(), 10)];\n }\n }\n hasScroll = window.getComputedStyle(document.scrollingElement)['overflow-y'];\n if (hasScroll === 'visible') {\n document.scrollingElement.style.overflow = 'auto';\n return document.scrollingElement;\n }\n };\n Draggable.prototype.getScrollPosition = function (nodeEle, draEleTop) {\n if (nodeEle && nodeEle === document.scrollingElement) {\n if ((nodeEle.clientHeight + document.scrollingElement.scrollTop - this.helperElement.clientHeight) < draEleTop\n && nodeEle.getBoundingClientRect().height + this.parentClientRect.top > draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.scrollTop > draEleTop - this.helperElement.clientHeight) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n else if (nodeEle && nodeEle !== document.scrollingElement) {\n if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - this.helperElement.clientHeight + document.scrollingElement.scrollTop) < draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.getBoundingClientRect().top > (draEleTop - this.helperElement.clientHeight - document.scrollingElement.scrollTop)) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n };\n Draggable.prototype.getPathElements = function (evt) {\n var elementTop = evt.clientX > 0 ? evt.clientX : 0;\n var elementLeft = evt.clientY > 0 ? evt.clientY : 0;\n return document.elementsFromPoint(elementTop, elementLeft);\n };\n Draggable.prototype.triggerOutFunction = function (evt, eleObj) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n /**\n * @private\n */\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag);\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.isDragStarted = function (change) {\n if (change) {\n isDraggedObject.isDragged = !isDraggedObject.isDragged;\n }\n return isDraggedObject.isDragged;\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n eleHeightBound = ele.scrollHeight ? (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) ? ele.clientHeight : ele.scrollHeight : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[parseInt(i.toString(), 10)];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[\"\" + lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[\"\" + lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n if (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) {\n top = elementArea.top + document.scrollingElement.scrollTop;\n }\n else {\n top = elementArea.top;\n }\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = ele.offsetTop + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.pointerEvents || '';\n var isPointer = evt.type.indexOf('pointer') !== -1 && Browser.info.name === 'safari' && parseInt(Browser.info.version) > 12;\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1 || isPointer) {\n this.helperElement.style.pointerEvents = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.pointerEvents = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n /* istanbul ignore next */\n Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n var elem;\n if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n elem = this.currentStateTarget;\n }\n else {\n elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n }\n return elem;\n };\n Draggable.prototype.getMousePosition = function (evt, isdragscroll) {\n /* tslint:disable no-any */\n var dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;\n var intCoord = this.getCoordinates(evt);\n var pageX;\n var pageY;\n var isOffsetParent = isNullOrUndefined(dragEle.offsetParent);\n /* istanbul ignore next */\n if (isdragscroll) {\n pageX = this.clone ? intCoord.pageX :\n (intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft)) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY :\n (intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop)) - this.relativeYPosition;\n }\n else {\n pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;\n }\n if (document.scrollingElement && (!isdragscroll && !this.clone)) {\n var isVerticalScroll = document.scrollingElement.scrollHeight > 0 && document.scrollingElement.scrollHeight > document.scrollingElement.clientHeight && document.scrollingElement.scrollTop > 0;\n var isHorrizontalScroll = document.scrollingElement.scrollWidth > 0 && document.scrollingElement.scrollWidth > document.scrollingElement.clientWidth && document.scrollingElement.scrollLeft > 0;\n pageX = isHorrizontalScroll ? pageX - document.scrollingElement.scrollLeft : pageX;\n pageY = isVerticalScroll ? pageY - document.scrollingElement.scrollTop : pageY;\n }\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[\"\" + name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isDragScroll\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isReplaceDragEle\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"isPreventSelect\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableScrollHandler\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n * <div id='drop'>Droppable</div>\n * <script>\n * let ele:HTMLElement = document.getElementById('drop');\n * var drag:Droppable = new Droppable(ele,{\n * accept:'.drop',\n * drop: function(e) {\n * //drop handler code.\n * }\n * });\n * </script>\n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n // eslint-disable-next-line\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n * <div id='testEle'> </div>;\n * <script>\n * let node: HTMLElement = document.querySelector('#testEle');\n * let kbInstance = new KeyboardEvents({\n * element: node,\n * keyConfigs:{ selectAll : 'ctrl+a' },\n * keyAction: function (e:KeyboardEvent, action:string) {\n * // handler function code\n * }\n * });\n * </script>\n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\n * @param {HTMLElement} element ?\n * @param {KeyboardEventsModel} options ?\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n *\n * @param {KeyboardEventArgs} e ?\n * @returns {void} ?\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[\"\" + key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n *\n * @returns {void} ?\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n *\n * @param {KeyboardEventsModel} newProp ?\n * @param {KeyboardEventsModel} oldProp ?\n * @returns {void} ?\n * @private\n */\n // eslint-disable-next-line\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {string} ?\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\n * @param {string} config - configuration data\n * @returns {KeyData} ?\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[\"\" + config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[\"\" + config] = keyData;\n return keyData;\n };\n // Return the keycode value as string\n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[\"\" + keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend, isNullOrUndefined } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n *\n * @param {string} controlName ?\n * @param {Object} localeStrings ?\n * @param {string} locale ?\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n *\n * @param {string} locale ?\n * @returns {void} ?\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n *\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n * @returns {void} ?\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n *\n * @param {string} prop - specifies the property for which localize text to be returned.\n * @returns {string} ?\n */\n L10n.prototype.getConstant = function (prop) {\n // Removed conditional operator because this method does not return correct value when passing 0 as value in localization\n if (!isNullOrUndefined(this.currentLocale[\"\" + prop])) {\n return this.currentLocale[\"\" + prop];\n }\n else {\n return this.localeStrings[\"\" + prop] || '';\n }\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n *\n * @param {Object} curObject ?\n * @param {string} locale ?\n * @returns {Object} ?\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if ((curObject)[\"\" + locale]) {\n return (curObject)[\"\" + locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","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 { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = _this.updateChangeTouches(evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.moveEvent = function (evt) {\n var point = _this.updateChangeTouches(evt);\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = _this.updateChangeTouches(evt);\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n var isFirefox = (/Firefox/).test(Browser.userAgent);\n if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n _this.isTouchMoved = false;\n }\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n // eslint-disable-next-line\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed\n /**\n *\n * @private\n * @param {TouchModel} newProp ?\n * @param {TouchModel} oldProp ?\n * @returns {void} ?\n */\n // eslint-disable-next-line\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n *\n * @returns {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n *\n * @returns {string} ?\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n *\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean} ?\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n // eslint-disable-next-line\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // eslint-disable-next-line\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n Touch.prototype.updateChangeTouches = function (evt) {\n var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n return point;\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","/**\n * SanitizeHtmlHelper for sanitize the value.\n */\nimport { detach } from './dom';\nvar removeTags = [\n 'script',\n 'style',\n 'iframe[src]',\n 'link[href*=\"javascript:\"]',\n 'object[type=\"text/x-scriptlet\"]',\n 'object[data^=\"data:text/html;base64\"]',\n 'img[src^=\"data:text/html;base64\"]',\n '[src^=\"javascript:\"]',\n '[dynsrc^=\"javascript:\"]',\n '[lowsrc^=\"javascript:\"]',\n '[type^=\"application/x-shockwave-flash\"]'\n];\nvar removeAttrs = [\n { attribute: 'href', selector: '[href*=\"javascript:\"]' },\n { attribute: 'background', selector: '[background^=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"expression(\"]' },\n { attribute: 'href', selector: 'a[href^=\"data:text/html;base64\"]' }\n];\nvar jsEvents = ['onchange',\n 'onclick',\n 'onmouseover',\n 'onmouseout',\n 'onkeydown',\n 'onload',\n 'onerror',\n 'onblur',\n 'onfocus',\n 'onbeforeload',\n 'onbeforeunload',\n 'onkeyup',\n 'onsubmit',\n 'onafterprint',\n 'onbeforeonload',\n 'onbeforeprint',\n 'oncanplay',\n 'oncanplaythrough',\n 'oncontextmenu',\n 'ondblclick',\n 'ondrag',\n 'ondragend',\n 'ondragenter',\n 'ondragleave',\n 'ondragover',\n 'ondragstart',\n 'ondrop',\n 'ondurationchange',\n 'onemptied',\n 'onended',\n 'onformchange',\n 'onforminput',\n 'onhaschange',\n 'oninput',\n 'oninvalid',\n 'onkeypress',\n 'onloadeddata',\n 'onloadedmetadata',\n 'onloadstart',\n 'onmessage',\n 'onmousedown',\n 'onmousemove',\n 'onmouseup',\n 'onmousewheel',\n 'onoffline',\n 'onoine',\n 'ononline',\n 'onpagehide',\n 'onpageshow',\n 'onpause',\n 'onplay',\n 'onplaying',\n 'onpopstate',\n 'onprogress',\n 'onratechange',\n 'onreadystatechange',\n 'onredo',\n 'onresize',\n 'onscroll',\n 'onseeked',\n 'onseeking',\n 'onselect',\n 'onstalled',\n 'onstorage',\n 'onsuspend',\n 'ontimeupdate',\n 'onundo',\n 'onunload',\n 'onvolumechange',\n 'onwaiting',\n 'onmouseenter',\n 'onmouseleave',\n 'onstart',\n 'onpropertychange',\n 'oncopy',\n 'ontoggle',\n 'onpointerout',\n 'onpointermove',\n 'onpointerleave',\n 'onpointerenter',\n 'onpointerrawupdate',\n 'onpointerover',\n 'onbeforecopy',\n 'onbeforecut',\n 'onbeforeinput'\n];\nvar SanitizeHtmlHelper = /** @class */ (function () {\n function SanitizeHtmlHelper() {\n }\n SanitizeHtmlHelper.beforeSanitize = function () {\n return {\n selectors: {\n tags: removeTags,\n attributes: removeAttrs\n }\n };\n };\n SanitizeHtmlHelper.sanitize = function (value) {\n var item = this.beforeSanitize();\n var output = this.serializeValue(item, value);\n return output;\n };\n SanitizeHtmlHelper.serializeValue = function (item, value) {\n this.removeAttrs = item.selectors.attributes;\n this.removeTags = item.selectors.tags;\n this.wrapElement = document.createElement('div');\n this.wrapElement.innerHTML = value;\n this.removeXssTags();\n this.removeJsEvents();\n this.removeXssAttrs();\n var tempEleValue = this.wrapElement.innerHTML;\n this.removeElement();\n return tempEleValue.replace('&', '&');\n };\n SanitizeHtmlHelper.removeElement = function () {\n // Removes an element's attibute to avoid html tag validation\n var nodes = this.wrapElement.children;\n for (var j = 0; j < nodes.length; j++) {\n var attribute = nodes[parseInt(j.toString(), 10)].attributes;\n for (var i = 0; i < attribute.length; i++) {\n this.wrapElement.children[parseInt(j.toString(), 10)].removeAttribute(attribute[parseInt(i.toString(), 10)].localName);\n }\n }\n };\n SanitizeHtmlHelper.removeXssTags = function () {\n var elements = this.wrapElement.querySelectorAll(this.removeTags.join(','));\n if (elements.length > 0) {\n elements.forEach(function (element) {\n detach(element);\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeJsEvents = function () {\n var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n if (elements.length > 0) {\n elements.forEach(function (element) {\n jsEvents.forEach(function (attr) {\n if (element.hasAttribute(attr)) {\n element.removeAttribute(attr);\n }\n });\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeXssAttrs = function () {\n var _this = this;\n // eslint-disable-next-line\n this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\n }\n });\n };\n return SanitizeHtmlHelper;\n}());\nexport { SanitizeHtmlHelper };\n"],"names":["disableBlazorMode","isBlazorPlatform","createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","replace","split","i","isUndefined","parseInt","toString","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","objCon","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","arguments_1","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","hasOwnProperty","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","later","clearTimeout","setTimeout","queryParams","array","keys_2","push","encodeURIComponent","join","isObjectArray","parser","call","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","getElementsByTagName","querySelectorAll","blinks","l","len","reference","open","appendChild","cloneNode","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","match","enableBlazorMode","getElement","Node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","getInstance","component","elem","querySelector","instances","_a","inst","addInstance","instance","uniqueID","ret","getBlazorCurrencySymbol","currencyCode","blazorCurrencyData","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","setCurrencyCode","defaultCurrencyCode","loadCldr","data_1","cldrData","enableRtl","status","rightToLeft","getNumericObject","type","numObject","IntlBase","getDependables","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getNumberDependable","currency","getCurrencySymbol","numericObject","getDefaultDateObject","mode","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","regExp","RegExp","ele","_b","classList_1","curClass","contains","add","removeClass","flag","classList_2","classArr","index","splice","remove","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","append","NodeList","script","text","head","detach","removeChild","EventHandler","clearEvents","iKey","select","selector","context","needsVDOM","querySelectId","selectAll","charRegex","idList","list","j","splitId","setId","closest","el","nodeType","matches","siblings","childNodes_1","childNodes","curNode","ELEMENT_NODE","getAttributeOrDefault","property","attrVal","isObj","getAttribute","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","includeInnerHTML","containsClass","getComponent","comp","getElementById","ej2_instances","getModuleName","removeChildInstance","childEle","getElementsByClassName","compName","compInstance","destroy","getObject","curKey","defaultValue","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","propertySetter","newValue","oldVal","saveChanges","complexGetter","complexSetter","complexFactoryGetter","complexFactorySetter","complexArrayGetter","defCollection","ignore","controlParent","ignoreCollectionWatch","extendFunc","descriptor","complexArrayDefinedCallback","configurable","defineProperty","complexArraySetter","isComplexArraySetter","oldValueCollection","newValCollection","complexArrayFactorySetter","complexArrayFactoryGetter","dFunc","prop","keyString","propName","getParentKey","model_1","getArrayModel","serverDataBind","model","ejsAction","isControlParent","arrayFunction","modelObject","Property","target","propertyDescriptor","set","get","enumerable","addPropertyCollection","Complex","ComplexFactory","Collection","CollectionFactory","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","_c","childType","tempValue","CreateBuilder","builderFunction","create","temp","curText","rippleEffect","rippleOptions","done","rippleModel","getRippleModel","rippleFlag","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","isCenterRipple","duration","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","enableRipple","isRipple","setGlobalAnimation","animationMode","convertToChar","cArr","cArr_1","arr","String","fromCharCode","registerLicense","licenseValidator","LicenseValidator","enableVersionBasedPersistence","versionBasedStatePersistence","compile","template","helper","ignorePrefix","fnCode","evalExp","str","varCOunt","localKeys","isClass","singleSpace","LINES","DBL_QUOTED_STR","exp","cnt","matchStr","SPECIAL_CHAR","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","WORDIF","strs","HandleSpecialCharArrObj","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ftArray","splRegexp","arrObj","WINDOWFUNC","WORDFUNC","ELSE_STMT","IF_OR_FOR","SINGLE_SLASH","SlashReplace","NameSpaceForspecialChar","addNS","ignoreList","NOT_NUMBER","NameSpaceArrObj","arrObjReg","tempStr","DOUBLE_SLASH","nameSpaceNew","quotes","ARR_OBJ","getRandomId","random","substr","templateString","compiler","engineObj","templateId","isStringTemplate","root","blazorId","blazorTemplates","HAS_SVG","HAS_ROW","updateBlazorTemplate","templateName","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","tempId","tempElement","length_1","setTemplateEngine","classObj","getTemplateEngine","containerObject","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","res","propKeys_1","getSymbolRegex","regexStr","map","getSymbolMatch","matchKeys_1","constructRegex","val","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","DJF","ERN","ETB","NAD","ZAR","XAF","GHS","XDR","AED","BHD","DZD","EGP","ILS","IQD","JOD","KMF","KWD","LBP","LYD","MAD","MRU","OMR","QAR","SAR","SDG","SOS","SSP","SYP","TND","YER","CLP","INR","TZS","EUR","AZN","RUB","BYN","ZMW","BGN","NGN","XOF","BDT","CNY","BAM","UGX","USD","CZK","GBP","DKK","KES","CHF","MVR","BTN","XCD","AUD","BBD","BIF","BMD","BSD","BWP","BZD","CAD","NZD","FJD","FKP","GIP","GMD","GYD","HKD","IDR","JMD","KYD","LRD","MGA","MOP","MUR","MWK","MYR","PGK","PHP","PKR","RWF","SBD","SCR","SEK","SGD","SHP","SLL","ANG","SZL","TOP","TTD","VUV","WST","ARS","BOB","BRL","COP","CRC","CUP","DOP","GTQ","HNL","MXN","NIO","PAB","PEN","PYG","UYU","VES","IRR","GNF","CDF","HTG","XPF","HRK","HUF","AMD","ISK","JPY","GEL","CVE","KZT","KHR","KPW","KRW","KGS","AOA","LAK","MZN","MKD","MNT","BND","MMK","NOK","NPR","AWG","SRD","PLN","AFN","STN","MDL","RON","UAH","LKR","ALL","RSD","TJS","THB","TMT","TRY","UZS","VND","TWD","HijriParser","getHijriDate","gDate","day","getDate","month","getMonth","year","getFullYear","tMonth","tYear","yPrefix","floor","julilanOffset","julianNumber","b","c","d","tempMonth","modifiedJulianDate","z","cyc","iy","im","tempDay","dateCorrection","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","a","gDay","gMonth","gYear","Date","weekdayKey","timeSetter","m","h","H","s","f","datePartMatcher","M","E","L","Z","G","DateFormat","dateFormat","culture","option","cldr","dependable","base","calendar","formatOptions","isIslamic","islamicRegex","isServerRendered","compareBlazorDateFormats","resPattern","format","getResultantPattern","skeleton","dateSeperator","ConvertDateToWeekFormat","numMapper","parserObject","patternMatch_1","char","weekday","monthIndex","days","designator","eText","era","timeZone","isNaN","intDateFormatter","options","dateParseRegex","dObject","getCurrentDateValue","matches_1","curval","curvalstr","processNumber","curstr","getDay","curlength","substring","desig","getHours","dec","retu","timezone","getTimezoneOffset","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","getWeekOfYear","checkTwodigitNumber","latnParseRegex","tVal","curPattern","no","ishour","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numberMapper","currencySymbol","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","pData","replaceBlazorCurrency","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","p","lastIndexOf","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","isCustomFormat","decimalPart","toExponential","customPivotFormat","groupNumbers","nlead","nend","min","toPrecision","level1","sep","decimalSymbol","level2","toFixed","lead","ceil","latnRegex","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tzone","hpattern","parseTimeZoneRegx","pos","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","getDateObject","setMilliseconds","tKeys","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","retOptions","props_1","curObject","matchString","internalNumberParser","toUpperCase","toLowerCase","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","NumberParser","numberParser","custom","symbolRegex","symbolpattern","getParsedNumber","isNegative","end","Infinity","NaN","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","indexLocation","argument","successHandler","errorHandler","name","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","then","isJson","JSON","parse","dateReviver","catch","boundedEvents_1","exports","Internationalization","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","getActualDateTimeFormat","getNumberPattern","isExcel","getActualNumberFormat","getFirstDayOfWeek","getWeekData","blazorCultureFormats","en-US","D","F","g","r","R","t","T","u","U","Y","blazorCulture","iType","basicPatterns","dPattern","tPattern","calendartype","blazorDefaultObject","defaultObject","dateString","convertMapper","dateConverterMapper","tempString","curFormatMapper","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","formatSplit","customNumberFormat","integerPart","spaceCapture","spaceGrouping","fractionPart","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","dateObj","actualPattern","patternRegex","tLength","timeZonePattern","options_1","processSymbol","minFrac","numrericObject","curMatch","currencyFormatRegex","curCode","hasNegativePattern","fractionDigitsPattern","minimumIntegerPattern","groupingPattern","cPattern","minDigits","maxDigits","diff","integer","firstDay","defaultFirstDay","iCulture","firstDayMapper","aCurrency","rCurrency","iCurrency","pData_1","weeknum","newYear","daynum","getTime","nday","'"," a","yy","EEEE","sun","mon","tue","wed","thu","fri","sat","curWithoutNumberRegex","$","%","-","0","1","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","islamic","yyyy","yyyyM","yyyyMd","yyyyMEd","yyyyMMM","yyyyMMMd","yyyyMMMEd","yyyyMMMM","yyyyQQQ","yyyyQQQQ","timeZoneNames","currencies","displayName","symbol-alt-narrow","minimumGroupingDigits","symbols-numberSystem-latn","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","mapperDigits","currencypData","percentpData","percentnData","currencynData","decimalnData","decimalpData","C","P","N","A","headerRegex","defaultType","Ajax","async","contentType","emitError","url","send","cancel","httpRequest","Promise","resolve","reject","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","clientInfo","userAgent","version","language","navigator","getEvent","isTouch","isDevice","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","isSafari","isIos","regX","platform","maxTouchPoints","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","addOrGetEventData","__eventList","eventName","listener","bindTo","intDebounce","debounceListener","eventData","isIE","passive","some","copyData","shift","trigger","eventProp","eventData_1","event_1","isColEName","Base","isRendered","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","finalUpdate","childChangedProperties","modelObserver","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","moduleClass","filter","__extends","extendStatics","setPrototypeOf","__proto__","__","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","Animation","_super","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animation","animationId","frameId","cancelAnimationFrame","begin","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","progress","requestAnimationFrame","fail","newProp","oldProp","accountURL","lastPageID","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clean","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","modules","usedModules","arg","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","clearUpdate","curIndex","restrictServerDataBind","isSaveChanges","action","parent_1","parentKey","complexKeys","isFinal","valueLength","componentList","bypassKey","isValidated","isLicensed","errors","noLicense","trailExpired","versionMismatched","platformMismatched","invalidKey","manager","licKey","setKey","getKey","npxManager","npxLicKey","validate","contentKey","URLKey","validateMsg","validateURL","getInfoFromKey","result_1","invalidPlatform","expiryDate","expDate","currDate","licenseContent","errorDiv","getDecryptedData","atob","pkey","decryptedStr","resultArray","isNpxKey","licKeySplit_1","lKey","decodeStr","k","buffr","decryptedKey","charCodeAt","validateLicense","getVersion","createLicenseOverlay","bannerTemplate","errorBackground","componentCount","lastHistoryLen","instancecount","isvalid","isBannerAdded","Component","randomId","needsID","isReactHybrid","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","callback","clearTemplate","isHistoryChanged","pageID","location","href","history","hash","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","this_1","newList","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","eleTop","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","evt","currentTarget","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","scroll","vertical","horizontal","client","tempScrollHeight","scrollHeight","tempScrollWidth","scrollWidth","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","preventDefault","changedTouches","intCoord","getCoordinates","initialPosition","clientX","clientY","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","position","getMousePosition","isDragScroll","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","offsetParent","dragStart","getProperTargetElement","bindEvents","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","enableScrollHandler","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","width","height","offsetHeight","pageYOffset","pageXOffset","innerHeight","innerWidth","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","draEleTop","draEleLeft","isDialogEle","tempDraEleTop","dragValue","enableAutoScroll","scrollIntoView","getPathElements","scrollParent","getScrollParent","getScrollPosition","reverse","hasScroll","nodeEl","clientHeight","scrollingElement","overflow","nodeEle","elementTop","elementLeft","elementsFromPoint","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","srcElement","isOffsetParent","isVerticalScroll","clientWidth","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","parentElement","drop","eleInst","eleInst_1","Droppable","mouseOver","wireEvents","area","accept","isDrag","isDropArea","canDrop","droppedElement","display","coord","keyCode","backspace","tab","enter","control","alt","pause","capslock","space","escape","pageup","pagedown","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","KeyboardEvents","keyPressHandler","isAltKey","altKey","isCtrlKey","ctrlKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","unwireEvents","config","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","getConstant","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","now","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","item","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","nodes","children","localName","attr","hasAttribute"],"mappings":"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AO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC7G,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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S,IAVC,WACxB,QAAS+7C,MAOT,MAJAA,GAAOl3D,UAAUmb,QAAU,SAAUwD,EAAgBtD,EAAQC,GAEzD,WADe,KAAXD,IAAqBA,MAClBgkC,GAAO1gC,EAAgBtD,IAE3B67C,OAE6B/7C,SkB1JpCg8C,IACA,SACA,QACA,cACA,4BACA,kCACA,wCACA,oCACA,uBACA,0BACA,0BACA,2CAEAC,KACEC,UAAW,OAAQjoD,SAAU,0BAC7BioD,UAAW,aAAcjoD,SAAU,gCACnCioD,UAAW,QAASjoD,SAAU,2BAC9BioD,UAAW,QAASjoD,SAAU,2BAC9BioD,UAAW,OAAQjoD,SAAU,qCAE/BkoD,IAAY,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,YACA,mBACA,gBACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,eACA,cACA,cACA,UACA,YACA,aACA,eACA,mBACA,cACA,YACA,cACA,cACA,YACA,eACA,YACA,SACA,WACA,aACA,aACA,UACA,SACA,YACA,aACA,aACA,eACA,qBACA,SACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,eACA,SACA,WACA,iBACA,YACA,eACA,eACA,UACA,mBACA,SACA,WACA,eACA,gBACA,iBACA,iBACA,qBACA,gBACA,eACA,cACA,iBAEAC,GAAoC,WACpC,QAASA,MA2ET,MAzEAA,GAAmBC,eAAiB,WAChC,OACIC,WACIC,KAAMP,GACN5qD,WAAY6qD,MAIxBG,EAAmBI,SAAW,SAAUl2D,GACpC,GAAIm2D,GAAO1yD,KAAKsyD,gBAEhB,OADatyD,MAAK2yD,eAAeD,EAAMn2D,IAG3C81D,EAAmBM,eAAiB,SAAUD,EAAMn2D,GAChDyD,KAAKkyD,YAAcQ,EAAKH,UAAUlrD,WAClCrH,KAAKiyD,WAAaS,EAAKH,UAAUC,KACjCxyD,KAAK4yD,YAAc1xD,SAASW,cAAc,OAC1C7B,KAAK4yD,YAAYjwD,UAAYpG,EAC7ByD,KAAK6yD,gBACL7yD,KAAK8yD,iBACL9yD,KAAK+yD,gBACL,IAAIC,GAAehzD,KAAK4yD,YAAYjwD,SAEpC,OADA3C,MAAKizD,gBACED,EAAav2D,QAAQ,QAAS,MAEzC41D,EAAmBY,cAAgB,WAG/B,IAAK,GADDC,GAAQlzD,KAAK4yD,YAAYO,SACpBzoD,EAAI,EAAGA,EAAIwoD,EAAMl3D,OAAQ0O,IAE9B,IAAK,GADDynD,GAAYe,EAAMr2D,SAAS6N,EAAE5N,WAAY,KAAKuK,WACzC1K,EAAI,EAAGA,EAAIw1D,EAAUn2D,OAAQW,IAClCqD,KAAK4yD,YAAYO,SAASt2D,SAAS6N,EAAE5N,WAAY,KAAKmW,gBAAgBk/C,EAAUt1D,SAASF,EAAEG,WAAY,KAAKs2D,YAIxHf,EAAmBQ,cAAgB,WAC/B,GAAItrD,GAAWvH,KAAK4yD,YAAY3wD,iBAAiBjC,KAAKiyD,WAAWvxD,KAAK,KAClE6G,GAASvL,OAAS,GAClBuL,EAASxI,QAAQ,SAAU2C,GACvBkI,EAAOlI,MAOnB2wD,EAAmBS,eAAiB,WAChC,GAAIvrD,GAAWvH,KAAK4yD,YAAY3wD,iBAAiB,IAAMmwD,GAAS1xD,KAAK,OAAS,IAC1E6G,GAASvL,OAAS,GAClBuL,EAASxI,QAAQ,SAAU2C,GACvB0wD,GAASrzD,QAAQ,SAAUs0D,GACnB3xD,EAAQ4xD,aAAaD,IACrB3xD,EAAQuR,gBAAgBogD,QAS5ChB,EAAmBU,eAAiB,WAChC,GAAIhzD,GAAQC,IAEZA,MAAKkyD,YAAYnzD,QAAQ,SAAU2zD,EAAMnqD,GACrC,GAAIhB,GAAWxH,EAAM6yD,YAAY3wD,iBAAiBywD,EAAKxoD,SACnD3C,GAASvL,OAAS,GAClBuL,EAASxI,QAAQ,SAAU2C,GACvBA,EAAQuR,gBAAgBy/C,EAAKP,gBAKtCE"}
|