@syncfusion/ej2-base 31.2.2 → 31.2.5
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/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 +30 -3
- package/dist/es6/ej2-base.es2015.js.map +1 -1
- package/dist/es6/ej2-base.es5.js +30 -3
- 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 +1 -1
- package/src/intl/date-parser.js +23 -0
- package/src/intl/number-formatter.js +3 -0
- package/src/sanitize-helper.js +1 -0
- package/src/validate-lic.js +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-base.min.js","sources":["../../src/util.js","../../src/intl/parser-base.js","../../src/intl/intl-base.js","../../src/dom.js","../../src/base.js","../../src/notify-property-change.js","../../src/animation.js","../../src/internationalization.js","../../src/validate-lic.js","../../src/component.js","../../src/template.js","../../src/template-engine.js","../../src/ajax.js","../../src/fetch.js","../../src/browser.js","../../src/event-handler.js","../../src/observer.js","../../src/module-loader.js","../../src/child-property.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/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 */\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 var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, window.location.origin);\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 */\nexport function getValue(nameSpace, obj) {\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 */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[parseInt(i.toString(), 10)];\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue;\n }\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 */\nexport function deleteObject(obj, key) {\n delete obj[\"\" + key];\n}\n/**\n *@private\n */\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 */\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 */\nexport function getEnumValue(enumObject, enumValue) {\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 var args = [copied, first, second, deep];\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!args[parseInt(i.toString(), 10)]) {\n return \"continue\";\n }\n var obj1 = args[parseInt(i.toString(), 10)];\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 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 if (Array.isArray(clone) && Object.prototype.hasOwnProperty.call(clone, '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 result[\"\" + key] = extend([], clone, copy, (clone && clone.length) || (copy && copy.length));\n }\n }\n else {\n result[\"\" + key] = copy;\n }\n });\n };\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 {any} 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 {any} 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 var out;\n return function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\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 */\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 throw new Error(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 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 */\nexport function getInstance(element, component) {\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 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 */\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 if (!Object.prototype.hasOwnProperty.call(res, prop[\"\" + key])) {\n res[prop[\"\" + key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n *\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 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 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 ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[parseInt(i.toString(), 10)] = digits[parseInt(i.toString(), 10)];\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 { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { isUndefined } from '../util';\n/**\n * Specifies default currency code to be considered\n *\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar NumberFormat = null;\nvar DateFormat = null;\nexport function setDefaultCurrencyCode(value) { defaultCurrencyCode = value; }\nexport function setNumberFormat(value) { NumberFormat = value; }\nexport function setDateFormat(value) { DateFormat = value; }\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 @typescript-eslint/no-namespace\nexport var IntlBase;\n(function (IntlBase) {\n // eslint-disable-next-line security/detect-unsafe-regex\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n // eslint-disable-next-line security/detect-unsafe-regex\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 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 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 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 val = val.replace(IntlBase.defaultCurrency, sym);\n return (sym === '') ? val.trim() : val;\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 * @param {string} ignoreCurrency ?\n * @returns {string} ?\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol, ignoreCurrency) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = ignoreCurrency ? '$' : 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 options[\"\" + data[parseInt(i.toString(), 10)]] = customNumberFormat(formatSplit[parseInt(i.toString(), 10)], 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 integerPart = (/\\s$/.test(integerPart)) ? integerPart.replace(/ /g, '') : integerPart;\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 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 options[\"\" + typeMapper[parseInt(i.toString(), 10)]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[\"\" + typeMapper[\"\" + actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n *\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 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 function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\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 IntlBase.processSymbol = processSymbol;\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 * @param {number} firstDayOfWeek ?\n * @returns {number} ?\n */\n function getWeekOfYear(date, firstDayOfWeek) {\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 - firstDayOfWeek - 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 - firstDayOfWeek - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\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.style.cssText = properties.styles;\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * Updates the CSS text of an element by merging new styles with existing styles.\n *\n * @param {HTMLElement} element - The element whose styles need to be updated.\n * @param {string} cssText - The new CSS styles to be added or updated.\n * @returns {void}\n */\nexport function updateCSSText(element, cssText) {\n var existingStyles = element.style.cssText.split(';').reduce(function (styles, style) {\n var _a = style.split(':'), key = _a[0], value = _a[1];\n if (key && value) {\n styles[key.trim()] = value.trim();\n }\n return styles;\n }, {});\n var newStyles = cssText.split(';').reduce(function (styles, style) {\n var _a = style.split(':'), key = _a[0], value = _a[1];\n if (key && value) {\n styles[key.trim()] = value.trim();\n }\n return styles;\n }, {});\n var styleElement = document.createElement('div');\n // Use safe iteration over keys using Object.keys\n Object.keys(__assign({}, existingStyles, newStyles)).forEach(function (key) {\n styleElement.style.setProperty(key, newStyles[key] || existingStyles[key]);\n });\n element.style.cssText = styleElement.style.cssText;\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 */\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 */\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 */\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 */\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 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 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 */\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n var regExp = RegExp;\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 */\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\n * @returns {void} ?\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 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 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 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 Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\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 camelcase\n this.element.ej2_instances =\n this.element.ej2_instances ?\n this.element.ej2_instances.filter(function (i) {\n if (proxyToRaw) {\n return proxyToRaw(i) !== proxyToRaw(_this);\n }\n return i !== _this;\n })\n : [];\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 */\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n if (ele && ele.ej2_instances) {\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 if (instance instanceof comp) {\n return instance;\n }\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @returns {void} ?\n * @private\n */\nexport function removeChildInstance(element) {\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 var compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\nexport var proxyToRaw;\nexport var setProxyToRaw = function (toRaw) { proxyToRaw = toRaw; };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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 */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!Object.prototype.hasOwnProperty.call(instance.properties, 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 */\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 if (!Object.prototype.hasOwnProperty.call(this.properties, 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 var oldVal = Object.prototype.hasOwnProperty.call(this.properties, 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 */\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 */\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (Object.prototype.hasOwnProperty.call(this.properties, 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 if (!Object.prototype.hasOwnProperty.call(this.properties, 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 if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], '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 if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], '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 var oldValueCollection = Object.prototype.hasOwnProperty.call(this.properties, 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 if (!Object.prototype.hasOwnProperty.call(this.properties, 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 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 var newValueParse = newValue[parseInt(i.toString(), 10)];\n Array.prototype[\"\" + dFunc].apply(prop, [newValueParse]);\n var model = getArrayModel(keyString + (prop.length - 1), newValueParse, !this.controlParent, dFunc);\n this.serverDataBind(model, newValue[parseInt(i.toString(), 10)], false, dFunc);\n }\n break;\n case 'pop': {\n Array.prototype[\"\" + dFunc].apply(prop);\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\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/**\n * Method used to create property. General syntax below.\n *\n * @param {Object} defaultValue - Specifies the default value of property.\n * @returns {PropertyDecorator} ?\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 * @private\n */\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 target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\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 if (!Object.prototype.hasOwnProperty.call(builderFunction, '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 if (Object.prototype.hasOwnProperty.call(context, '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 * @returns {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' || animationMode === GlobalAnimationMode.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 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 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 * This method is used to enable or disable the animation for all components.\n *\n * @param {string|GlobalAnimationMode} value - Specifies the value to enable or disable the animation for all components. When set to 'enable', it enables the animation for all components, regardless of the individual component's animation settings. When set to 'disable', it disables the animation for all components, regardless of the individual component's animation settings.\n * @returns {void}\n */\nexport function setGlobalAnimation(value) {\n animationMode = value;\n}\n/**\n * Defines the global animation modes for all components.\n */\nexport var GlobalAnimationMode;\n(function (GlobalAnimationMode) {\n /**\n * Defines the global animation mode as Default. Animation is enabled or disabled based on the component's animation settings.\n */\n GlobalAnimationMode[\"Default\"] = \"Default\";\n /**\n * Defines the global animation mode as Enable. Enables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Enable\"] = \"Enable\";\n /**\n * Defines the global animation mode as Disable. Disables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Disable\"] = \"Disable\";\n})(GlobalAnimationMode || (GlobalAnimationMode = {}));\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, defaultCurrencyCode, setDefaultCurrencyCode } 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';\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 setDefaultCurrencyCode(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 var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = 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 var numObject = IntlBase.getDependables(cldrData, locale, '', true);\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 return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","import { createElement } from './dom';\nimport { getValue, containerObject, 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'];\nexport var pdfViewerSDKComponents = ['grid', 'chart', 'maps', 'schedule', 'gantt', 'richtexteditor', 'kanban', 'treegrid', 'filemanager', 'pivotview', 'diagram', 'blockeditor', 'spreadsheet', 'DocumentEditor'];\nexport var spreadsheetEditorSDKComponents = ['maps', 'schedule', 'gantt', 'richtexteditor', 'kanban', 'treegrid', 'filemanager', 'pivotview', 'diagram', 'blockeditor', 'PdfViewer', 'DocumentEditor'];\nexport var wordEditorSDKComponents = ['grid', 'chart', 'maps', 'schedule', 'gantt', 'richtexteditor', 'kanban', 'treegrid', 'filemanager', 'pivotview', 'diagram', 'blockeditor', 'PdfViewer', 'spreadsheet'];\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.isLicensed = true;\n this.version = '31';\n this.platform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats|essentialstudio/i;\n this.prefixRegex = /essentialui|pdfviewersdk|spreadsheeteditorsdk|docxeditorsdk/i;\n this.incorrectPlatform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats/i;\n this.errors = {\n noLicense: '<span>This application was built using a trial version of Syncfusion<sup>®</sup> Essential Studio<sup>®</sup>.' +\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<sup>®</sup> Essential Studio<sup>®</sup>.' +\n ' To remove the license validation message permanently, a valid license key must be included.</span>',\n versionMismatched: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>',\n platformMismatched: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>',\n invalidKey: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>',\n componentRestricted: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>'\n };\n this.validatedPlatforms = [];\n this.minVersion = null;\n this.allowedComponentsMap = {\n 'pdfviewersdk': pdfViewerSDKComponents,\n 'spreadsheeteditorsdk': spreadsheetEditorSDKComponents,\n 'docxeditorsdk': wordEditorSDKComponents\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 * @param {string} component - The name of the component to validate.\n * @returns {boolean} ?\n */\n LicenseValidator.prototype.validate = function (component) {\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 ((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 var componentRestrictedMsg = void 0;\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n var hasError = false;\n if ((!this.platform.test(res.platform) && !this.prefixRegex.test(res.platform)) || res.invalidPlatform) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (this.incorrectPlatform.test(res.platform) && parseInt(res.version.split('.')[0], 10) > 30) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (this.prefixRegex.test(res.platform) && parseInt(res.version.split('.')[0], 10) > 30) {\n var restrictionMsg = this.restrictComponent(component, res.platform);\n if (restrictionMsg) {\n componentRestrictedMsg = restrictionMsg;\n hasError = true;\n }\n else {\n componentRestrictedMsg = null;\n }\n if (((res.minVersion >= res.lastValue) && (res.minVersion !== res.lastValue)) ||\n (res.lastValue < parseInt(this.version, 10))) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else {\n if (res.lastValue == null || isNaN(res.lastValue)) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n }\n 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 hasError = true;\n }\n }\n if (!validateMsg && !componentRestrictedMsg) {\n break;\n }\n }\n else {\n if (((res.minVersion >= res.lastValue) && (res.minVersion !== res.lastValue)) ||\n (res.lastValue < parseInt(this.version, 10))) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else {\n if (res.lastValue == null || isNaN(res.lastValue)) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n }\n 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 if (!hasError && this.prefixRegex.test(res.platform)) {\n this.validatedPlatforms.push(res.platform);\n }\n }\n if (!this.validatedPlatforms.length || componentRestrictedMsg) {\n validateMsg = validateMsg || componentRestrictedMsg;\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 var existingErrorDiv = document.querySelector('div.syncfusion-license-error');\n if (!existingErrorDiv) {\n accountURL = (validateURL && validateURL !== '') ? validateURL : 'https://www.syncfusion.com/account/claim-license-key?pl=SmF2YVNjcmlwdA==&vs=MzE=&utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information';\n var errorDiv = createElement('div', {\n className: 'syncfusion-license-error',\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 }\n this.isLicensed = false;\n }\n }\n return this.isLicensed;\n };\n LicenseValidator.prototype.restrictComponent = function (component, platform) {\n var ignoreList = ['DocumentEditor', 'spreadsheet', 'PdfViewer'];\n if (platform === 'essentialui') {\n return ignoreList.indexOf(component) === -1 ? null : this.errors.componentRestricted;\n }\n else {\n // eslint-disable-next-line security/detect-object-injection\n var allowedList = this.allowedComponentsMap[platform] || [];\n return allowedList.indexOf(component) === -1 ? null : this.errors.componentRestricted;\n }\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)\n - 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) || this.prefixRegex.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 var minVersion = parseInt(decryptedStr[1].split('.')[0], 10);\n var lastValue = parseInt(decryptedStr[4], 10);\n resultArray.push({\n platform: decryptedStr[0],\n version: decryptedStr[1],\n expiryDate: decryptedStr[2],\n lastValue: lastValue,\n minVersion: minVersion\n });\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 (component, key) {\n if (key) {\n registerLicense(key);\n }\n return licenseValidator.validate(component);\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?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">support tickets</a>, <a href=\\\"https://www.syncfusion.com/forums?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">forum</a>, <a href=\\\"https://www.syncfusion.com/feedback?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\n \\\" 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?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" 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 7500 flat and wireframe icons for free with Syncfusion<sup>\\u00AE</sup> <a href=\\\"https://www.syncfusion.com/downloads/metrostudio?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\n \\\" 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<sup>\\u00AE</sup> technical <a href=\\\"https://www.syncfusion.com/blogs/?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\n \\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">blogs</a> and <a href=\\\"https://www.syncfusion.com/resources/techportal/whitepapers?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" 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,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjIyMzAiIGhlaWdodD0iMTU2Ij4KPHBhdGggZD0iTTAgMCBDMTAuMjAxNTE3OTEgOC44MjE1MTgwNSAxNi4yMjU4NjAxNyAxOS4zODQ1MTIyMiAxNy4yODEyNSAzMi45NzI2NTYyNSBDMTcuNDE3OTUwMTYgNDUuOTc2MjU4NTUgMTMuMTkyNTE4MDQgNTcuNjM2ODk1NzMgNC4yNDYwOTM3NSA2Ny4xMzI4MTI1IEMtNS44MzQzNzk4NyA3Ni42NDQzNzA1IC0xNi43MjM2MTUyMyA4MC40NzU4MTc3IC0zMC40MTAxNTYyNSA4MC4yMjI2NTYyNSBDLTQzLjEyNjA0NDAyIDc5LjI2MTgzMzU2IC01NC4yMDMwOTQ1MyA3My40MDM0NzMyNCAtNjIuNzE4NzUgNjMuOTcyNjU2MjUgQy03MS4xNDgwNjkyNSA1MS44OTg2NTk5MiAtNzMuMTk0NzM3MSA0MC4zOTM3NzYxNCAtNzEuNzE4NzUgMjUuOTcyNjU2MjUgQy02OS4wOTkxNjQzNyAxNC41NTg3NDc0NCAtNjIuMzc0NTczNzggNC42NDI1NDI1NiAtNTIuNzE4NzUgLTIuMDI3MzQzNzUgQy0zNS45MDE4NDE2MSAtMTEuOTUyMDc2NTcgLTE1Ljg5MjUyMDU5IC0xMi4xNTE1ODYzNiAwIDAgWiAiIGZpbGw9IiMwODY4NDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzODguNzE4NzUsNDIuMDI3MzQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzcuMzY3MjM5MTYgNC4wNDIzMjQxMSAxMS4xMDI1Mzc1MyAxMS4zOTA0MDEzMyAxNCAxOSBDMTQuMzg5NjU4MjYgMjAuOTg5NzkzMzQgMTQuNzQwMDUyODkgMjIuOTg5MTQ0ODEgMTUgMjUgQzE1LjY2IDI1IDE2LjMyIDI1IDE3IDI1IEMxNy4xMDA1NDY4NyAyNC4xNDQwNjI1IDE3LjIwMTA5Mzc1IDIzLjI4ODEyNSAxNy4zMDQ2ODc1IDIyLjQwNjI1IEMxOC45MTc0Mjc1NSAxNC41MDU2MzU4IDIzLjYwODM5NDI3IDUuNzcxNDMyNzMgMzAuMTc5Njg3NSAwLjg5NDUzMTI1IEMzMy43MzEzMzY1NCAtMC44NTA4MDcwMSAzNi4wNzI1NTM3NiAtMC42MjM0MDQxNyA0MCAwIEM0Ny43ODg2NDkxMyAzLjU4Mjc3ODYgNTEuMzQ3MDc2MTEgMTAuOTI1MDE3NDYgNTQuMzUyNzgzMiAxOC41ODg4NjcxOSBDNjAuNjYxMjYyNjMgMzUuNzMzMjUxOTkgNjMuMjM3ODY0ODggNTQuNDE0MDMxNTkgNjMuMDYyNSA3Mi42MjUgQzYzLjA1Nzk4ODI4IDczLjUzMzc4OTA2IDYzLjA1MzQ3NjU2IDc0LjQ0MjU3ODEyIDYzLjA0ODgyODEyIDc1LjM3ODkwNjI1IEM2My4wMzcyMTIwMiA3Ny41ODU5NjY5NSA2My4wMTkyODQ1MyA3OS43OTI5OTI5OSA2MyA4MiBDNTkuMDQgODIgNTUuMDggODIgNTEgODIgQzUwLjkzMDA2ODM2IDgwLjkwMzQ5MTIxIDUwLjg2MDEzNjcyIDc5LjgwNjk4MjQyIDUwLjc4ODA4NTk0IDc4LjY3NzI0NjA5IEM1MC4zMzA4MzIxNSA0MS45ODYzMDU3MyA1MC4zMzA4MzIxNSA0MS45ODYzMDU3MyAzOSA4IEMzOC4wMSA3LjY3IDM3LjAyIDcuMzQgMzYgNyBDMjUuMTQyMTkxNjggMTYuMjQ0MTIxMzEgMjQuODI2NDcwMzkgMzguNDA3NTg2NzUgMjMuNjgzNTkzNzUgNTEuNjcyMzYzMjggQzIzLjA0MTM0NzcxIDU5Ljc3NjY1NDY5IDIyLjUwMDE0OTM2IDY3Ljg4NTgxMjE3IDIyIDc2IEMxOC4wNCA3NiAxNC4wOCA3NiAxMCA3NiBDOS44OTUxMDI1NCA3NC40NzU4NDQ3MyA5Ljg5NTEwMjU0IDc0LjQ3NTg0NDczIDkuNzg4MDg1OTQgNzIuOTIwODk4NDQgQzkuMjg4Njk2MTIgMzkuNjQwNjkzMTMgOS4yODg2OTYxMiAzOS42NDA2OTMxMyAtMSA5IEMtMy4wMzU2NDA0IDcuNzQxNDM2NTkgLTMuMDM1NjQwNCA3Ljc0MTQzNjU5IC01IDcgQy0xNS44NDgzODY5NyAxNi40OTIzMzg2IC0xNi4wNTg3MjYyNSA0MC4yNTk3NTY0MSAtMTcgNTQgQy0xNy40NzQyMTEwMiA2My4zMjgyOTc4NCAtMTcuNzQ3NjYxNTkgNzIuNjYzNDc4NzQgLTE4IDgyIEMtMjIuMjkgODIgLTI2LjU4IDgyIC0zMSA4MiBDLTMxLjg5MjU5MjA1IDU1LjgxNzI5OTc3IC0yOS45NTA2NDQ2MiAyMi44Mzc1NTI0MSAtMTIgMiBDLTguNDczMzg5NDMgLTAuNjQ0OTU3OTMgLTQuMjE5NTgzOTggLTAuOTU4OTk2MzYgMCAwIFogIiBmaWxsPSIjRkZDQzAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4MjgsMzcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzUuODg3MjkwNzMgMS40NDk4NTUxOCA5LjE2NjM4NTEzIDEuMjgxNTYyNTYgMTQuNzUgLTAuODM5ODQzNzUgQzIwLjM1Nzc0OTYyIC0yLjU0NjE0OTE0IDI1LjU0MDY3MjkyIC0xLjM4Mjk1NTEgMzAuNjI1IDEuMjUgQzMyLjkzNzM1MDYzIDMuMjczMzA2OCAzNC4xMDM0MzU0MiA0LjU3NzExOTE4IDM1LjEyNSA3LjQzNzUgQzM0LjM0MTI1IDguMTggMzMuNTU3NSA4LjkyMjUgMzIuNzUgOS42ODc1IEMyOS4xMTkwMTcwMyAxMy40OTEzODY5MiAyOC4yMzgzODk0NyAxNS4wMzE0NzA1OCAyNy44MTI1IDIwLjMxMjUgQzI3Ljk2MDg4MjA0IDI1LjAxNzA4MzQ0IDI5LjE5MzUzOTM2IDI4LjU3NDg0NDU4IDMyLjY2MDE1NjI1IDMxLjkxNzk2ODc1IEMzNC4xMDgzOTEwMSAzMy4xNDAyMzc4IDM1LjYxMjk3ODE1IDM0LjI5NTA4MzQ5IDM3LjEyNSAzNS40Mzc1IEMzNi4wNzAxOTM1MiA0Mi40Njk1NDMyIDMyLjAzNjA5MDQ5IDQ3Ljk3MzE5OTEgMjcuNzUgNTMuNSBDMjQuMjczODU5MzcgNTYuMDY1NzIyODUgMjEuNDA5Njc2NTkgNTYuNjI0MTU5MTggMTcuMTI1IDU2LjQzNzUgQzE1LjExMjc3OTUzIDU1LjgwODY4MTEgMTMuMTEyMjMyNjggNTUuMTQxMzExNTcgMTEuMTI1IDU0LjQzNzUgQzcuMTMyMjAwNjEgNTQuMDEwODUwMDcgMy44Njk5NzIwNCA1NC4xNzkwNDAzMSAwLjA2MjUgNTUuNSBDLTMuNzQ1OTgyNzYgNTYuNzE1NDczMjIgLTYuMDIwMDcxMDYgNTYuNDcwMDcwMjUgLTkuODc1IDU1LjQzNzUgQy0xNy44OTY4MjA0OCA1MC4zNjI0NzA3MiAtMjMuMjI0ODkxNjcgNDAuMjQ1NjM5MjYgLTI1LjQzMzU5Mzc1IDMxLjEzMjgxMjUgQy0yNi42OTE4Nzk2IDIzLjQ0OTQ3NDE1IC0yNy4zMTA4Njc4MiAxNC4yMDI1NjkzMiAtMjIuODc1IDcuNDM3NSBDLTE5LjE4NzExNTEzIDMuMTY0NjQwMjkgLTE0Ljk1ODc1MDk1IC0wLjQ2NDczMTYxIC05LjI2NTYyNSAtMS41NzQyMTg3NSBDLTYuMDIyMDAxNTYgLTEuNTU4MzE4NjQgLTMuMTQ1MDkxMDYgLTAuNzc5NDY1MjEgMCAwIFogIiBmaWxsPSIjMDAwMDAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjIuODc1LDU1LjU2MjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzYuOTk4NjY1NzYgNi41NjU2MTQ1OCAxMy4yMzU0MjQ3IDEzLjIxNDc1OTU1IDE0LjE3OTY4NzUgMjMuMTg3NSBDMTMuOTYxMTk2MzQgMjguMjczOTc0MSAxMi4yNTY2NDk1NCAzMi4wNjY5ODMyNiA5LjAzNTE1NjI1IDM1Ljk3NjU2MjUgQzAuNTMzMzg4MDQgNDMuNTgzNDA3NzQgLTguOTc3NTY4MjUgNDUuMDAzODkwNjcgLTE5Ljg1NTQ2ODc1IDQ0Ljg5ODQzNzUgQy0yMS4xODA5NDcyNyA0NC44OTE2Njk5MiAtMjEuMTgwOTQ3MjcgNDQuODkxNjY5OTIgLTIyLjUzMzIwMzEyIDQ0Ljg4NDc2NTYyIEMtMjQuNzAzMTU0MzQgNDQuODczMDM2MTYgLTI2Ljg3MzA3MDQ3IDQ0Ljg1NTEwMjQ1IC0yOS4wNDI5Njg3NSA0NC44MzU5Mzc1IEMtMjkuMzcyOTY4NzUgNDUuNDk1OTM3NSAtMjkuNzAyOTY4NzUgNDYuMTU1OTM3NSAtMzAuMDQyOTY4NzUgNDYuODM1OTM3NSBDLTMyLjQxNzk2ODc1IDQ2Ljk2MDkzNzUgLTMyLjQxNzk2ODc1IDQ2Ljk2MDkzNzUgLTM1LjA0Mjk2ODc1IDQ2LjgzNTkzNzUgQy0zNy4wNDI5Njg3NSA0NC44MzU5Mzc1IC0zNy4wNDI5Njg3NSA0NC44MzU5Mzc1IC0zNy40MTQwNjI1IDQyLjM1NTQ2ODc1IEMtMzcuNzgyMzI5OTcgMzkuNzMzNjQ1MzEgLTM3Ljc4MjMyOTk3IDM5LjczMzY0NTMxIC0zOS44MjgxMjUgMzguNTM1MTU2MjUgQy00MC41Nzk2NDg0NCAzOC4yMDEyODkwNiAtNDEuMzMxMTcxODcgMzcuODY3NDIxODcgLTQyLjEwNTQ2ODc1IDM3LjUyMzQzNzUgQy00Ny4zNTI0NjU4MyAzNC44NTM3NjUzOCAtNTEuNDU1NzUyNzEgMzEuNTMwNDMxOTUgLTU1LjA0Mjk2ODc1IDI2LjgzNTkzNzUgQy01Ni4wNDI5Njg3NSAyMy4zMzU5Mzc1IC01Ni4wNDI5Njg3NSAyMy4zMzU5Mzc1IC01Ni4wNDI5Njg3NSAyMC44MzU5Mzc1IEMtNTEuMzM2NTk3OTUgMTYuMTI5NTY2NyAtNDUuMzAzOTE4MTcgMTQuNTc0NTc2MzMgLTM5LjA0Mjk2ODc1IDEyLjgzNTkzNzUgQy0zOC4zODI5Njg3NSAxMi44MzU5Mzc1IC0zNy43MjI5Njg3NSAxMi44MzU5Mzc1IC0zNy4wNDI5Njg3NSAxMi44MzU5Mzc1IEMtMzYuOTIxNzk2ODggMTEuOTA5MTAxNTYgLTM2LjgwMDYyNSAxMC45ODIyNjU2MiAtMzYuNjc1NzgxMjUgMTAuMDI3MzQzNzUgQy0zNi41MDgyMDMxMyA4LjgyOTgwNDY5IC0zNi4zNDA2MjUgNy42MzIyNjU2MyAtMzYuMTY3OTY4NzUgNi4zOTg0Mzc1IEMtMzYuMDA1NTQ2ODggNS4yMDM0NzY1NiAtMzUuODQzMTI1IDQuMDA4NTE1NjMgLTM1LjY3NTc4MTI1IDIuNzc3MzQzNzUgQy0zNS40NjY5NTMxMyAxLjgwNjY3OTY5IC0zNS4yNTgxMjUgMC44MzYwMTU2MyAtMzUuMDQyOTY4NzUgLTAuMTY0MDYyNSBDLTM0LjM4Mjk2ODc1IC0wLjQ5NDA2MjUgLTMzLjcyMjk2ODc1IC0wLjgyNDA2MjUgLTMzLjA0Mjk2ODc1IC0xLjE2NDA2MjUgQy0zMC4wNzc2OTExNyAxLjI4MTI3NiAtMjkuNDg3MTQ2NjEgMy4yODE5NjA5NyAtMjguODU1NDY4NzUgNy4wMjM0Mzc1IEMtMjguNjk2OTE0MDYgNy45MjQ0OTIxOSAtMjguNTM4MzU5MzggOC44MjU1NDY4OCAtMjguMzc1IDkuNzUzOTA2MjUgQy0yOC4yNjU0Mjk2OSAxMC40NDA5NzY1NiAtMjguMTU1ODU5MzcgMTEuMTI4MDQ2ODcgLTI4LjA0Mjk2ODc1IDExLjgzNTkzNzUgQy0yNy4xMjUxNTYyNSAxMS45MzM5MDYyNSAtMjYuMjA3MzQzNzUgMTIuMDMxODc1IC0yNS4yNjE3MTg3NSAxMi4xMzI4MTI1IEMtMTguMDQ1MDgyNTkgMTMuMDEyMTUwNTIgLTEyLjIzNzYzMDI1IDEzLjk0OTA5MTA3IC02LjA0Mjk2ODc1IDE3LjgzNTkzNzUgQy00LjY2MTcxODU3IDIwLjU5ODQzNzg2IC00Ljg1MjE3NTY5IDIyLjc4MzI0ODQ5IC01LjA0Mjk2ODc1IDI1LjgzNTkzNzUgQy03LjA0Mjk2ODc1IDI3LjgzNTkzNzUgLTcuMDQyOTY4NzUgMjcuODM1OTM3NSAtMTAuNjY3OTY4NzUgMjcuOTYwOTM3NSBDLTExLjc4MTcxODc1IDI3LjkxOTY4NzUgLTEyLjg5NTQ2ODc1IDI3Ljg3ODQzNzUgLTE0LjA0Mjk2ODc1IDI3LjgzNTkzNzUgQy0xMy4zODI5Njg3NSAyNi41MTU5Mzc1IC0xMi43MjI5Njg3NSAyNS4xOTU5Mzc1IC0xMi4wNDI5Njg3NSAyMy44MzU5Mzc1IEMtMTUuNzk1MjI3MTUgMjIuMTc5MDk2MTMgLTE5LjMwNjQ5OTM2IDIxLjMzMzg1NTg3IC0yMy4zNTU0Njg3NSAyMC43MTA5Mzc1IEMtMjUuMjMyMzQzNzUgMjAuNDIyMTg3NSAtMjcuMTA5MjE4NzUgMjAuMTMzNDM3NSAtMjkuMDQyOTY4NzUgMTkuODM1OTM3NSBDLTI4LjU0Nzk2ODc1IDI4LjI1MDkzNzUgLTI4LjU0Nzk2ODc1IDI4LjI1MDkzNzUgLTI4LjA0Mjk2ODc1IDM2LjgzNTkzNzUgQy0xMi4wNjE3Nzk5MSAzNy4zODI2NDE3MiAtMTIuMDYxNzc5OTEgMzcuMzgyNjQxNzIgMi4wODIwMzEyNSAzMC42NDg0Mzc1IEM0Ljc2MDcwNTQxIDI2LjYzMDQyNjI2IDQuNzc1MjY3NDcgMjMuNTI1MDYwNDMgMy45NTcwMzEyNSAxOC44MzU5Mzc1IEMxLjAxMTM1NTYzIDguNTI2MDcyODEgLTguODY3NTEyMiAyLjM4NDg3MDU4IC0xNy43MzQzNzUgLTIuNTYyNSBDLTMxLjY3NjMzMzk0IC05LjMxMTI2NDA3IC00NS42NDMxNzQyMiAtMTEuNTY4NzI4NjMgLTYxLjA0Mjk2ODc1IC0xMS4xNjQwNjI1IEMtNjEuMDQyOTY4NzUgLTEwLjE3NDA2MjUgLTYxLjA0Mjk2ODc1IC05LjE4NDA2MjUgLTYxLjA0Mjk2ODc1IC04LjE2NDA2MjUgQy02My4wMjI5Njg3NSAtOC4xNjQwNjI1IC02NS4wMDI5Njg3NSAtOC4xNjQwNjI1IC02Ny4wNDI5Njg3NSAtOC4xNjQwNjI1IEMtNjcuNzkyOTY4NzUgLTkuOTE0MDYyNSAtNjcuNzkyOTY4NzUgLTkuOTE0MDYyNSAtNjguMDQyOTY4NzUgLTEyLjE2NDA2MjUgQy02NS45Njg1NDMxOCAtMTUuNTIyNjU2MjggLTYzLjQ3ODY1NTM5IC0xNi41NTA0NzkzNSAtNTkuNzkyOTY4NzUgLTE3LjQ3NjU2MjUgQy0zOS4xODA0NTMyNSAtMjAuODM2MzExNzIgLTE1Ljg1MjQ2NDU2IC0xMy4zOTczMDI3NCAwIDAgWiBNLTQ3LjM1NTQ2ODc1IDIwLjgzNTkzNzUgQy00OC4yMzg0NzY1NiAyMS4wMjE1NjI1IC00OS4xMjE0ODQzOCAyMS4yMDcxODc1IC01MC4wMzEyNSAyMS4zOTg0Mzc1IEMtNTAuNjk1MTE3MTkgMjEuNTQyODEyNSAtNTEuMzU4OTg0MzcgMjEuNjg3MTg3NSAtNTIuMDQyOTY4NzUgMjEuODM1OTM3NSBDLTUyLjUwMDI0MDQ0IDI1LjcyNDc4Mzk5IC01Mi41MDAyNDA0NCAyNS43MjQ3ODM5OSAtNTAuNTAzOTA2MjUgMjcuNDY4NzUgQy00Ni40NjI2MDg1IDMwLjM1OTcxNTgxIC00Mi45NDE1MjEwNyAzMi42MTEyOTk0MiAtMzguMDQyOTY4NzUgMzMuODM1OTM3NSBDLTM2LjcwMzk1MDgzIDMyLjcyNDY3MDkxIC0zNi43MDM5NTA4MyAzMi43MjQ2NzA5MSAtMzYuOTQ1MzEyNSAyOS44OTQ1MzEyNSBDLTM2Ljk1NjkxNDA2IDI4LjY5OTU3MDMxIC0zNi45Njg1MTU2MyAyNy41MDQ2MDkzOCAtMzYuOTgwNDY4NzUgMjYuMjczNDM3NSBDLTM2Ljk4OTQ5MjE5IDI1LjA3NTg5ODQ0IC0zNi45OTg1MTU2MiAyMy44NzgzNTkzOCAtMzcuMDA3ODEyNSAyMi42NDQ1MzEyNSBDLTM3LjAxOTQxNDA2IDIxLjcxNzY5NTMxIC0zNy4wMzEwMTU2MyAyMC43OTA4NTkzNyAtMzcuMDQyOTY4NzUgMTkuODM1OTM3NSBDLTQwLjYzODE2MTY3IDE5LjczMjI5MjMgLTQzLjg0MDg2MTA3IDIwLjA4NjE1NDUzIC00Ny4zNTU0Njg3NSAyMC44MzU5Mzc1IFogIiBmaWxsPSIjMjIxRTIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NTEuMDQyOTY4NzUsNTguMTY0MDYyNSkiLz4KPHBhdGggZD0iTTAgMCBDMy4zIDAgNi42IDAgMTAgMCBDMTMuOTk1NTQ4MTcgOC40NTIxMjExMyAxNi45NDE0Njg4MSAxNy4xNzE5NjY3OSAyMCAyNiBDMjAuMzMgMTcuNDIgMjAuNjYgOC44NCAyMSAwIEMyNC42MyAwIDI4LjI2IDAgMzIgMCBDMzIgMTguNDggMzIgMzYuOTYgMzIgNTYgQzI4IDU3IDI4IDU3IDIwIDU3IEMxNy4zNiA0OS40MSAxNC43MiA0MS44MiAxMiAzNCBDMTEuNjcgNDIuMjUgMTEuMzQgNTAuNSAxMSA1OSBDNS41NTUgNTkuNDk1IDUuNTU1IDU5LjQ5NSAwIDYwIEMwIDQwLjIgMCAyMC40IDAgMCBaICIgZmlsbD0iI0Q4MUYyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTk1LDUyKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjE3MDQ2ODc1IDAuMDI3MDcwMzEgMi4zNDA5Mzc1IDAuMDU0MTQwNjMgMy41NDY4NzUgMC4wODIwMzEyNSBDNC40Mzg5MDYyNSAwLjExNjgzNTk0IDUuMzMwOTM3NSAwLjE1MTY0MDYyIDYuMjUgMC4xODc1IEM3LjUzODE4NzMxIDYuMjE4NDU0OTcgOC44MTk3NDQ4OSAxMi4yNTA3NjY0NyAxMC4wOTUyMTQ4NCAxOC4yODQ0MjM4MyBDMTAuNTI5OTIzMzUgMjAuMzM2MjQxNDggMTAuOTY2NDMxOTEgMjIuMzg3Njc4NjMgMTEuNDA0Nzg1MTYgMjQuNDM4NzIwNyBDMTIuMDM1MDI5NTggMjcuMzg5MTUwNjYgMTIuNjU4NzU5NzQgMzAuMzQwODk0MzcgMTMuMjgxMjUgMzMuMjkyOTY4NzUgQzEzLjQ3ODExNDAxIDM0LjIwNzczNDgzIDEzLjY3NDk3ODAzIDM1LjEyMjUwMDkyIDEzLjg3NzgwNzYyIDM2LjA2NDk4NzE4IEMxNC4wNTc5OTQzOCAzNi45MjU1MDE4NiAxNC4yMzgxODExNSAzNy43ODYwMTY1NCAxNC40MjM4MjgxMiAzOC42NzI2MDc0MiBDMTQuNTgzNzEyMTYgMzkuNDI1Mzk0NzQgMTQuNzQzNTk2MTkgNDAuMTc4MTgyMDcgMTQuOTA4MzI1MiA0MC45NTM3ODExMyBDMTUuMjUgNDMuMTg3NSAxNS4yNSA0My4xODc1IDE1LjI1IDQ4LjE4NzUgQzExLjI5IDQ4LjE4NzUgNy4zMyA0OC4xODc1IDMuMjUgNDguMTg3NSBDMi45MiA0NS44Nzc1IDIuNTkgNDMuNTY3NSAyLjI1IDQxLjE4NzUgQy0yLjcgNDEuNTE3NSAtNy42NSA0MS44NDc1IC0xMi43NSA0Mi4xODc1IEMtMTMuNDEgNDQuMTY3NSAtMTQuMDcgNDYuMTQ3NSAtMTQuNzUgNDguMTg3NSBDLTE5LjM3IDQ4LjE4NzUgLTIzLjk5IDQ4LjE4NzUgLTI4Ljc1IDQ4LjE4NzUgQy0yNi44MDgzMTEyNiA0Mi4yMDY0MzQ4NSAtMjQuNzAyMzE0NTggMzYuMzU1OTk3NzMgLTIyLjMxNjQwNjI1IDMwLjUzOTA2MjUgQy0yMS45OTcxOTcxMSAyOS43NTk4NTQ0MyAtMjEuNjc3OTg3OTggMjguOTgwNjQ2MzYgLTIxLjM0OTEwNTgzIDI4LjE3NzgyNTkzIEMtMjAuNjc5NDY4MTMgMjYuNTQ4NjI2IC0yMC4wMDc5ODYzNCAyNC45MjAxODI4OSAtMTkuMzM0NzE2OCAyMy4yOTI0ODA0NyBDLTE4LjY0OTcxMDY3IDIxLjYzMDYwMDMgLTE3Ljk3MDA3MDg4IDE5Ljk2NjQ5ODY1IC0xNy4yOTU2NTQzIDE4LjMwMDI5Mjk3IEMtMTYuMzEzOTk1MTggMTUuODc1MDE3NSAtMTUuMzE3MDg2OTUgMTMuNDU2NTQxMzggLTE0LjMxNjQwNjI1IDExLjAzOTA2MjUgQy0xNC4wMTgzNTU4NyAxMC4yOTUzMjM3OSAtMTMuNzIwMzA1NDggOS41NTE1ODUwOCAtMTMuNDEzMjIzMjcgOC43ODUzMDg4NCBDLTEwLjMyNjYxNzczIDEuNDMzOTIzMTMgLTcuOTE5NDc2MjUgLTAuMjM3NTg0MjkgMCAwIFogTS0zLjc1IDE1LjE4NzUgQy01LjQgMjAuMTM3NSAtNy4wNSAyNS4wODc1IC04Ljc1IDMwLjE4NzUgQy02LjExIDMwLjE4NzUgLTMuNDcgMzAuMTg3NSAtMC43NSAzMC4xODc1IEMtMS40MDM0OTYzMyAyMi42MzcxMTU3OCAtMS40MDM0OTYzMyAyMi42MzcxMTU3OCAtMi43NSAxNS4xODc1IEMtMy4wOCAxNS4xODc1IC0zLjQxIDE1LjE4NzUgLTMuNzUgMTUuMTg3NSBaICIgZmlsbD0iIzIzNDM5QSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTcwLjc1LDUzLjgxMjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuNzg5Mjg3NzggMi4zMDgzNzYwOSAzLjc1MTc2ODg4IDQuMjY1OTI4MzQgNC4yNzM0Mzc1IDcuOTEwMTU2MjUgQzQuNjM2ODE4NzQgMTUuNjExMDQzMzQgMS45NDAyMDM5IDIxLjI4NjM5NDY0IC0yLjc5Njg3NSAyNy4yNjk1MzEyNSBDLTkuMDAxNDUwMzQgMzMuOTU4MDYzNDcgLTE1LjA5NjEwOTIxIDM3LjE0MTAyMzg5IC0yNC4yNSAzNy41IEMtMjguMDQyMTE1NTYgMzcuMzY0OTExOTEgLTI5Ljc2NDgxODA0IDM3LjEzMTcwMTkgLTMzLjEyNSAzNS4yNSBDLTM2LjYxNDUyNjY5IDMxLjA2MjU2Nzk3IC0zNy40NTgyNTE2IDI3Ljc5OTc2MzM3IC0zNy4zMDg1OTM3NSAyMi40Mjk2ODc1IEMtMzYuMzE4MDI0MjMgMTQuNjMwNTE5ODYgLTMxLjc1MTQwMDU4IDguMTU2MDQwNzUgLTI2IDMgQy0xNy42OTY1MDc2NiAtMi42NTI1NDYzMSAtOS4yMjAwNTQ5MyAtNS42NTc3NjA5OCAwIDAgWiAiIGZpbGw9IiMwNjg4MkYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNDUsNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNzQ5ODUzMjUgLTAuMDg3MTc0NyA3LjQ5OTQ0NTU1IC0wLjE0MDQ1MDAzIDExLjI1IC0wLjE4NzUgQzEyLjMxMzQ3NjU2IC0wLjIxMjYzNjcyIDEzLjM3Njk1MzEyIC0wLjIzNzc3MzQ0IDE0LjQ3MjY1NjI1IC0wLjI2MzY3MTg4IEMxNS40OTc0NjA5NCAtMC4yNzMzMzk4NCAxNi41MjIyNjU2MyAtMC4yODMwMDc4MSAxNy41NzgxMjUgLTAuMjkyOTY4NzUgQzE4LjUyMDc1MTk1IC0wLjMwODY3OTIgMTkuNDYzMzc4OTEgLTAuMzI0Mzg5NjUgMjAuNDM0NTcwMzEgLTAuMzQwNTc2MTcgQzIzLjU2MjEwMzM5IDAuMDc0NjIyNTkgMjQuODI1NjM1MDMgMC43MTY2NzQ2NSAyNyAzIEMyNy45MTMwODU5NCA1LjYzNTQ5ODA1IDI3LjkxMzA4NTk0IDUuNjM1NDk4MDUgMjguNDg0Mzc1IDguNzYxNzE4NzUgQzI4LjgwMzQxNzk3IDEwLjQzOTExMTMzIDI4LjgwMzQxNzk3IDEwLjQzOTExMTMzIDI5LjEyODkwNjI1IDEyLjE1MDM5MDYyIEMyOS4zMzM4NjcxOSAxMy4zMTc2MzY3MiAyOS41Mzg4MjgxMiAxNC40ODQ4ODI4MSAyOS43NSAxNS42ODc1IEMyOS45NzA0Mjk2OSAxNi44NjYzNDc2NiAzMC4xOTA4NTkzOCAxOC4wNDUxOTUzMSAzMC40MTc5Njg3NSAxOS4yNTk3NjU2MiBDMzAuOTYwMTAyNjQgMjIuMTcwNzg4OTEgMzEuNDg2NzY4MjIgMjUuMDgzNzY2MzEgMzIgMjggQzM1LjA3NTc1MDg3IDIxLjMyMzQ4NDU3IDM4LjA0NTYyMTcyIDE0LjYyMjgwNzQ2IDQwLjgxMjUgNy44MTI1IEM0MS4xMjM4MDg1OSA3LjA1MTMwODU5IDQxLjQzNTExNzE5IDYuMjkwMTE3MTkgNDEuNzU1ODU5MzggNS41MDU4NTkzOCBDNDIuNTA1ODE1MTcgMy42NzEzNTIxMyA0My4yNTMxOTk4MiAxLjgzNTc5NDExIDQ0IDAgQzQ4LjI5IDAgNTIuNTggMCA1NyAwIEM1NS44NzQ5NzQ1OCA2Ljc1MDE1MjU0IDU1Ljg3NDk3NDU4IDYuNzUwMTUyNTQgNTQuMzQxNzk2ODggMTAuMzIxMjg5MDYgQzU0LjAwNDc0NzMxIDExLjExNTIxMDU3IDUzLjY2NzY5Nzc1IDExLjkwOTEzMjA4IDUzLjMyMDQzNDU3IDEyLjcyNzExMTgyIEM1Mi45NTY4Nzg2NiAxMy41NjQ4MjExNyA1Mi41OTMzMjI3NSAxNC40MDI1MzA1MiA1Mi4yMTg3NSAxNS4yNjU2MjUgQzUxLjg0NTIwMzg2IDE2LjE0MDIzMzc2IDUxLjQ3MTY1NzcxIDE3LjAxNDg0MjUzIDUxLjA4Njc5MTk5IDE3LjkxNTk1NDU5IEM0OS44OTczNDQ2IDIwLjY5NjY1Mjc4IDQ4LjY5ODc0NTQ1IDIzLjQ3MzI5OTM5IDQ3LjUgMjYuMjUgQzQ2LjY5MzQyMDAxIDI4LjEzMjU1OTY1IDQ1Ljg4NzQyNDAyIDMwLjAxNTM2OTYzIDQ1LjA4MjAzMTI1IDMxLjg5ODQzNzUgQzQzLjYxMDkxMDIyIDM1LjMzMjU2NDA1IDQyLjEzODAzMjE4IDM4Ljc2NTkwNDg3IDQwLjY1ODIwMzEyIDQyLjE5NjI4OTA2IEM0MC4zNjE0MzY3NyA0Mi44ODQzNDYzMSA0MC4wNjQ2NzA0MSA0My41NzI0MDM1NiAzOS43NTg5MTExMyA0NC4yODEzMTEwNCBDMzkuMjA1MDIxMiA0NS41MzU2OTMxMSAzOC42MTMyMzIxNyA0Ni43NzM1MzU2NyAzOCA0OCBDMzMuMzggNDggMjguNzYgNDggMjQgNDggQzIzLjcxODAxNzU4IDQ2Ljg2OTgxNDQ1IDIzLjQzNjAzNTE2IDQ1LjczOTYyODkxIDIzLjE0NTUwNzgxIDQ0LjU3NTE5NTMxIEMyMi4wOTM1MjM1MyA0MC4zNzQ2MTE1MyAyMS4wMjMxNzA3NiAzNi4xNzg4ODk2NSAxOS45NDcyNjU2MiAzMS45ODQzNzUgQzE5LjQ4NDU3MjAzIDMwLjE2OTg5MDMxIDE5LjAyNjgzOTQ1IDI4LjM1NDEzMjkyIDE4LjU3NDIxODc1IDI2LjUzNzEwOTM4IEMxNy45MjE5MzU4OSAyMy45MjIyNTYxNiAxNy4yNTE4MjE4MSAyMS4zMTI1MzE3MyAxNi41NzgxMjUgMTguNzAzMTI1IEMxNi4yODA5ODYwMiAxNy40ODcyODcyOSAxNi4yODA5ODYwMiAxNy40ODcyODcyOSAxNS45Nzc4NDQyNCAxNi4yNDY4ODcyMSBDMTQuODEwMjA5MzQgMTEuODA0OTMzNDYgMTMuNzk5Njc2MzYgOC44OTA1NzQxMSAxMCA2IEM3LjQ0MzcyNDc1IDQuODk3OTA2NjcgNy40NDM3MjQ3NSA0Ljg5NzkwNjY3IDQuNzUgNC4yNSBDMy44NTc5Njg3NSA0LjAwNzY1NjI1IDIuOTY1OTM3NSAzLjc2NTMxMjUgMi4wNDY4NzUgMy41MTU2MjUgQzEuMzcxNDA2MjUgMy4zNDU0Njg3NSAwLjY5NTkzNzUgMy4xNzUzMTI1IDAgMyBDMCAyLjAxIDAgMS4wMiAwIDAgWiAiIGZpbGw9IiMyMTI5NjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2LDU0KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjYzIDAgNy4yNiAwIDExIDAgQzE1IDkuNjI1IDE1IDkuNjI1IDE1IDEzIEMxNS42NiAxMyAxNi4zMiAxMyAxNyAxMyBDMTcuMTkzMzU5MzggMTIuMzk2NzE4NzUgMTcuMzg2NzE4NzUgMTEuNzkzNDM3NSAxNy41ODU5Mzc1IDExLjE3MTg3NSBDMTcuODQ2MzI4MTIgMTAuMzcyNjU2MjUgMTguMTA2NzE4NzUgOS41NzM0Mzc1IDE4LjM3NSA4Ljc1IEMxOC43NTc4NTE1NiA3LjU2NjY0MDYyIDE4Ljc1Nzg1MTU2IDcuNTY2NjQwNjIgMTkuMTQ4NDM3NSA2LjM1OTM3NSBDMjAgNCAyMCA0IDIyIDAgQzI1LjYzIDAgMjkuMjYgMCAzMyAwIEMzMS42MTIzNzc3OCA0LjQ4OTM2NjAxIDMwLjA5OTAyNzU4IDguODM1MTMyMDUgMjguMjA3MDMxMjUgMTMuMTM2NzE4NzUgQzI3LjcyNjY1NDA1IDE0LjI0Mjg1NTIyIDI3LjcyNjY1NDA1IDE0LjI0Mjg1NTIyIDI3LjIzNjU3MjI3IDE1LjM3MTMzNzg5IEMyNi41ODgzNzkzNiAxNi44NTIwMjc5OSAyNS45MjY0NjI4MyAxOC4zMjY4MDAwNiAyNS4yNDk3NTU4NiAxOS43OTQ2Nzc3MyBDMjEuMjM0Nzg2MTQgMjkuMDI3NTEyNzMgMjUuMDc1MDY3NzkgMzYuMzYzMTg5NTkgMjguNTYyNSA0NS4yNSBDMjkuNDAxNTk1MTQgNDcuMzk5MzA1OTEgMzAuMjM2NDQwNzggNDkuNTUwMjc3MTYgMzEuMDY2NDA2MjUgNTEuNzAzMTI1IEMzMS40MzcwOTIyOSA1Mi42NDgzMzAwOCAzMS44MDc3NzgzMiA1My41OTM1MzUxNiAzMi4xODk2OTcyNyA1NC41NjczODI4MSBDMzMgNTcgMzMgNTcgMzMgNjAgQzMxLjU2MTYzMjQ5IDU5Ljg4NTQxMzA3IDMwLjEyNDI5MDM0IDU5Ljc1NzkwODg0IDI4LjY4NzUgNTkuNjI1IEMyNy44ODY5OTIxOSA1OS41NTUzOTA2MyAyNy4wODY0ODQzOCA1OS40ODU3ODEyNSAyNi4yNjE3MTg3NSA1OS40MTQwNjI1IEMyNCA1OSAyNCA1OSAyMSA1NyBDMTkuNjEzMjgxMjUgNTMuOTYwOTM3NSAxOS42MTMyODEyNSA1My45NjA5Mzc1IDE4LjMxMjUgNTAuMzc1IEMxNy44NzU1MDc4MSA0OS4xODY0ODQzNyAxNy40Mzg1MTU2MyA0Ny45OTc5Njg3NSAxNi45ODgyODEyNSA0Ni43NzM0Mzc1IEMxNi42NjIxNDg0NCA0NS44NTgyMDMxMyAxNi4zMzYwMTU2MyA0NC45NDI5Njg3NSAxNiA0NCBDMTQuMjExNzgyMjYgNDYuNjgyMzI2NjEgMTIuNzk4NTczOTYgNDkuMzAyODg5NjEgMTEuMzc1IDUyLjE4NzUgQzEwLjkyODk4NDM4IDUzLjA4ODU1NDY5IDEwLjQ4Mjk2ODc1IDUzLjk4OTYwOTM4IDEwLjAyMzQzNzUgNTQuOTE3OTY4NzUgQzkuNjg1NzAzMTIgNTUuNjA1MDM5MDYgOS4zNDc5Njg3NSA1Ni4yOTIxMDkzNyA5IDU3IEM1LjcgNTYuNjcgMi40IDU2LjM0IC0xIDU2IEMtMC4zOTQ5ODQ5MyA0OS4xNzY3NzQ1NCAyLjkyNjY1MjAyIDQzLjQ2Njc3Nzg3IDUuOTM3NSAzNy40MzE2NDA2MiBDOC40NDU2MTQ0IDMyLjE0NzgyNjM3IDkuNzA2Nzk0NDIgMjguODM0MjUxNjYgOCAyMyBDNi43NTQ5MDE0NiAxOS41MzQxMTc5NSA1LjM3Mjc0NjExIDE2LjE0MTA0NzgxIDMuOTM3NSAxMi43NSBDMy4xOTE5Mjc4NyAxMC45NzU5MjA2OSAyLjQ1MDgyOTQ5IDkuMTk5OTUyNjcgMS43MTQ4NDM3NSA3LjQyMTg3NSBDMS4zODYwNTIyNSA2LjY0NDI0ODA1IDEuMDU3MjYwNzQgNS44NjY2MjEwOSAwLjcxODUwNTg2IDUuMDY1NDI5NjkgQzAgMyAwIDMgMCAwIFogIiBmaWxsPSIjRDgxRTI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMTgzLDUyKSIvPgo8cGF0aCBkPSJNMCAwIEMtMC42NiAzLjYzIC0xLjMyIDcuMjYgLTIgMTEgQy0yLjgyNSAxMC44MzUgLTMuNjUgMTAuNjcgLTQuNSAxMC41IEMtMTEuNDA5NDk0MjQgOS40MzI1NTU0MyAtMTEuNDA5NDk0MjQgOS40MzI1NTU0MyAtMTggMTEgQy0xNy45MDQ4MDU0NiAxMi44OTU3NjM2NiAtMTcuOTA0ODA1NDYgMTIuODk1NzYzNjYgLTE3IDE1IEMtMTQuNTcyODYxMyAxNi44NzM4MTgyMSAtMTQuNTcyODYxMyAxNi44NzM4MTgyMSAtMTEuNjI1IDE4LjUgQy03LjkzODczNzE5IDIwLjYzOTc4MzE2IC01LjIyOTM2OTIyIDIyLjMxNTc1MDIyIC0zIDI2IEMtMS41MDg4MTc1MSAzMS42NDUxOTA4NSAtMi4xNzg0MTgzNiAzNC45MjExNTMwNiAtNSA0MCBDLTkuMzQ2NDcyNTcgNDUuMTQ3MTM4NTcgLTEzLjQ5MjA4MjkgNDcuMDc2ODA4NDEgLTIwLjEyNSA0Ny43NSBDLTI1Ljk4NTQzMDQyIDQ4LjIyMDQyOTExIC0zMS4zMDM1NDk3NiA0Ny4zMzMyMTE3NiAtMzcgNDYgQy0zOC4wOTg5ODcwMiA0Mi43MDMwMzg5NSAtMzcuODcxMjQ0NDQgNDEuNTk1MDUwOTcgLTM3LjA2MjUgMzguMzEyNSBDLTM2Ljg2Nzg1MTU2IDM3LjUwNDI1NzgxIC0zNi42NzMyMDMxMyAzNi42OTYwMTU2MyAtMzYuNDcyNjU2MjUgMzUuODYzMjgxMjUgQy0zNi4zMTY2Nzk2OSAzNS4yNDgzOTg0NCAtMzYuMTYwNzAzMTIgMzQuNjMzNTE1NjMgLTM2IDM0IEMtMzQuODQ1IDM0LjMzIC0zMy42OSAzNC42NiAtMzIuNSAzNSBDLTI4LjE4MjA3NzU3IDM2LjA3MzcyODQ5IC0yNC40NDM3NDM0NCAzNi4zMDEyNzA3NCAtMjAgMzYgQy0xOS4wMSAzNS4zNCAtMTguMDIgMzQuNjggLTE3IDM0IEMtMTcuMTc4MjU1OTkgMzIuMDY3MDg1MjEgLTE3LjE3ODI1NTk5IDMyLjA2NzA4NTIxIC0xOCAzMCBDLTE5LjkwMzM3ODEzIDI4LjYwODcxNTU2IC0xOS45MDMzNzgxMyAyOC42MDg3MTU1NiAtMjIuMjUgMjcuNTYyNSBDLTMxLjA3MTA4MzE3IDIyLjkxMzE3MTEzIC0zMS4wNzEwODMxNyAyMi45MTMxNzExMyAtMzIuNjYwMTU2MjUgMTcuOTI5Njg3NSBDLTMzLjUwOTcyNjg3IDEzLjA2MzIxNTAxIC0zMy4wODExMzgwMSA5LjYxMDg4NDM3IC0zMC4yOTI5Njg3NSA1LjUgQy0yMi4zNjg4Mzc3IC0zLjY5Mjk0OTYyIC0xMC42NjIyMzUzMyAtMi42NjU1NTg4MyAwIDAgWiAiIGZpbGw9IiMyMjM5ODUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0Niw1NSkiLz4KPHBhdGggZD0iTTAgMCBDNC4yNTM4MDEzOCAxLjUxOTIxNDc4IDUuODUwNjA1NjkgNC4xMzEwOTAyNCA4IDggQzEwLjIxNjIxNjM0IDE0LjEzODE3MjIyIDExLjE3ODUwNDM3IDIwLjIzMzA3NjcgOC41NjI1IDI2LjM3NSBDNyAyOSA3IDI5IDYgMzAgQzMuNjM2NzE4NzUgMzAuMjk2ODc1IDMuNjM2NzE4NzUgMzAuMjk2ODc1IDEgMzAgQy0wLjczMDQ2ODc1IDI4LjM5MDYyNSAtMC43MzA0Njg3NSAyOC4zOTA2MjUgLTIuMTg3NSAyNi4yNSBDLTIuOTIwMzMyMDMgMjUuMjA1ODU5MzggLTIuOTIwMzMyMDMgMjUuMjA1ODU5MzggLTMuNjY3OTY4NzUgMjQuMTQwNjI1IEMtNC45MTMwODMwNCAyMi4xMzk2Nzg4OCAtNS45ODkwNDQ2MiAyMC4xMjczMTg0MyAtNyAxOCBDLTcuMTk5MTYwMTYgMTkuMjY0NTcwMzEgLTcuMTk5MTYwMTYgMTkuMjY0NTcwMzEgLTcuNDAyMzQzNzUgMjAuNTU0Njg3NSBDLTcuNTc4OTQ1MzEgMjEuNjUwMzkwNjIgLTcuNzU1NTQ2ODggMjIuNzQ2MDkzNzUgLTcuOTM3NSAyMy44NzUgQy04LjExMTUyMzQ0IDI0Ljk2NTU0Njg4IC04LjI4NTU0Njg4IDI2LjA1NjA5Mzc1IC04LjQ2NDg0Mzc1IDI3LjE3OTY4NzUgQy05IDMwIC05IDMwIC0xMCAzMiBDLTExLjg3NSAzMS43NSAtMTEuODc1IDMxLjc1IC0xNCAzMSBDLTE1LjI1IDI4LjkzNzUgLTE1LjI1IDI4LjkzNzUgLTE2IDI3IEMtMTYuNDMzMTI1IDI3LjQ3NDM3NSAtMTYuODY2MjUgMjcuOTQ4NzUgLTE3LjMxMjUgMjguNDM3NSBDLTIxLjI2ODUzMTg1IDMyLjEwMDQ5MjQ1IC0yNi43NTQ4NDI1IDMxLjMyNjM3NjY4IC0zMS44MjAzMTI1IDMxLjI4MTI1IEMtMzYuMjA3MDY0MDkgMzAuODkzMjMyNjYgLTM3LjkwMzMwOTI4IDMwLjA5NjY5MDcyIC00MSAyNyBDLTQyLjU2MjUgMjQuNSAtNDIuNTYyNSAyNC41IC00MyAyMiBDLTQxLjYyNSAxOS42ODc1IC00MS42MjUgMTkuNjg3NSAtNDAgMTggQy00MS4zMiAxNy4wMSAtNDIuNjQgMTYuMDIgLTQ0IDE1IEMtNDQgMTEuNzUgLTQ0IDExLjc1IC00MyA4IEMtMzcuODIzNzMwOTQgMy44MDUyMDc0OSAtMzIuMDE2MTEwNTQgMy40NTA1OTcyMiAtMjUuNjI1IDMuNjg3NSBDLTI0LjgxOTMzNTk0IDMuNjk3MTY3OTcgLTI0LjAxMzY3MTg4IDMuNzA2ODM1OTQgLTIzLjE4MzU5Mzc1IDMuNzE2Nzk2ODggQy0xNy4zNDEzMjczMSAzLjgyOTMzNjM1IC0xNy4zNDEzMjczMSAzLjgyOTMzNjM1IC0xNSA1IEMtMTUuMzEyNSA2LjkzNzUgLTE1LjMxMjUgNi45Mzc1IC0xNiA5IEMtMjAuMjg5NzAxMzQgMTAuNDI5OTAwNDUgLTI0LjU3MTM0MzI0IDEwLjQzODEyMTc2IC0yOS4wNjY0MDYyNSAxMC43MTg3NSBDLTMxLjkzMTY1NzQ2IDEwLjgxNTkwNjYxIC0zMS45MzE2NTc0NiAxMC44MTU5MDY2MSAtMzQgMTIgQy0zMy4wMzU3ODEyNSAxMi4xMDk1NzAzMSAtMzIuMDcxNTYyNSAxMi4yMTkxNDA2MiAtMzEuMDc4MTI1IDEyLjMzMjAzMTI1IEMtMjkuODE0ODQzNzUgMTIuNDkwNTg1OTQgLTI4LjU1MTU2MjUgMTIuNjQ5MTQwNjMgLTI3LjI1IDEyLjgxMjUgQy0yNS4zNzA1NDY4NyAxMy4wMzg3MzA0NyAtMjUuMzcwNTQ2ODcgMTMuMDM4NzMwNDcgLTIzLjQ1MzEyNSAxMy4yNjk1MzEyNSBDLTIwLjA1NDQ1OTUzIDEzLjk4ODQ3OTcxIC0xOC40MjUxMDM5MSAxNC41NjkwMDk5MSAtMTYgMTcgQy0xNS42NyAxNy45OSAtMTUuMzQgMTguOTggLTE1IDIwIEMtMTQuODc4ODI4MTMgMTkuMzI0NTMxMjUgLTE0Ljc1NzY1NjI1IDE4LjY0OTA2MjUgLTE0LjYzMjgxMjUgMTcuOTUzMTI1IEMtMTQuNDY1MjM0MzggMTcuMDYxMDkzNzUgLTE0LjI5NzY1NjI1IDE2LjE2OTA2MjUgLTE0LjEyNSAxNS4yNSBDLTEzLjk2MjU3ODEzIDE0LjM2ODI4MTI1IC0xMy44MDAxNTYyNSAxMy40ODY1NjI1IC0xMy42MzI4MTI1IDEyLjU3ODEyNSBDLTEzLjAzMjAzNzM2IDEwLjEzMDUyMjU2IC0xMi4yMjAwMjg4MyA4LjE5NDAwMTQzIC0xMSA2IEMtOC43Njk1MzEyNSA2LjEyMTA5Mzc1IC04Ljc2OTUzMTI1IDYuMTIxMDkzNzUgLTYgNyBDLTMuNzYxNzE4NzUgOS43MjI2NTYyNSAtMy43NjE3MTg3NSA5LjcyMjY1NjI1IC0xLjY4NzUgMTMuMDYyNSBDLTAuOTkwMTE3MTkgMTQuMTY3MjI2NTYgLTAuMjkyNzM0MzggMTUuMjcxOTUzMTIgMC40MjU3ODEyNSAxNi40MTAxNTYyNSBDMS4yMDUwMTk1MyAxNy42OTIxMjg5MSAxLjIwNTAxOTUzIDE3LjY5MjEyODkxIDIgMTkgQzEuODAwODM5ODQgMTcuODA1MDM5MDYgMS44MDA4Mzk4NCAxNy44MDUwMzkwNiAxLjU5NzY1NjI1IDE2LjU4NTkzNzUgQzEuMDY1MTA0MTcgMTMuMzkwNjI1IDAuNTMyNTUyMDggMTAuMTk1MzEyNSAwIDcgQy0wLjIwNzUzOTA2IDUuODk5MTQwNjMgLTAuNDE1MDc4MTMgNC43OTgyODEyNSAtMC42Mjg5MDYyNSAzLjY2NDA2MjUgQy0wLjc1MTM2NzE5IDIuNzg0OTIxODcgLTAuODczODI4MTMgMS45MDU3ODEyNSAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogTS0yOCAxOCBDLTI2LjE4Nzc3NDY2IDIwLjA2MjQ5OTQgLTI2LjE4Nzc3NDY2IDIwLjA2MjQ5OTQgLTI0IDIyIEMtMjMuMDEgMjIgLTIyLjAyIDIyIC0yMSAyMiBDLTIxLjMzIDIxLjAxIC0yMS42NiAyMC4wMiAtMjIgMTkgQy0yNC45NyAxOC41MDUgLTI0Ljk3IDE4LjUwNSAtMjggMTggWiBNLTM5IDIyIEMtMzkgMjIuNjYgLTM5IDIzLjMyIC0zOSAyNCBDLTM2LjAzIDI0LjMzIC0zMy4wNiAyNC42NiAtMzAgMjUgQy0zMi4zNTk2ODc0NCAyMi45MDI1MDAwNSAtMzMuNTQ2MTY5OTQgMjIuMDMwOTQyOTYgLTM2Ljc1IDIxLjgxMjUgQy0zNy40OTI1IDIxLjg3NDM3NSAtMzguMjM1IDIxLjkzNjI1IC0zOSAyMiBaICIgZmlsbD0iIzIyMUUyMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjIwLDY3KSIvPgo8cGF0aCBkPSJNMCAwIEMyLjA1NDY4NzUgLTAuMTk5MjE4NzUgMi4wNTQ2ODc1IC0wLjE5OTIxODc1IDUuODY3MTg3NSAwLjM2MzI4MTI1IEM4LjI4Mjg5NDcyIDIuNDI4NzM2NjggMTAuMDk2NDE2NDkgNC43MzM5NTQ2IDExLjg2NzE4NzUgNy4zNjMyODEyNSBDMTIuMTQ5NDkyMTkgNi44NDYzNjcxOSAxMi40MzE3OTY4NyA2LjMyOTQ1MzEzIDEyLjcyMjY1NjI1IDUuNzk2ODc1IEMxNC4yNzE2ODgxMyAzLjQ3NTU5ODQ4IDE1LjU3MTg3NDIgMS45NzEyNTAyOCAxNy44NjcxODc1IDAuMzYzMjgxMjUgQzI2LjQ3NDM3MzUgLTAuNzg0MzQzNTUgMzQuOTQxNzAyNzcgMi4yOTMwNDg0MyA0Mi44NjcxODc1IDUuMzYzMjgxMjUgQzQxLjE2MTc1MzAxIDkuMTA0MjM0MzIgMzkuMjkzODYwOCAxMS4wMjMxMTQxMiAzNS44NjcxODc1IDEzLjM2MzI4MTI1IEMzNC44NzcxODc1IDEzLjM2MzI4MTI1IDMzLjg4NzE4NzUgMTMuMzYzMjgxMjUgMzIuODY3MTg3NSAxMy4zNjMyODEyNSBDMzIuMjA3MTg3NSAxMi4zNzMyODEyNSAzMS41NDcxODc1IDExLjM4MzI4MTI1IDMwLjg2NzE4NzUgMTAuMzYzMjgxMjUgQzI4LjY3MjY0MDY5IDkuNzgzMzQ0MjYgMjguNjcyNjQwNjkgOS43ODMzNDQyNiAyNi4yNDIxODc1IDkuNjc1NzgxMjUgQzI1LjQyNDkyMTg4IDkuNjEwMDM5MDYgMjQuNjA3NjU2MjUgOS41NDQyOTY4OCAyMy43NjU2MjUgOS40NzY1NjI1IEMyMi44MjU4OTg0NCA5LjQyMDQ4ODI4IDIyLjgyNTg5ODQ0IDkuNDIwNDg4MjggMjEuODY3MTg3NSA5LjM2MzI4MTI1IEMyMS43NTg4NzYwNCA5Ljk5OTk5MjUyIDIxLjY1MDU2NDU4IDEwLjYzNjcwMzggMjEuNTM4OTcwOTUgMTEuMjkyNzA5MzUgQzIwLjQxMzg1NTQzIDE3Ljg5NjI5MTI1IDE5LjI3NjQ4MDM1IDI0LjQ5NzY3NjE0IDE4LjEzMTgzNTk0IDMxLjA5NzkwMDM5IEMxNy43MDU4MDczNiAzMy41NjQxNTA1NiAxNy4yODI5NDkwNyAzNi4wMzA5NTA1MSAxNi44NjMyODEyNSAzOC40OTgyOTEwMiBDMTYuMjYwODYwODcgNDIuMDM2ODAwMzYgMTUuNjQ3MjEwNTMgNDUuNTczMjAwOSAxNS4wMzEyNSA0OS4xMDkzNzUgQzE0Ljg0NDcwODU2IDUwLjIxOTc3NjQ2IDE0LjY1ODE2NzExIDUxLjMzMDE3NzkyIDE0LjQ2NTk3MjkgNTIuNDc0MjI3OTEgQzE0LjI4NTkzNzE5IDUzLjQ5NTIxMDcyIDE0LjEwNTkwMTQ5IDU0LjUxNjE5MzU0IDEzLjkyMDQxMDE2IDU1LjU2ODExNTIzIEMxMy42ODcyNDU5NCA1Ni45MjM3OTg2IDEzLjY4NzI0NTk0IDU2LjkyMzc5ODYgMTMuNDQ5MzcxMzQgNTguMzA2ODY5NTEgQzEzLjI1NzI1MDY3IDU4Ljk4NTQ4NTM4IDEzLjA2NTEzIDU5LjY2NDEwMTI2IDEyLjg2NzE4NzUgNjAuMzYzMjgxMjUgQzExLjg3NzE4NzUgNjAuODU4MjgxMjUgMTEuODc3MTg3NSA2MC44NTgyODEyNSAxMC44NjcxODc1IDYxLjM2MzI4MTI1IEM5LjU4MDQ1Mjg0IDU0LjQ1OTA5MjQzIDguMjk5Mjc3MDIgNDcuNTUzODg4ODYgNy4wMjE5NzI2NiA0MC42NDc5NDkyMiBDNi41ODY3MzE3NyAzOC4yOTg0Mjc0MSA2LjE1MDIxNTc5IDM1Ljk0OTE0MTQ1IDUuNzEyNDAyMzQgMzMuNjAwMDk3NjYgQzUuMDgzNTYyMzcgMzAuMjI0ODk1MzcgNC40NTkzMDI5NCAyNi44NDg4NzMzNSAzLjgzNTkzNzUgMjMuNDcyNjU2MjUgQzMuNTQwNjQxNDggMjEuODk1OTAxMTggMy41NDA2NDE0OCAyMS44OTU5MDExOCAzLjIzOTM3OTg4IDIwLjI4NzI5MjQ4IEMzLjA1OTE5MzEyIDE5LjMwNjU3Nzc2IDIuODc5MDA2MzUgMTguMzI1ODYzMDQgMi42OTMzNTkzOCAxNy4zMTU0Mjk2OSBDMi41MzM0NzUzNCAxNi40NTM4MzI0IDIuMzczNTkxMzEgMTUuNTkyMjM1MTEgMi4yMDg4NjIzIDE0LjcwNDUyODgxIEMxLjg2NzE4NzUgMTIuMzYzMjgxMjUgMS44NjcxODc1IDEyLjM2MzI4MTI1IDEuODY3MTg3NSA4LjM2MzI4MTI1IEMtMS43NjI4MTI1IDkuMDIzMjgxMjUgLTUuMzkyODEyNSA5LjY4MzI4MTI1IC05LjEzMjgxMjUgMTAuMzYzMjgxMjUgQy05LjQ2MjgxMjUgMTEuMzUzMjgxMjUgLTkuNzkyODEyNSAxMi4zNDMyODEyNSAtMTAuMTMyODEyNSAxMy4zNjMyODEyNSBDLTE1LjA4OTc3ODMxIDEyLjEyNDAzOTggLTE3LjI0OTM5NzE2IDEwLjU3NzUwMzY3IC0yMC4xMzI4MTI1IDYuMzYzMjgxMjUgQy0xMy40NzU0Nzc3IDMuMTIxMTc0OTQgLTcuMjY2ODA3MzkgMS4yMzc3NTI5MSAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3NzUuMTMyODEyNSwzNS42MzY3MTg3NSkiLz4KPHBhdGggZD0iTTAgMCBDOC41OCAwIDE3LjE2IDAgMjYgMCBDMjYgMy4zIDI2IDYuNiAyNiAxMCBDMjAuNzIgMTAgMTUuNDQgMTAgMTAgMTAgQzEwIDEzLjYzIDEwIDE3LjI2IDEwIDIxIEMxMy45NiAyMSAxNy45MiAyMSAyMiAyMSBDMjIgMjQuMyAyMiAyNy42IDIyIDMxIEMxOC4wNCAzMSAxNC4wOCAzMSAxMCAzMSBDMTAgMzUuMjkgMTAgMzkuNTggMTAgNDQgQzE3LjkyIDQzLjUwNSAxNy45MiA0My41MDUgMjYgNDMgQzI2IDQ2LjMgMjYgNDkuNiAyNiA1MyBDMjIuODY0NjI0MDIgNTQuMDQ1MTI1MzMgMjAuMjI4NTQ5MDIgNTQuMzE1Mzc3MTMgMTYuOTM3NSA1NC41NjI1IEMxNS44NzQwMjM0NCA1NC42NDYyODkwNiAxNC44MTA1NDY4OCA1NC43MzAwNzgxMyAxMy43MTQ4NDM3NSA1NC44MTY0MDYyNSBDOS4xNDgzOTI5NSA1NS4wNDIwODc4NCA0LjU3MjAyNDE4IDU1IDAgNTUgQzAgMzYuODUgMCAxOC43IDAgMCBaICIgZmlsbD0iI0Q4MUUyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAzNSw1MikiLz4KPHBhdGggZD0iTTAgMCBDMS45MTAxNTYyNSAwLjgyMDMxMjUgMS45MTAxNTYyNSAwLjgyMDMxMjUgNC41MzUxNTYyNSAyLjMyMDMxMjUgQzQuNTM1MTU2MjUgNC45NjAzMTI1IDQuNTM1MTU2MjUgNy42MDAzMTI1IDQuNTM1MTU2MjUgMTAuMzIwMzEyNSBDMS43NzIzOTQ0OCA5Ljc5NzYyNzg0IC0wLjc5MDkzMTM1IDkuMjExNjE2NjMgLTMuNDY0ODQzNzUgOC4zMjAzMTI1IEMtNS4wMjYwMjgwMyA4LjI1MjkwMzg1IC02LjU4OTg2ODk1IDguMjM1MTY3OTQgLTguMTUyMzQzNzUgOC4yNTc4MTI1IEMtOC45NjA1ODU5NCA4LjI2NjgzNTk0IC05Ljc2ODgyODEzIDguMjc1ODU5MzcgLTEwLjYwMTU2MjUgOC4yODUxNTYyNSBDLTExLjIxNjQ0NTMxIDguMjk2NzU3ODEgLTExLjgzMTMyODEzIDguMzA4MzU5MzggLTEyLjQ2NDg0Mzc1IDguMzIwMzEyNSBDLTEyLjc5NDg0Mzc1IDkuMzEwMzEyNSAtMTMuMTI0ODQzNzUgMTAuMzAwMzEyNSAtMTMuNDY0ODQzNzUgMTEuMzIwMzEyNSBDLTEyLjU4NDQxNDA2IDExLjcwNzAzMTI1IC0xMS43MDM5ODQzNyAxMi4wOTM3NSAtMTAuNzk2ODc1IDEyLjQ5MjE4NzUgQy05LjYzNTQyOTY5IDEzLjAxMjk2ODc1IC04LjQ3Mzk4NDM4IDEzLjUzMzc1IC03LjI3NzM0Mzc1IDE0LjA3MDMxMjUgQy01LjU1NDUxMTcyIDE0LjgzNjAxNTYzIC01LjU1NDUxMTcyIDE0LjgzNjAxNTYzIC0zLjc5Njg3NSAxNS42MTcxODc1IEMwLjI0MTM3MzEyIDE3LjY4MTI4NjE5IDMuNTY0NTg1NyAxOS42ODc5ODkzIDUuOTEwMTU2MjUgMjMuNjMyODEyNSBDNi45OTYzOTk0NiAyOC4zMDM2NTgzIDYuMzE4NTczOSAzMS44ODQwNDY4MSA0LjAzNTE1NjI1IDM2LjA3MDMxMjUgQy0wLjE5NDIwMDc5IDM5Ljg3NjczMzg0IC00LjYxMjE4MDA4IDQxLjI1NzA5NTU4IC0xMC4yODUxNTYyNSA0MS4zODI4MTI1IEMtMTUuNjc4ODQ0MzEgNDEuMDMwMDkxNzUgLTE5Ljg2NjQ0MTQ4IDQwLjE3ODc3ODc4IC0yNC40NjQ4NDM3NSAzNy4zMjAzMTI1IEMtMjQuNDY0ODQzNzUgMzQuMDIwMzEyNSAtMjQuNDY0ODQzNzUgMzAuNzIwMzEyNSAtMjQuNDY0ODQzNzUgMjcuMzIwMzEyNSBDLTIzLjE2NTQ2ODc1IDI3Ljk4MDMxMjUgLTIxLjg2NjA5Mzc1IDI4LjY0MDMxMjUgLTIwLjUyNzM0Mzc1IDI5LjMyMDMxMjUgQy0xNS41OTQwNTE2OSAzMS41NDQyMDkyNCAtMTEuODI1MTI2MDMgMzEuNjYwNjQ3ODggLTYuNDY0ODQzNzUgMzEuMzIwMzEyNSBDLTYuNDY0ODQzNzUgMzAuMDAwMzEyNSAtNi40NjQ4NDM3NSAyOC42ODAzMTI1IC02LjQ2NDg0Mzc1IDI3LjMyMDMxMjUgQy03LjQxNzQ2MDk0IDI2Ljk1Njc5Njg3IC04LjM3MDA3ODEyIDI2LjU5MzI4MTI1IC05LjM1MTU2MjUgMjYuMjE4NzUgQy0yMi40OTU3MTQwNSAyMS4wMzAxNzczIC0yMi40OTU3MTQwNSAyMS4wMzAxNzczIC0yNS40NjQ4NDM3NSAxNS4zMjAzMTI1IEMtMjYuMjE3MDIwNTkgMTEuNDI4OTQ4NjQgLTI1LjgyMjM5NTM5IDguMjE0MTkxNTkgLTI0LjMzOTg0Mzc1IDQuNTA3ODEyNSBDLTE4LjQ5MTUxODczIC0yLjMxNTIzMzM1IC04LjEzNzk4MzIgLTIuMjQ0MDcxNDQgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTY5LjQ2NDg0Mzc1LDQwLjY3OTY4NzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzguOTEgMCAxNy44MiAwIDI3IDAgQzI3IDMuMyAyNyA2LjYgMjcgMTAgQzIxLjM5IDEwIDE1Ljc4IDEwIDEwIDEwIEMxMCAxMy42MyAxMCAxNy4yNiAxMCAyMSBDMTQuMjkgMjEgMTguNTggMjEgMjMgMjEgQzIzIDI0LjMgMjMgMjcuNiAyMyAzMSBDMTguNzEgMzEgMTQuNDIgMzEgMTAgMzEgQzEwIDM3LjkzIDEwIDQ0Ljg2IDEwIDUyIEM2LjcgNTIgMy40IDUyIDAgNTIgQzAgMzQuODQgMCAxNy42OCAwIDAgWiAiIGZpbGw9IiNEODFFMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMDEsNTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuOTcgMCA1Ljk0IDAgOSAwIEM5IDEzLjUzIDkgMjcuMDYgOSA0MSBDNS4zNyA0MSAxLjc0IDQxIC0yIDQxIEMtMy4yMTY4NzUgNDEuMjQ3NSAtNC40MzM3NSA0MS40OTUgLTUuNjg3NSA0MS43NSBDLTEwLjMxMDAyNjQxIDQyLjA5ODg2OTkyIC0xMy4zMDg5OTE4NSA0MC43MzUwMDM3OSAtMTcgMzggQy0yMC42ODY4MTg5NSAzMy4xNjEwNTAxMyAtMjAuNjk0NzYzNjEgMjcuODUzMTQ1NTEgLTIwIDIyIEMtMTguNzI2MDcyMzggMTguMzEyMzE0NzcgLTE3Ljc0NDY5MDYyIDE2LjU4MzY3NjQzIC0xNC42ODc1IDE0LjE4NzUgQy05LjYzMTE5NDU5IDExLjk1MzMxODU0IC02LjQ1NjIyNjA3IDExLjkwODc1NDc5IC0xIDEzIEMtMC42NyA4LjcxIC0wLjM0IDQuNDIgMCAwIFogTS05LjQzNzUgMjEuMDYyNSBDLTExLjI1OTI1OTU5IDI0LjQ4NzQwODAyIC0xMS42MzY3NDE4MyAyNi4xNzk1NDkgLTExIDMwIEMtOS40NTY2NDk3MSAzMi45NTA0NzU1MyAtOS40NTY2NDk3MSAzMi45NTA0NzU1MyAtNyAzNSBDLTQuNDE0MTc4NzIgMzUuNTg0MDIxMzMgLTQuNDE0MTc4NzIgMzUuNTg0MDIxMzMgLTIgMzUgQzAuMzI4NjYyMjkgMzMuMTExNTM4MTcgMC4zMjg2NjIyOSAzMy4xMTE1MzgxNyAwLjE5NTMxMjUgMjkuOTYwOTM3NSBDMC4xNzIxMDkzOCAyOC43Nzc1NzgxMiAwLjE0ODkwNjI1IDI3LjU5NDIxODc1IDAuMTI1IDI2LjM3NSBDMC4xMDY5NTMxMyAyNS4xODY0ODQzNyAwLjA4ODkwNjI1IDIzLjk5Nzk2ODc1IDAuMDcwMzEyNSAyMi43NzM0Mzc1IEMwLjA0NzEwOTM4IDIxLjg1ODIwMzEzIDAuMDIzOTA2MjUgMjAuOTQyOTY4NzUgMCAyMCBDLTUuMTAxNDUzNyAxOC41Nzg2MzU2MiAtNS4xMDE0NTM3IDE4LjU3ODYzNTYyIC05LjQzNzUgMjEuMDYyNSBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjEzMSw0MCkiLz4KPHBhdGggZD0iTTAgMCBDOS45IDAgMTkuOCAwIDMwIDAgQzMwIDMuMyAzMCA2LjYgMzAgMTAgQzI2LjcgMTAgMjMuNCAxMCAyMCAxMCBDMjAgMjMuODYgMjAgMzcuNzIgMjAgNTIgQzE1LjA1IDUyLjQ5NSAxNS4wNSA1Mi40OTUgMTAgNTMgQzEwIDM4LjgxIDEwIDI0LjYyIDEwIDEwIEM2LjcgMTAgMy40IDEwIDAgMTAgQzAgNi43IDAgMy40IDAgMCBaICIgZmlsbD0iI0Q4MUUyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA2Niw1MikiLz4KPHBhdGggZD0iTTAgMCBDLTAuNDgxMTQ5MSA1Ljc3Mzc4OTI1IC0yLjE4NDY3MTgxIDkuOTU4NTk4MzYgLTUgMTUgQy00LjMxOTM3NSAxNC4yOTg3NSAtMy42Mzg3NSAxMy41OTc1IC0yLjkzNzUgMTIuODc1IEMtMS45NjMyMDUxNCAxMS45MTE3MTQxMyAtMC45ODM1MTk0NiAxMC45NTM4NjU2MSAwIDEwIEMwLjU1NDI5Njg3IDkuNDYxMTcxODggMS4xMDg1OTM3NSA4LjkyMjM0Mzc1IDEuNjc5Njg3NSA4LjM2NzE4NzUgQzUuMjUwOTM2OCA1LjA4MTYzODE0IDcuODk2NjgzMzIgMi44ODQwMTU1MyAxMyAzIEMxNS4wMDY0OTYwNyA0LjUzNjM3NTAxIDE1Ljg3Mzg5MDQ5IDUuNTg4MTQ4NyAxNi42MTcxODc1IDguMDE1NjI1IEMxNy4yNTE1NjExIDEzLjUxMzUyOTUzIDE2Ljg0OTMwMTA3IDE3LjA2MTIxMTQ3IDE0IDIyIEMxMS4wNTUwNzk0MyAyNS40MDk5MDgwMyA4LjEyMTcwMjE1IDI4LjEzNTQyMDQ2IDQgMzAgQzEuNjY3MTQ1MiAzMC4wNDcyNTM5OSAtMC42NjcyNDM5MyAzMC4wNTE4OTk3MyAtMyAzMCBDLTMuMjY1NTQ2ODggMzEuMDczNzg5MDYgLTMuNTMxMDkzNzUgMzIuMTQ3NTc4MTIgLTMuODA0Njg3NSAzMy4yNTM5MDYyNSBDLTQuMTYxMzk0MjEgMzQuNjkwMTIwMSAtNC41MTgxNjg2NiAzNi4xMjYzMTcxMiAtNC44NzUgMzcuNTYyNSBDLTUuMDQ5MDIzNDQgMzguMjY2OTcyNjYgLTUuMjIzMDQ2ODggMzguOTcxNDQ1MzEgLTUuNDAyMzQzNzUgMzkuNjk3MjY1NjIgQy02LjUxMjk0ODE1IDQ0LjE2MDI0OTk4IC03LjcxMjAxMjE2IDQ4LjU4NDg3MDUyIC05IDUzIEMtMTMuODc1IDUxLjI1IC0xMy44NzUgNTEuMjUgLTE1IDQ5IEMtMTUuODA3NzM2NjkgNDEuNjExMTk1NTcgLTE0LjQ0MzM4Mzc0IDM1LjkyMzE3NjkzIC0xMS44NzEwOTM3NSAyOS4wNDI5Njg3NSBDLTEwLjkzNjk5MDk5IDI1Ljc3OTg5MjMxIC0xMC44OTM4OTA4MiAyMy4yNTE1MDY5MSAtMTEuMDYyNSAxOS44NzUgQy0xMS4zNDcwMDEzMyAxMi4zOTk0ODI0MiAtOC41MjkxMDMxNSA3LjAzNDkyMzc4IC0zLjgxMjUgMS4zNzUgQy0yIDAgLTIgMCAwIDAgWiBNMTAgMTAgQzcuOTU1NDM5NDEgMTIuMTcyNjQ2NTUgNy45NTU0Mzk0MSAxMi4xNzI2NDY1NSA1Ljg3NSAxNC44NzUgQzUuMTUwNTQ2ODggMTUuNzc5OTIxODcgNC40MjYwOTM3NSAxNi42ODQ4NDM3NSAzLjY3OTY4NzUgMTcuNjE3MTg3NSBDMS44MDc5NDc2NiAxOS43ODY1NTgxMSAxLjgwNzk0NzY2IDE5Ljc4NjU1ODExIDIgMjIgQzYuMDE1MzA1MDUgMjEuMDg3NDMwNjcgNy43MTEyODI3NSAyMC4zNDk0OTk4MyAxMC4zNzUgMTcuMTI1IEMxMi4zMDc1Njg0OSAxMy45OTU1NjM5MiAxMi4zMDc1Njg0OSAxMy45OTU1NjM5MiAxMiAxMCBDMTEuMzQgMTAgMTAuNjggMTAgMTAgMTAgWiAiIGZpbGw9IiMyMjFFMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2NSw3MCkiLz4KPHBhdGggZD0iTTAgMCBDMy4zIDAgNi42IDAgMTAgMCBDMTAgMTQuMTkgMTAgMjguMzggMTAgNDMgQzEzLjk2IDQzIDE3LjkyIDQzIDIyIDQzIEMyMy4zMiA0My4zMyAyNC42NCA0My42NiAyNiA0NCBDMjYgNDcuMyAyNiA1MC42IDI2IDU0IEMxMy4xMyA1My41MDUgMTMuMTMgNTMuNTA1IDAgNTMgQzAgMzUuNTEgMCAxOC4wMiAwIDAgWiAiIGZpbGw9IiNEODFFMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMzMsNTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMyAwIDYuNiAwIDEwIDAgQzEwLjMzIDQuNjIgMTAuNjYgOS4yNCAxMSAxNCBDMTIuNTQ2ODc1IDEzLjQ0MzEyNSAxMi41NDY4NzUgMTMuNDQzMTI1IDE0LjEyNSAxMi44NzUgQzE4LjM5OTA1MzgzIDExLjkwOTg5MTA3IDIwLjEwMjI4MDU4IDEyLjEzOTcyNDgyIDI0IDE0IEMyNS45NTA0Njk0MiAxNS42MTQxODE1OSAyNi44NzAxODY5MyAxNi43NDAzNzM4NiAyOCAxOSBDMjguMDcxODE4MjEgMjEuNzE3NjAxMDggMjguMDkyOTk1MDYgMjQuNDA4NTkzODggMjguMDYyNSAyNy4xMjUgQzI4LjA1Nzk4ODI4IDI3Ljg3OTEwMTU2IDI4LjA1MzQ3NjU2IDI4LjYzMzIwMzEyIDI4LjA0ODgyODEyIDI5LjQxMDE1NjI1IEMyOC4wMzcwMzQ5OSAzMS4yNzM0NzEyNyAyOC4wMTkwOTk0MiAzMy4xMzY3NDU1NSAyOCAzNSBDMjMuNTQ1IDM1LjQ5NSAyMy41NDUgMzUuNDk1IDE5IDM2IEMxOC45Mzk0MTQwNiAzNS4wODQ3NjU2MyAxOC44Nzg4MjgxMiAzNC4xNjk1MzEyNSAxOC44MTY0MDYyNSAzMy4yMjY1NjI1IEMxOC43MzI2MTcxOSAzMi4wMzgwNDY4NyAxOC42NDg4MjgxMiAzMC44NDk1MzEyNSAxOC41NjI1IDI5LjYyNSBDMTguNDgxMjg5MDYgMjguNDQxNjQwNjMgMTguNDAwMDc4MTIgMjcuMjU4MjgxMjUgMTguMzE2NDA2MjUgMjYuMDM5MDYyNSBDMTguMTg5MTUwNjQgMjMuMDg0ODEwOTkgMTguMTg5MTUwNjQgMjMuMDg0ODEwOTkgMTcgMjEgQzE1LjMzMzg4MDk1IDIwLjk1NzI3OSAxMy42NjYxNzExNSAyMC45NTkzNjE2OCAxMiAyMSBDMTAuNDUwNDk3MzIgMjIuNTQ5NTAyNjggMTAuNzgzNDQ4MDcgMjQuMDk5OTA1OTQgMTAuNjgzNTkzNzUgMjYuMjUzOTA2MjUgQzEwLjY0MTY5OTIyIDI3LjEwNzkxMDE2IDEwLjU5OTgwNDY5IDI3Ljk2MTkxNDA2IDEwLjU1NjY0MDYyIDI4Ljg0MTc5Njg4IEMxMC41MTczMjQyMiAyOS43Mzk2Mjg5MSAxMC40NzgwMDc4MSAzMC42Mzc0NjA5NCAxMC40Mzc1IDMxLjU2MjUgQzEwLjM5NDMxNjQxIDMyLjQ2NDE5OTIyIDEwLjM1MTEzMjgxIDMzLjM2NTg5ODQ0IDEwLjMwNjY0MDYyIDM0LjI5NDkyMTg4IEMxMC4yMDAyMjAxNiAzNi41Mjk3NTE1NiAxMC4wOTk1NzUxOSAzOC43NjQ4NTQ4NiAxMCA0MSBDNi43IDQxIDMuNCA0MSAwIDQxIEMwIDI3LjQ3IDAgMTMuOTQgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDA1LDQwKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzkuOTk1NDE0NiAxNi4wODQxMjA5OCA2Ljc1MDQyOTQ2IDMyLjA3MjY0NDI3IDMgNDggQy0xLjI5IDQ4IC01LjU4IDQ4IC0xMCA0OCBDLTkuMzUyMDc5OTYgNDIuMjQzMTY0OTggLTguMzkyNDE1OTEgMzYuNjQxMDIxMyAtNy4xODc1IDMwLjk3NjU2MjUgQy03LjAxMzcxODI2IDMwLjE0OTE3NTcyIC02LjgzOTkzNjUyIDI5LjMyMTc4ODk0IC02LjY2MDg4ODY3IDI4LjQ2OTMyOTgzIEMtNi4yOTYwMjY4NiAyNi43MzYyMTU3NCAtNS45Mjk1NTA3IDI1LjAwMzQ0MDc3IC01LjU2MTUyMzQ0IDIzLjI3MDk5NjA5IEMtNC45OTczNjgxOSAyMC42MTI1OTg0NyAtNC40Mzk3NTU1NCAxNy45NTI4ODU2NSAtMy44ODI4MTI1IDE1LjI5Mjk2ODc1IEMtMy41MjY0Mjg0MSAxMy42MDQwODUwMSAtMy4xNjk2NzA5OSAxMS45MTUyOCAtMi44MTI1IDEwLjIyNjU2MjUgQy0yLjY0NTgwODExIDkuNDMwNzc3ODkgLTIuNDc5MTE2MjEgOC42MzQ5OTMyOSAtMi4zMDczNzMwNSA3LjgxNTA5Mzk5IEMtMS4xMTUxOTMxMyAyLjIzMDM4NjI2IC0xLjExNTE5MzEzIDIuMjMwMzg2MjYgMCAwIFogIiBmaWxsPSIjMjIzMTc1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5OCw1NCkiLz4KPHBhdGggZD0iTTAgMCBDMCAzIDAgMyAtMSA1IEMtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAwIDE2IEMwLjc1NDE0MjM1IDIyLjQ5MDU2OTM3IC0wLjI2NzY1MDE5IDI1LjU4MjA3Mjg1IC00IDMxIEMtMy45Mjc0OTIxNCAzNC41NTI4ODQ5NCAtMy4zMTc3NDE2NCAzNi40OTE2MTMzNyAtMS40Mzc1IDM5LjUgQzAuNDMyMjMyNTQgNDIuNzUxNzA4NzYgMC40OTI4MjA0OCA0NC4yNjg2NDQ5NCAwIDQ4IEMtMS4xNzkwNDA1IDUxLjQwNDQxNTYzIC0yLjU0MTk2MzU0IDU0LjcwNjM5OTc4IC00IDU4IEMtMTMuMDQyMzMyOTIgNTUuOTEzMzA3NzkgLTE5LjIzMTExMzk5IDQ5LjIyNDI2NTc5IC0yNC42ODc1IDQyLjExMzI4MTI1IEMtMjUuOTc2NzY1MDIgNDAuMDM3NDExMDkgLTI2LjU2ODUwMjU3IDM4LjM4OTQxNzA0IC0yNyAzNiBDLTIyLjM3NSAzMyAtMjIuMzc1IDMzIC0xOSAzMyBDLTE5IDMzLjk5IC0xOSAzNC45OCAtMTkgMzYgQy0xNi4wMjk4MjMwNiAzNS4zNzE4OTgyNyAtMTYuMDI5ODIzMDYgMzUuMzcxODk4MjcgLTEzIDM0IEMtMTEuODAxNjE3OTEgMzEuNjcxNDU1MzcgLTExLjgwMTYxNzkxIDMxLjY3MTQ1NTM3IC0xMSAyOSBDLTEwLjMyMzI0MjE5IDI4LjI5NDg4MjgxIC05LjY0NjQ4NDM4IDI3LjU4OTc2NTYyIC04Ljk0OTIxODc1IDI2Ljg2MzI4MTI1IEMtNi4yODY2NTkzNyAyMi45NTIxNDY5MyAtNi42NDc5NDA5OCAyMC4wOTMyNzg3OCAtNi45Mzc1IDE1LjUgQy03LjQ2Nzc4NzQgNi4zMzQ3MzQyNSAtNy40Njc3ODc0IDYuMzM0NzM0MjUgLTQgMiBDLTEuODEyNSAwLjY4NzUgLTEuODEyNSAwLjY4NzUgMCAwIFogIiBmaWxsPSIjMTg3MjRFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ4LDYwKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjIyNzM1OTE0IDUuMDI2MTMzNCA0LjM0Mzc1IDYuNjc1NjQ0OTEgNC4zNDM3NSAxMy41OTc2NTYyNSBDLTEuOTI2MjUgMTMuNTk3NjU2MjUgLTguMTk2MjUgMTMuNTk3NjU2MjUgLTE0LjY1NjI1IDEzLjU5NzY1NjI1IEMtMTIuMzAwNDg3NzkgMTguNzcwMzg3NjYgLTEyLjMwMDQ4Nzc5IDE4Ljc3MDM4NzY2IC04LjUzMTI1IDE5LjU5NzY1NjI1IEMtMy43NTI5OTc1NyAxOS41OTc2NTYyNSAtMC4wNTEzNDIxNSAxOC4zNjE2NzI4MyA0LjM0Mzc1IDE2LjU5NzY1NjI1IEM0LjY1NjI1IDE5LjQxMDE1NjI1IDQuNjU2MjUgMTkuNDEwMTU2MjUgNC4zNDM3NSAyMi41OTc2NTYyNSBDMC45MDEyMjIwNSAyNS45MjU0MzMyNyAtMy40MTQ1NjU0OCAyNi4zMjk5Njg0IC04LjAyMzQzNzUgMjYuNjYwMTU2MjUgQy0xMy42ODcyNjY0IDI2LjUyNTcwMzM0IC0xOC4xMzQxNTE4MiAyNS4xMTk3NTQ0MyAtMjIuMTU2MjUgMjEuMDk3NjU2MjUgQy0yNC43NzM1ODM1MyAxNi43MzU0MzM3IC0yNS4zMTY1NTAzOCAxMi41OTU3NjMyOCAtMjQuNjU2MjUgNy41OTc2NTYyNSBDLTIzLjI5NDg1NjcgMy44NjEyMjM1NSAtMjEuNDAxMzMxNDIgMS4xNzA3OTU4IC0xOC4yMTg3NSAtMS4yNzczNDM3NSBDLTEyLjMxODQ0Njg5IC0zLjg2NzcyMDcyIC01LjI1NTA1Mjk0IC00LjQ0OTQ0MzQxIDAgMCBaIE0tMTMuNjU2MjUgNC41OTc2NTYyNSBDLTEzLjk4NjI1IDUuOTE3NjU2MjUgLTE0LjMxNjI1IDcuMjM3NjU2MjUgLTE0LjY1NjI1IDguNTk3NjU2MjUgQy0xMS4wMjYyNSA4LjU5NzY1NjI1IC03LjM5NjI1IDguNTk3NjU2MjUgLTMuNjU2MjUgOC41OTc2NTYyNSBDLTQuOTgzMjM1NTkgMy42NzQ2NDYzMyAtNC45ODMyMzU1OSAzLjY3NDY0NjMzIC03LjUzMTI1IDIuNjYwMTU2MjUgQy0xMC4yMTA5NzMzNSAyLjU4MTM0MDg2IC0xMS40ODU2NTkxNSAzLjAyNTg0OTA4IC0xMy42NTYyNSA0LjU5NzY1NjI1IFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDkxLjY1NjI1LDU1LjQwMjM0Mzc1KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjUyMDkwNTk1IDQuNTExMTYwNzUgMyA2LjQxMTcwNDg5IDMgMTIuNTYyNSBDLTMuMjcgMTIuNTYyNSAtOS41NCAxMi41NjI1IC0xNiAxMi41NjI1IEMtMTMuNjQ0MjM3NzkgMTcuNzM1MjMxNDEgLTEzLjY0NDIzNzc5IDE3LjczNTIzMTQxIC05Ljg3NSAxOC41NjI1IEMtNS4wOTY3NDc1NyAxOC41NjI1IC0xLjM5NTA5MjE1IDE3LjMyNjUxNjU4IDMgMTUuNTYyNSBDMy4zMTI1IDE4LjM3NSAzLjMxMjUgMTguMzc1IDMgMjEuNTYyNSBDLTAuNDQyNTI3OTUgMjQuODkwMjc3MDIgLTQuNzU4MzE1NDggMjUuMjk0ODEyMTUgLTkuMzY3MTg3NSAyNS42MjUgQy0xNS4wMzEwMTY0IDI1LjQ5MDU0NzA5IC0xOS40Nzc5MDE4MiAyNC4wODQ1OTgxOCAtMjMuNSAyMC4wNjI1IEMtMjYuMTE3MzMzNTMgMTUuNzAwMjc3NDUgLTI2LjY2MDMwMDM4IDExLjU2MDYwNzAzIC0yNiA2LjU2MjUgQy0yNC42Mzg2MDY3IDIuODI2MDY3MyAtMjIuNzQ1MDgxNDIgMC4xMzU2Mzk1NSAtMTkuNTYyNSAtMi4zMTI1IEMtMTIuNjA1NTU1NjYgLTUuMzY2NzY4MjUgLTUuOTgyNDU3MiAtNC44NjA3NDY0OCAwIDAgWiBNLTE1IDMuNTYyNSBDLTE1LjMzIDQuODgyNSAtMTUuNjYgNi4yMDI1IC0xNiA3LjU2MjUgQy0xMi4zNyA3LjU2MjUgLTguNzQgNy41NjI1IC01IDcuNTYyNSBDLTYuMzI2OTg1NTkgMi42Mzk0OTAwOCAtNi4zMjY5ODU1OSAyLjYzOTQ5MDA4IC04Ljg3NSAxLjYyNSBDLTExLjU1NDcyMzM1IDEuNTQ2MTg0NjEgLTEyLjgyOTQwOTE1IDEuOTkwNjkyODMgLTE1IDMuNTYyNSBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE2OSw1Ni40Mzc1KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjMgMCA2LjYgMCAxMCAwIEMxMCAxOC4xNSAxMCAzNi4zIDEwIDU1IEM3LjAzIDU1IDQuMDYgNTUgMSA1NSBDMCA1NCAwIDU0IC0wLjEyMDI1NDUyIDUxLjgyOTY5NjY2IEMtMC4xMTgwMzM5MSA1MC44NzI2MTMwNyAtMC4xMTU4MTMyOSA0OS45MTU1Mjk0OCAtMC4xMTM1MjUzOSA0OC45Mjk0NDMzNiBDLTAuMTEzNDQ5ODYgNDcuODQ4Mzk4MjggLTAuMTEzMzc0MzMgNDYuNzY3MzUzMjEgLTAuMTEzMjk2NTEgNDUuNjUzNTQ5MTkgQy0wLjEwODEzNTIyIDQ0LjQ3NzUyNjQgLTAuMTAyOTczOTQgNDMuMzAxNTAzNiAtMC4wOTc2NTYyNSA0Mi4wODk4NDM3NSBDLTAuMDk2MjQxMyA0MC44OTI2NzIyNyAtMC4wOTQ4MjYzNSAzOS42OTU1MDA3OSAtMC4wOTMzNjg1MyAzOC40NjIwNTEzOSBDLTAuMDg3NzQ5NzkgMzQuNjIwNTA5MzQgLTAuMDc1MTk0MTEgMzAuNzc5MDI0NTcgLTAuMDYyNSAyNi45Mzc1IEMtMC4wNTc0ODc0MSAyNC4zNDA0OTU2MyAtMC4wNTI5MjQwOSAyMS43NDM0OTAzNSAtMC4wNDg4MjgxMiAxOS4xNDY0ODQzOCBDLTAuMDM3Nzc0MjcgMTIuNzY0MzAwNjggLTAuMDIwNDk3MDggNi4zODIxNjAwNyAwIDAgWiAiIGZpbGw9IiNEODFGMjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExNjYsNTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMyAwIDYuNiAwIDEwIDAgQzEwIDAuNjYgMTAgMS4zMiAxMCAyIEMxMC45OSAxLjM0IDExLjk4IDAuNjggMTMgMCBDMTYuMzkyMTAyODcgLTAuNTQ2MTg2MDYgMTkuNjA2NTQzNSAtMC41MzU4MDg5MiAyMyAwIEMyNi42MTk5NTgyMSAyLjY1OTU2MTEzIDI4LjIwNjgzODE3IDQuNjQ4NDIzNTEgMjkgOSBDMjkuMDc4MTg2MzYgMTAuNTEzOTU2OTYgMjkuMTA3ODk5MDkgMTIuMDMwOTM1MDcgMjkuMDk3NjU2MjUgMTMuNTQ2ODc1IEMyOS4wOTQ0MzM1OSAxNC4zOTEyMTA5NCAyOS4wOTEyMTA5NCAxNS4yMzU1NDY4NyAyOS4wODc4OTA2MiAxNi4xMDU0Njg3NSBDMjkuMDc5NTExNzIgMTYuOTc4MTY0MDYgMjkuMDcxMTMyODEgMTcuODUwODU5MzcgMjkuMDYyNSAxOC43NSBDMjkuMDU3OTg4MjggMTkuNjM4MTY0MDYgMjkuMDUzNDc2NTYgMjAuNTI2MzI4MTIgMjkuMDQ4ODI4MTIgMjEuNDQxNDA2MjUgQzI5LjAzNzA3NDIyIDIzLjYyNzYzMzE2IDI5LjAxOTEzOTY2IDI1LjgxMzgyNTI4IDI5IDI4IEMyNS43IDI4IDIyLjQgMjggMTkgMjggQzE4LjUwNSAxOC4xIDE4LjUwNSAxOC4xIDE4IDggQzE2LjY4IDcuNjcgMTUuMzYgNy4zNCAxNCA3IEMxMy4wMSA3LjY2IDEyLjAyIDguMzIgMTEgOSBDMTAuNDE0MDczNjYgMTIuMTE2MTA1NTQgMTAuNDE0MDczNjYgMTIuMTE2MTA1NTQgMTAuMzEyNSAxNS42MjUgQzEwLjI0Njc1NzgxIDE2LjgxMzUxNTYzIDEwLjE4MTAxNTYzIDE4LjAwMjAzMTI1IDEwLjExMzI4MTI1IDE5LjIyNjU2MjUgQzEwLjA3NTg5ODQ0IDIwLjE0MTc5Njg3IDEwLjAzODUxNTYyIDIxLjA1NzAzMTI1IDEwIDIyIEM2LjcgMjEuNjcgMy40IDIxLjM0IDAgMjEgQzAgMTQuMDcgMCA3LjE0IDAgMCBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjAzNiw1MykiLz4KPHBhdGggZD0iTTAgMCBDNy44MjQzNDA1OCAtMC4xMTcwMzA3NCA3LjgyNDM0MDU4IC0wLjExNzAzMDc0IDEwLjQ4ODI4MTI1IDIuNDE0MDYyNSBDMTIuNzg3NDM3MTMgNi4yMDk3NTk4NSAxMy43NDA2OTg2IDkuNTU1ODA4MzkgMTMgMTQgQzExLjk1MTAwNjYgMTUuNzE2NTM0NjYgMTAuOTAxMjc3MjcgMTcuNDMyNzI1OTggOS44MzIwMzEyNSAxOS4xMzY3MTg3NSBDOC4yODEzNDc3OCAyMi42MDkzNzYxMSA5LjE2NDUxNTkyIDI1LjM1OTY3NjUzIDEwIDI5IEMxMC4zNTA2MjUgMjkuNzAxMjUgMTAuNzAxMjUgMzAuNDAyNSAxMS4wNjI1IDMxLjEyNSBDMTIuMzk2NjM0OTIgMzMuNzkzMjY5ODUgMTIuMTk1NTczOTMgMzYuMDY2MzkwOTggMTIgMzkgQzExIDQwIDExIDQwIDguMTI4OTA2MjUgNDAuMTMyODEyNSBDNi45NTE5OTIxOSA0MC4xMzAyMzQzOCA1Ljc3NTA3ODEyIDQwLjEyNzY1NjI1IDQuNTYyNSA0MC4xMjUgQzMuMzg4MTY0MDYgNDAuMTI3NTc4MTIgMi4yMTM4MjgxMiA0MC4xMzAxNTYyNSAxLjAwMzkwNjI1IDQwLjEzMjgxMjUgQy0yIDQwIC0yIDQwIC00IDM5IEMtMy4yNDgxNzUxOCAzMS40ODE3NTE4MiAtMy4yNDgxNzUxOCAzMS40ODE3NTE4MiAtMS45Mzc1IDI4LjkzNzUgQy0wLjQzNzQ4NjY0IDI1LjgzNzQ3MjM5IC0wLjY0OTM5MDYgMjMuMzg5MjI0MiAtMSAyMCBDLTIuMzE0MzE2OTUgMTcuOTg3NDUyMTggLTMuNjQ3MjE4ODUgMTUuOTg2ODk3MzEgLTUgMTQgQy01Ljg1NTE0NzQgOS42MjkyNDY2MSAtNC43NjA4MzQzNiA3LjI4MzU1ODE3IC0yLjUgMy42MjUgQy0xLjY3OTQ5NTggMi40MDc5MTg3NiAtMC44NTAyODE2NCAxLjE5NjQ2NzczIDAgMCBaICIgZmlsbD0iI0ZBRkJGQiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1Nyw4MikiLz4KPHBhdGggZD0iTTAgMCBDMy45MDkzODcwMyAzLjczOTQxMzY4IDMuOTA5Mzg3MDMgMy43Mzk0MTM2OCA0LjEzMjgxMjUgNi44NDc2NTYyNSBDNC4xMzAyMzQzOCA3LjU3ODU1NDY5IDQuMTI3NjU2MjUgOC4zMDk0NTMxMyA0LjEyNSA5LjA2MjUgQzQuMTIzNzEwOTQgOS44NjU1ODU5NCA0LjEyMjQyMTg4IDEwLjY2ODY3MTg4IDQuMTIxMDkzNzUgMTEuNDk2MDkzNzUgQzQuMDAyNzk5MjggMTMuOTQyMTE4MSAzLjYyMDk4NDQgMTYuMjE4MTI5NDkgMy4xODc1IDE4LjYyNSBDMi43MDMyNTg3MiAyMi4yNzU5MjQ0MiAzLjIxMzk4MTIzIDIzLjg4MzIwMTQgNS40Mzc1IDI2LjgxMjUgQzUuOTEwNTg1OTQgMjcuMzM0NTcwMzEgNi4zODM2NzE4NyAyNy44NTY2NDA2MiA2Ljg3MTA5Mzc1IDI4LjM5NDUzMTI1IEM4IDMwIDggMzAgOCAzNCBDOC42NiAzNCA5LjMyIDM0IDEwIDM0IEM3Ljk4MzAzMjM0IDI5LjA1NjczNDA2IDcuOTgzMDMyMzQgMjkuMDU2NzM0MDYgNS4yNSAyNC41IEMzLjUwMjExMTMyIDIxLjAwNDIyMjYzIDQuMzAxODA1ODYgMTguODA4MzMxNjUgNSAxNSBDNS4yMjA5MzE1MSAxMC40OTc1NjgxMyA1LjIzOTU1NzQ5IDYuMzU4MTI2NzUgNCAyIEM3LjQ0NTAwNjYgNC45MzU2NjQyMyA3LjU3NDgyNDY0IDcuMjU3NDQyOTQgNy45Njg3NSAxMS41OTc2NTYyNSBDNy45OTg4MzUyIDEzLjkxMDQ1NTggNy43MDc4ODYzOCAxNS44NjYzODczNSA3LjI1IDE4LjEyNSBDNi45ODQxMjA2MSAyMi4yNDYxMzA1MyA3LjEwOTg0MDQyIDIyLjY4NTU3NDIyIDkuNDM3NSAyNS43NSBDOS45MTA1ODU5NCAyNi4yODEwOTM3NSAxMC4zODM2NzE4NyAyNi44MTIxODc1IDEwLjg3MTA5Mzc1IDI3LjM1OTM3NSBDMTIgMjkgMTIgMjkgMTIgMzMgQzE0LjMxIDMzLjY2IDE2LjYyIDM0LjMyIDE5IDM1IEMxOSAzNS45OSAxOSAzNi45OCAxOSAzOCBDMTkuNjM5Mzc1IDM4LjI4ODc1IDIwLjI3ODc1IDM4LjU3NzUgMjAuOTM3NSAzOC44NzUgQzIzIDQwIDIzIDQwIDI0IDQyIEMxOS4yNDAwNTc5OSA0OC4wNjgxMzc5OSAxMy45MjU3ODgzNiA1My40MjgxMzM2MyA3IDU3IEM0IDU2IDQgNTYgMi43OTY4NzUgNTMuOTI1NzgxMjUgQy0wLjc2MDI4NTczIDQ1LjA0NjE1MjQyIC0wLjc2MDI4NTczIDQ1LjA0NjE1MjQyIDEgNDAgQzEuNTE1NjI1IDM5LjE3NSAyLjAzMTI1IDM4LjM1IDIuNTYyNSAzNy41IEM0LjM4NzAyNzU2IDM0LjMyNjkwODU4IDQuNTE2NDQxMTggMzIuNjE1MDg4MjUgNCAyOSBDMy4zNCAyOC4wMzA2MjUgMi42OCAyNy4wNjEyNSAyIDI2LjA2MjUgQy0wLjQxMDU3NzgyIDIyLjM3MTMwMjcyIC0wLjQwODMyNzU1IDIwLjMyODI3MTk5IDAgMTYgQzAuMzMgMTUuMDEgMC42NiAxNC4wMiAxIDEzIEMxLjA5MjQ3MzgxIDExLjUyMzEzODg5IDEuMTI5OTkwNzEgMTAuMDQyMjQ0OTkgMS4xMjUgOC41NjI1IEMxLjEyODg2NzE5IDcuNDE5NzQ2MDkgMS4xMjg4NjcxOSA3LjQxOTc0NjA5IDEuMTMyODEyNSA2LjI1MzkwNjI1IEMxLjAwMjc2MDE1IDQuMDQ2ODQxNDEgMC42MDg1NjE5OSAyLjEyMDMwNzI0IDAgMCBaICIgZmlsbD0iIzI5N0Q1QiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3NCw2MSkiLz4KPHBhdGggZD0iTTAgMCBDMCAyLjY0IDAgNS4yOCAwIDggQy0wLjk5IDcuNjcgLTEuOTggNy4zNCAtMyA3IEMtNi41NTg4MDA1MSA2LjYyNjg5OTk1IC05LjgyNzU4NTIyIDYuMzQwNTE2NjkgLTEzIDguMTI1IEMtMTQuNDYyMjEyMTcgMTAuODY2NjQ3ODEgLTE0LjMxODMzNzMzIDEyLjk0Mzk2MTYyIC0xNCAxNiBDLTEyLjMyMDg1NTg1IDE5LjIyNTQwMTU2IC0xMi4zMjA4NTU4NSAxOS4yMjU0MDE1NiAtOS4zMTI1IDE5Ljc1IEMtNS43MDcwOTgyNCAyMC4wMjIxMDU3OSAtMi41NTAxMDA2NiAxOS42MzkwMTgxMiAxIDE5IEMxIDIxLjMxIDEgMjMuNjIgMSAyNiBDLTYuMzQ1MjM2NzIgMjguMjcwMzQ1ODkgLTEyLjM4MTY4ODY4IDI4Ljg3NjE2MTQyIC0xOS4zNzUgMjUuMjUgQy0yMi44MjkzNDgyMSAyMi4yODkxMzAxIC0yNC42OTA4NzcyNCAyMC4yNzgzNDkyMiAtMjUuMzE2NDA2MjUgMTUuNjY3OTY4NzUgQy0yNS41ODIxMzY1MiA5Ljk1MDQ4MTkxIC0yNC45Njg0NzE1MiA2LjM5NzQ5NTQ3IC0yMSAyIEMtMTQuMTcwMDE0MTEgLTMuMjEyMzU3NjUgLTcuODE4OTkzNjcgLTEuODY5NzU5MzYgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDAyLDU0KSIvPgo8cGF0aCBkPSJNMCAwIEMzIDMuMTkwMzcxOTkgMyAzLjE5MDM3MTk5IDMgNiBDLTAuMDkyNjI3NjcgNy41NDYzMTM4NCAtMy4zNjcwODkxIDcuMzkwNjA3MTYgLTYuNzg1MTU2MjUgNy42MjEwOTM3NSBDLTcuODgxNTAzOTEgNy44MDg2NTIzNCAtNy44ODE1MDM5MSA3LjgwODY1MjM0IC05IDggQy05LjMzIDguNjYgLTkuNjYgOS4zMiAtMTAgMTAgQy03LjY5IDEwLjMzIC01LjM4IDEwLjY2IC0zIDExIEMtMi40Mzc1IDEyLjkzNzUgLTIuNDM3NSAxMi45Mzc1IC0yIDE1IEMtMyAxNiAtMyAxNiAtNS4yODUxNTYyNSAxNi4wOTc2NTYyNSBDLTYuNjU5OTQxNDEgMTYuMDgwMjUzOTEgLTYuNjU5OTQxNDEgMTYuMDgwMjUzOTEgLTguMDYyNSAxNi4wNjI1IEMtOC45ODE2MDE1NiAxNi4wNTM0NzY1NiAtOS45MDA3MDMxMiAxNi4wNDQ0NTMxMyAtMTAuODQ3NjU2MjUgMTYuMDM1MTU2MjUgQy0xMS41NTc5Mjk2OSAxNi4wMjM1NTQ2OSAtMTIuMjY4MjAzMTMgMTYuMDExOTUzMTMgLTEzIDE2IEMtMTMuMzMgMTcuNjUgLTEzLjY2IDE5LjMgLTE0IDIxIEMtMTIuNzYyNSAyMC42NDkzNzUgLTExLjUyNSAyMC4yOTg3NSAtMTAuMjUgMTkuOTM3NSBDLTcuMDk2NzA4IDE5LjA0NDA2NzI3IC01LjEzMjI1ODM2IDE4Ljk5MTE4NzA2IC0yIDIwIEMtMS42NyAyMS4zMiAtMS4zNCAyMi42NCAtMSAyNCBDLTcuMDgzMDUwMzggMjguMTkwNTQ1ODIgLTExLjYyMjE1Nzc3IDI5Ljk3NTQ2ODkgLTE5IDI5IEMtMjEuMDYyNSAyNy4zNzUgLTIxLjA2MjUgMjcuMzc1IC0yMiAyNSBDLTIyLjU2NDA4OTkgMjAuMDM2MDA4OTIgLTIxLjQ2ODAwNjg0IDE1LjcxMzA3NDU4IC0yMCAxMSBDLTE4LjM3NSA5IC0xOC4zNzUgOSAtMTcgOCBDLTE3LjQ5NSA3LjU2Njg3NSAtMTcuOTkgNy4xMzM3NSAtMTguNSA2LjY4NzUgQy0yMCA1IC0yMCA1IC0yMCAyIEMtNi4wODE1NDUwNiAtMS4zMTY3MzgyIC02LjA4MTU0NTA2IC0xLjMxNjczODIgMCAwIFogIiBmaWxsPSIjMjIxRTIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NTIsNzEpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMiAyIDIgMi4zMTI1IDUuMTg3NSBDMS45Njk4MjgxOCA5LjM2ODA5NjIyIDAuNjY2NjA4NjQgMTIuMTgwNjg4NTMgLTEgMTYgQy0xLjU4NzYzMjQ0IDIwLjExMzQyNzEgLTEuMzMwNDM1NTggMjEuNTA0MzQ2NjQgMSAyNSBDMy4zMzQ1ODYzNSAyOC41MDE4Nzk1MyAzLjY3MjYwNzI3IDI5Ljg4MDI4MDQ3IDMgMzQgQzEuOTUxMDA2NiAzNS43MTY1MzQ2NiAwLjkwMTI3NzI3IDM3LjQzMjcyNTk4IC0wLjE2Nzk2ODc1IDM5LjEzNjcxODc1IEMtMS43MTg2NTIyMiA0Mi42MDkzNzYxMSAtMC44MzU0ODQwOCA0NS4zNTk2NzY1MyAwIDQ5IEMwLjM1MDYyNSA0OS43MDEyNSAwLjcwMTI1IDUwLjQwMjUgMS4wNjI1IDUxLjEyNSBDMi4zODM4NTAwOCA1My43Njc3MDAxNyAyLjEzMjA5ODM3IDU2LjA5MzgzNTkxIDIgNTkgQzEuMDEgNTkgMC4wMiA1OSAtMSA1OSBDLTEuMjg4NzUgNTcuNzgzMTI1IC0xLjU3NzUgNTYuNTY2MjUgLTEuODc1IDU1LjMxMjUgQy0yLjQ4MDE5MTExIDUyLjgzMDc4MTA3IC0zLjEwNzk3MDM0IDUwLjc2NzAxMTM3IC00LjE4NzUgNDguNDM3NSBDLTUuMzQyMzE4NDQgNDQuOTczMDQ0NjggLTQuODE4NjU2ODYgNDIuNTI2NTIxODcgLTQgMzkgQy0zLjIyNjU2MjUgMzcuNzMxNTYyNSAtMy4yMjY1NjI1IDM3LjczMTU2MjUgLTIuNDM3NSAzNi40Mzc1IEMtMC42MTEwNTMyMSAzMy4zNDA0ODE1MiAtMC41NTY2MDA4MSAzMS41NDcxOTM1MyAtMSAyOCBDLTIuNDI2MjE2ODQgMjUuMjg4NzM2MTYgLTIuNDI2MjE2ODQgMjUuMjg4NzM2MTYgLTQgMjMgQy00IDIyLjM0IC00IDIxLjY4IC00IDIxIEMtNi45NyAyMSAtOS45NCAyMSAtMTMgMjEgQy0xNi44OTY3Nzg1MSAyNy4wMDIyMTQ0NSAtMTYuODk2Nzc4NTEgMjcuMDAyMjE0NDUgLTE3IDM0IEMtMTYuMzQgMzQuOTY5Mzc1IC0xNS42OCAzNS45Mzg3NSAtMTUgMzYuOTM3NSBDLTEyLjUzNTY0NjkzIDQwLjcxMTA0MDY0IC0xMi40NTUwODUxNiA0Mi41NjI4MzYyOCAtMTMgNDcgQy0xMy45MzU3ODk5NSA0OS4zNTk4MTgxMyAtMTQuOTMzNDc4MDggNTEuNjk2MzEyNjQgLTE2IDU0IEMtMTYuNjkxNDA1MjIgNTYuNzc4ODg2MTMgLTE2LjY5MTQwNTIyIDU2Ljc3ODg4NjEzIC0xNyA1OSBDLTE3Ljk5IDU5IC0xOC45OCA1OSAtMjAgNTkgQy0yMC4yNTgxMzMwMiA1NS4zODYxMzc3NCAtMjAuMTY4MTU2NjcgNTMuMzI5MzA2OCAtMTguNSA1MC4wNjI1IEMtMTYuNjczNDE0OTMgNDYuMzMzMjIyMTUgLTE2LjQ4NjE3MTMzIDQ0LjExMDYyOTM5IC0xNyA0MCBDLTE4LjMxNDMxNjk1IDM3Ljk4NzQ1MjE4IC0xOS42NDcyMTg4NSAzNS45ODY4OTczMSAtMjEgMzQgQy0yMS41IDMxIC0yMS41IDMxIC0yMSAyOCBDLTIwLjMxOTM3NSAyNy4wNzE4NzUgLTE5LjYzODc1IDI2LjE0Mzc1IC0xOC45Mzc1IDI1LjE4NzUgQy0xNi4yOTQzMTIzNCAyMC44MzkwMjk5NyAtMTYuODYxMjA4MTUgMTcuODI0MTczMzMgLTE4IDEzIEMtMTguNjU5OTY3OSAxMS4zMzA2Njk0MiAtMTkuMzI1NTg4NjkgOS42NjM1NDc5IC0yMCA4IEMtMjAuMTI1IDQuNjg3NSAtMjAuMTI1IDQuNjg3NSAtMjAgMiBDLTE5LjM0IDIgLTE4LjY4IDIgLTE4IDIgQy0xOCAyLjY2IC0xOCAzLjMyIC0xOCA0IEMtMTYuNjggNCAtMTUuMzYgNCAtMTQgNCBDLTE0IDQuNjYgLTE0IDUuMzIgLTE0IDYgQy0xNC45OSA2IC0xNS45OCA2IC0xNyA2IEMtMTUuOTcwMjgxNCAxMS4yMzU1MDE3NyAtMTUuOTcwMjgxNCAxMS4yMzU1MDE3NyAtMTMuNzUgMTYgQy0xMC45NzQxNDAxOSAxNy41ODYyMDU2MSAtOS4xMjcxMzUyNSAxNy41MTA1NTI2OSAtNiAxNyBDLTIuMzk2ODM5NzggMTMuNjg4OTg3OTEgLTEuNDQ3Mjk0NzYgMTAuODA4NDE4NyAtMSA2IEMtMy4zMSA2LjMzIC01LjYyIDYuNjYgLTggNyBDLTguMDQyNzIxIDUuMzMzODgwOTUgLTguMDQwNjM4MzIgMy42NjYxNzExNSAtOCAyIEMtNS45NTQ0Nzk1OCAtMC4wNDU1MjA0MiAtMi43Mjk0MTkxNCAwLjIzOTQyMjczIDAgMCBaICIgZmlsbD0iIzIyNzg1NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3MCw2MikiLz4KPHBhdGggZD0iTTAgMCBDMC45NDg3NSAwLjY2IDEuODk3NSAxLjMyIDIuODc1IDIgQzMuMzAxNTM3MjcgNi4zNTA2ODAxOCAzLjQ1MjcyODcyIDguMjkzODg3MTIgMC42MjUgMTEuNzUgQy0wLjI4MjUgMTIuNDkyNSAtMS4xOSAxMy4yMzUgLTIuMTI1IDE0IEMtMi43MDYzNjcxOSAxNC41MTY5MTQwNiAtMy4yODc3MzQzOCAxNS4wMzM4MjgxMiAtMy44ODY3MTg3NSAxNS41NjY0MDYyNSBDLTYuNzk2MjA2MzYgMTcuNDI5OTAwMDYgLTkuMjc0ODQ0NzUgMTcuNzMzMjU1NzkgLTEyLjY4NzUgMTguMTg3NSBDLTEzLjgyMzE2NDA2IDE4LjM0NjA1NDY5IC0xNC45NTg4MjgxMiAxOC41MDQ2MDkzOCAtMTYuMTI4OTA2MjUgMTguNjY3OTY4NzUgQy0xOS4xMjUgMTkgLTE5LjEyNSAxOSAtMjIuMTI1IDE5IEMtMjMuOTMxNDYxMTggMTUuMzg3MDc3NjQgLTI1LjEyNSAxMi45OTMwMDYgLTI1LjEyNSA4LjkzNzUgQy0yMy41NjkwNzIyNyA0LjM2Njk2MjI5IC0yMS4wMzM3Mjg5IDEuMTk5NzcyNDUgLTE2LjkzNzUgLTEuMzc1IEMtMTEuMDE1MDAyNTMgLTIuNjkxMTEwNTUgLTUuMzkzODE5MTMgLTMuMDkxNTc5MjYgMCAwIFogTS0xOC4xMjUgNSBDLTE4Ljc4NSA2LjMyIC0xOS40NDUgNy42NCAtMjAuMTI1IDkgQy0xOC44MDUgNy42OCAtMTcuNDg1IDYuMzYgLTE2LjEyNSA1IEMtMTYuNzg1IDUgLTE3LjQ0NSA1IC0xOC4xMjUgNSBaIE0tMTIuMTI1IDkgQy0xMy45NTgwMDkwOSAxMS4xMDU3NTY0MyAtMTMuOTU4MDA5MDkgMTEuMTA1NzU2NDMgLTE1LjEyNSAxMyBDLTkuMzI4NzM4OTMgMTIuNjAwMjU3ODYgLTUuNzEwMjc1MzcgMTEuODk3NDg0MDcgLTEuMTI1IDggQy0xLjEyNSA3LjAxIC0xLjEyNSA2LjAyIC0xLjEyNSA1IEMtNS45NTc3NzI2OCA0LjQzMTQzODUxIC04LjM2ODA4Njg2IDYuMDU5ODA3MTEgLTEyLjEyNSA5IFogIiBmaWxsPSIjMjIxRTIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1ODUuMTI1LDQ5KSIvPgo8cGF0aCBkPSJNMCAwIEMyLjk3IDAgNS45NCAwIDkgMCBDOS4zMyAxLjMyIDkuNjYgMi42NCAxMCA0IEMxMC41MTU2MjUgMy4zNCAxMS4wMzEyNSAyLjY4IDExLjU2MjUgMiBDMTQuODI2NDEzMTkgLTAuNjc4MDgyNjIgMTYuODgzOTk1MjUgLTAuMzgxMTExNTUgMjEgMCBDMjEuNjYgMC4zMyAyMi4zMiAwLjY2IDIzIDEgQzIyLjY3IDMuNjQgMjIuMzQgNi4yOCAyMiA5IEMxOSAxMCAxOSAxMCAxNy4wNjI1IDkuMzEyNSBDMTYuMzgxODc1IDkuMjA5Mzc1IDE1LjcwMTI1IDkuMTA2MjUgMTUgOSBDMTEuNjQ5OTE3OTUgMTEuNzc1NzgyMjcgMTAuMTM2Mzk1ODYgMTMuNjg5OTI2MiA5LjY4MzU5Mzc1IDE4LjAzOTA2MjUgQzkuNjAyMzgyODEgMTkuMjIyNDIxODcgOS41MjExNzE4OCAyMC40MDU3ODEyNSA5LjQzNzUgMjEuNjI1IEM5LjM1MzcxMDk0IDIyLjgxMzUxNTYzIDkuMjY5OTIxODcgMjQuMDAyMDMxMjUgOS4xODM1OTM3NSAyNS4yMjY1NjI1IEM5LjEyMzAwNzgxIDI2LjE0MTc5Njg3IDkuMDYyNDIxODcgMjcuMDU3MDMxMjUgOSAyOCBDNi4wMyAyOCAzLjA2IDI4IDAgMjggQzAgMTguNzYgMCA5LjUyIDAgMCBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE3Niw1MykiLz4KPHBhdGggZD0iTTAgMCBDMC40OTUgMS40ODUgMC40OTUgMS40ODUgMSAzIEMwLjAxIDMuOTkgLTAuOTggNC45OCAtMiA2IEMtMi43MjcwMzEyNSA1LjczNDQ1MzEzIC0zLjQ1NDA2MjUgNS40Njg5MDYyNSAtNC4yMDMxMjUgNS4xOTUzMTI1IEMtMjUuMTQ4Njk1MTMgLTIuMTYyNDkwMzQgLTQ1LjE2MzM2MjQ5IC0xLjA2MjQxOCAtNjYgNiBDLTY2LjMzIDQuMzUgLTY2LjY2IDIuNyAtNjcgMSBDLTQ4Ljc3Mzk1ODUzIC05LjkzNTYyNDg4IC0xOC43MTE0Nzg5MyAtOC4zODU4NDYyMiAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4MjAsMzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyLjMzIDEuNjUgMi42NiAzLjMgMyA1IEM0LjY1IDUgNi4zIDUgOCA1IEM3LjAxIDYuNDg1IDcuMDEgNi40ODUgNiA4IEM1LjgzMjg2NDMxIDEwLjYyNTMxNTI0IDUuODMyODY0MzEgMTAuNjI1MzE1MjQgNiAxMyBDNi45MDc1IDEyLjQ4NDM3NSA3LjgxNSAxMS45Njg3NSA4Ljc1IDExLjQzNzUgQzEyIDEwIDEyIDEwIDE0LjM3NSAxMC4zMTI1IEMxNC45MTEyNSAxMC41MzkzNzUgMTUuNDQ3NSAxMC43NjYyNSAxNiAxMSBDMTUuNjcgMTIuMzIgMTUuMzQgMTMuNjQgMTUgMTUgQzE2Ljk4IDE0LjY3IDE4Ljk2IDE0LjM0IDIxIDE0IEMxOS42OCAxNi42NCAxOC4zNiAxOS4yOCAxNyAyMiBDMTYuMjM4MTY0MDYgMjEuNzgzNDM3NSAxNS40NzYzMjgxMyAyMS41NjY4NzUgMTQuNjkxNDA2MjUgMjEuMzQzNzUgQzMuNTQ5MjExNDUgMTguMzM5MTEzMiAtMy45OTQ5NjA1MyAxOC41NDQyMTE5MSAtMTUgMjIgQy0xNi4zMiAxOS4zNiAtMTcuNjQgMTYuNzIgLTE5IDE0IEMtMTYuNjkgMTQuMzMgLTE0LjM4IDE0LjY2IC0xMiAxNSBDLTEyLjY2IDEzLjM1IC0xMy4zMiAxMS43IC0xNCAxMCBDLTEwLjI4MTExNzYxIDEwLjUwNzEyMDMzIC03LjI2NTQ1NzYxIDExLjExNjA4MjE1IC00IDEzIEMtMy43OTkxMzU1NyA5LjI4NDAwODA5IC0zLjg0ODA1NjMgOC4yMjc5MTU1NSAtNiA1IEMtNC4zNSA1IC0yLjcgNSAtMSA1IEMtMC42NyAzLjM1IC0wLjM0IDEuNyAwIDAgWiAiIGZpbGw9IiNGM0Y4RjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNjAsMzcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuNzQyMTY3OTcgMC4wNTQxNDA2MyAxLjc0MjE2Nzk3IDAuMDU0MTQwNjMgMy41MTk1MzEyNSAwLjEwOTM3NSBDNC4zOTk5NjA5NCAwLjE1NTc4MTI1IDUuMjgwMzkwNjMgMC4yMDIxODc1IDYuMTg3NSAwLjI1IEM1Ljg1NzUgMS45IDUuNTI3NSAzLjU1IDUuMTg3NSA1LjI1IEMzLjIwNzUgNS41OCAxLjIyNzUgNS45MSAtMC44MTI1IDYuMjUgQy0xLjA1MDMzMjAzIDcuMzU0MDgyMDMgLTEuMDUwMzMyMDMgNy4zNTQwODIwMyAtMS4yOTI5Njg3NSA4LjQ4MDQ2ODc1IEMtMi43NDE2MTc3NyAxNC41MzkxODMxOCAtMy44MTM2MDk0MSAxOC40MDQ2OTk1NSAtOC44MTI1IDIyLjI1IEMtMTEuNTc3MDIwMzMgMjMuNjMyMjYwMTYgLTEzLjg1ODYzNjMgMjMuMzQ1MjUzODcgLTE2LjkzNzUgMjMuMzEyNSBDLTE4LjAzMzIwMzEyIDIzLjMwMzQ3NjU2IC0xOS4xMjg5MDYyNSAyMy4yOTQ0NTMxMyAtMjAuMjU3ODEyNSAyMy4yODUxNTYyNSBDLTIxLjUyMjM4MjgxIDIzLjI2Nzc1MzkxIC0yMS41MjIzODI4MSAyMy4yNjc3NTM5MSAtMjIuODEyNSAyMy4yNSBDLTIyLjQ4MjUgMjEuNiAtMjIuMTUyNSAxOS45NSAtMjEuODEyNSAxOC4yNSBDLTE5LjgzMjUgMTcuOTIgLTE3Ljg1MjUgMTcuNTkgLTE1LjgxMjUgMTcuMjUgQy0xNS41ODE3NTc4MSAxNi4zNTc5Njg3NSAtMTUuMzUxMDE1NjIgMTUuNDY1OTM3NSAtMTUuMTEzMjgxMjUgMTQuNTQ2ODc1IEMtMTQuNzg3MTQ4NDQgMTMuMzc2NDA2MjUgLTE0LjQ2MTAxNTYzIDEyLjIwNTkzNzUgLTE0LjEyNSAxMSBDLTEzLjgxMTc1NzgxIDkuODM5ODQzNzUgLTEzLjQ5ODUxNTYyIDguNjc5Njg3NSAtMTMuMTc1NzgxMjUgNy40ODQzNzUgQy0xMC40NDExMzY5OSAwLjk5NjQ1MTA5IC02Ljc2ODAwODc1IC0wLjI3MzQ1NDkgMCAwIFogIiBmaWxsPSIjRjVGOUY2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDM2LjgxMjUsODQuNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuOTcgMCA1Ljk0IDAgOSAwIEM5IDkuMjQgOSAxOC40OCA5IDI4IEM2LjAzIDI4IDMuMDYgMjggMCAyOCBDMCAxOC43NiAwIDkuNTIgMCAwIFogIiBmaWxsPSIjMDA4NDJBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDk5LDUzKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjgwODE5NTIyIDAuMDEzNzU3MzUgNC44MDgxOTUyMiAwLjAxMzc1NzM1IDcuODEyNSAyLjg3NSBDOC40OTMxMjUgNC4xMTI1IDguNDkzMTI1IDQuMTEyNSA5LjE4NzUgNS4zNzUgQzYuODc3NSA1LjcwNSA0LjU2NzUgNi4wMzUgMi4xODc1IDYuMzc1IEMxLjg1NzUgOC4wMjUgMS41Mjc1IDkuNjc1IDEuMTg3NSAxMS4zNzUgQzQuNjUyNSAxMC44OCA0LjY1MjUgMTAuODggOC4xODc1IDEwLjM3NSBDOC42ODA5ODE3NSAxNC41MjAyNDY3MSA4LjMyNjA0MzA3IDE2LjE1NDk2MSA2LjA2MjUgMTkuNzUgQzMuMTg3NSAyMi4zNzUgMy4xODc1IDIyLjM3NSAwLjE4NzUgMjMuMTI1IEMtNC4xMzU1MDE1OSAyMi4wNDQyNDk2IC01LjQ3Mjc4ODMxIDIwLjA5MTAxMjY4IC03LjgxMjUgMTYuMzc1IEMtOC4xMjUgMTMgLTguMTI1IDEzIC03LjgxMjUgMTAuMzc1IEMtNS41MDI1IDEwLjM3NSAtMy4xOTI1IDEwLjM3NSAtMC44MTI1IDEwLjM3NSBDLTEuMTQyNSA5LjA1NSAtMS40NzI1IDcuNzM1IC0xLjgxMjUgNi4zNzUgQy00Ljc4MjUgNS44OCAtNC43ODI1IDUuODggLTcuODEyNSA1LjM3NSBDLTUuNjI4MjEwMTUgMC44NjA4MDA5NyAtNS4wOTkzMDg2NyAwLjE5NDExNzE3IDAgMCBaICIgZmlsbD0iI0U1RUZFQiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2MC44MTI1LDU3LjYyNSkiLz4KPHBhdGggZD0iTTAgMCBDMTUuNTEgMCAzMS4wMiAwIDQ3IDAgQzQ3IDEuNjUgNDcgMy4zIDQ3IDUgQzMxLjQ5IDUgMTUuOTggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1OTUsNzIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuNjIgMCA5LjI0IDAgMTQgMCBDMTQgMS4zMiAxNCAyLjY0IDE0IDQgQzEwLjcgNCA3LjQgNCA0IDQgQzQgNS45OCA0IDcuOTYgNCAxMCBDNy4zIDEwIDEwLjYgMTAgMTQgMTAgQzE0IDExLjMyIDE0IDEyLjY0IDE0IDE0IEMxMC43IDE0IDcuNCAxNCA0IDE0IEM0IDE1Ljk4IDQgMTcuOTYgNCAyMCBDNy4zIDIwIDEwLjYgMjAgMTQgMjAgQzE0LjMzIDIxLjMyIDE0LjY2IDIyLjY0IDE1IDI0IEMxMC4wNSAyNCA1LjEgMjQgMCAyNCBDMCAxNi4wOCAwIDguMTYgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDU2LDg1KSIvPgo8cGF0aCBkPSJNMCAwIEMxNC41MiAwIDI5LjA0IDAgNDQgMCBDNDMuMzQgMS42NSA0Mi42OCAzLjMgNDIgNSBDMjguMTQgNSAxNC4yOCA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0MSw5NCkiLz4KPHBhdGggZD0iTTAgMCBDMTMuODYgMCAyNy43MiAwIDQyIDAgQzQyLjY2IDEuNjUgNDMuMzIgMy4zIDQ0IDUgQzI5LjQ4IDUgMTQuOTYgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1NDEsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuOTUxOTMyMjEgNS44NTU3OTY2MyAzLjYyOTIyNzk1IDE1LjU1OTg2NzYxIDAuOTE0MDYyNSAyMS4yOTI5Njg3NSBDMC40NDc0MjE4NyAyMS44MzU2NjQwNiAtMC4wMTkyMTg3NSAyMi4zNzgzNTkzOCAtMC41IDIyLjkzNzUgQy0zLjIyMjkwNTM0IDI1LjY1Mjg1NDI2IC0zLjIyMjkwNTM0IDI1LjY1Mjg1NDI2IC0zLjExMzI4MTI1IDI4LjQwNjI1IEMtMi44NDc1MjI1NiAzMC42NDI3NjQ2OSAtMi41MDI2MTIyNCAzMi44MDU0MjU3OCAtMiAzNSBDLTYuNjI1IDM4IC02LjYyNSAzOCAtMTAgMzggQy0xMC4zMyAzOS4zMiAtMTAuNjYgNDAuNjQgLTExIDQyIEMtMTIuMzIgNDIgLTEzLjY0IDQyIC0xNSA0MiBDLTE2LjcwMzEyNSA0MC4xMDE1NjI1IC0xNi43MDMxMjUgNDAuMTAxNTYyNSAtMTguMjUgMzcuNjI1IEMtMTguNzcwNzgxMjUgMzYuODEyODkwNjIgLTE5LjI5MTU2MjUgMzYuMDAwNzgxMjUgLTE5LjgyODEyNSAzNS4xNjQwNjI1IEMtMjEgMzMgLTIxIDMzIC0yMSAzMSBDLTE4LjA5NDUxMTE4IDI4Ljk1ODMwNTE1IC0xNi41OTg1Nzk1NCAyOCAtMTMgMjggQy0xMyAyOC45OSAtMTMgMjkuOTggLTEzIDMxIEMtMTAuMDI5ODIzMDYgMzAuMzcxODk4MjcgLTEwLjAyOTgyMzA2IDMwLjM3MTg5ODI3IC03IDI5IEMtNS44MDE2MTc5MSAyNi42NzE0NTUzNyAtNS44MDE2MTc5MSAyNi42NzE0NTUzNyAtNSAyNCBDLTQuMzI1ODIwMzEgMjMuMjk4NzUgLTMuNjUxNjQwNjMgMjIuNTk3NSAtMi45NTcwMzEyNSAyMS44NzUgQy0wLjI3MTkxNzk2IDE3LjkzMDQwMjQ0IC0wLjU4MDIxNDc2IDE0Ljk1NDI2NzczIC0wLjgxMjUgMTAuMzEyNSBDLTEuMDkwOTg5MDUgMi4xODE5NzgxMSAtMS4wOTA5ODkwNSAyLjE4MTk3ODExIDAgMCBaICIgZmlsbD0iI0VCRjNFRiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM0Miw2NSkiLz4KPHBhdGggZD0iTTAgMCBDLTAuNDAyODE3NzEgNS44NDA4NTY3NCAtMS4xMTI3NzkgOS4zNzczNTg4MSAtNSAxNCBDLTguMjkwNzY2NiAxNi43MTg0NTkzNyAtMTAuMDk2NDA4NjQgMTcuOTMzMDY3MzEgLTE0LjM3NSAxOC4yNSBDLTE1LjI0MTI1IDE4LjE2NzUgLTE2LjEwNzUgMTguMDg1IC0xNyAxOCBDLTE2LjY2ODA5NTE4IDExLjY5MzgwODQyIC0xNS41MDUxNjQ5NyA3LjU2NTU1NTkzIC0xMSAzIEMtNy4yMTg5MzIxOCAwLjU1ODA2MDM3IC00LjQ5MzYzOTc2IC0wLjM5NjQ5NzYzIDAgMCBaICIgZmlsbD0iIzAwMDAwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ1LDM3KSIvPgo8cGF0aCBkPSJNMCAwIEM0Ljc1MDUzNTExIC0wLjA3NDM1MjIyIDkuNTAwNzI4ODcgLTAuMTI4Njk2OTEgMTQuMjUxNzA4OTggLTAuMTY0Nzk0OTIgQzE1Ljg2NjY3Nzg5IC0wLjE3OTg0ODc2IDE3LjQ4MTYwNjEzIC0wLjIwMDI5NjQ4IDE5LjA5NjQzNTU1IC0wLjIyNjMxODM2IEMyMS40MjI0NjU1NSAtMC4yNjI4NTI4NiAyMy43NDc5NTM0MSAtMC4yNzk3NjAxNSAyNi4wNzQyMTg3NSAtMC4yOTI5Njg3NSBDMjcuMTUxMDcxODUgLTAuMzE2MTk0NTMgMjcuMTUxMDcxODUgLTAuMzE2MTk0NTMgMjguMjQ5Njc5NTcgLTAuMzM5ODg5NTMgQzMyLjY1ODMwNTk5IC0wLjM0MTM1Nzg4IDM1LjUyNjI3Nzc5IDAuMjE1ODYwOTQgMzkgMyBDMzkgMy42NiAzOSA0LjMyIDM5IDUgQzI2LjEzIDUgMTMuMjYgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1NDEsNTApIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEM1LjE4NDE5OTU5IDMuNzk2NTQ1NjcgNS4zODczNDU0OCA3LjExNjc2MjIgNS4yMzgyODEyNSAxMS44NjMyODEyNSBDNC45NDYwNDkxMyAxNC40ODM3ODg5NyA0LjA0MjM4MTk1IDE2LjU4OTQ5MTczIDMgMTkgQzIuNDgyMDk2ODIgMjMuMDU2OTA4MjUgMi42OTk5NDI5NCAyNC41NDk5MTQ0MSA1IDI4IEM3LjMzNDU4NjM1IDMxLjUwMTg3OTUzIDcuNjcyNjA3MjcgMzIuODgwMjgwNDcgNyAzNyBDNi4zNDg5OTE3IDM4LjE2Njk1MjY0IDUuNjU4MzE0NjEgMzkuMzEyMzI1OTggNC45Mzc1IDQwLjQzNzUgQzMuMTY4MTQxMTcgNDMuMjg2MDQyMjIgMi45OTk2OTkxNiA0My45ODI4NTIyOSAzLjA2MjUgNDcuNTYyNSBDNC4wMDI5NTg2MSA1MS4wMTA4NDgyMyA1LjM3ODg4Njc3IDUzLjgyODI1NjcyIDcgNTcgQzcgNTguMzIgNyA1OS42NCA3IDYxIEM1LjAyIDYxLjQ5NSA1LjAyIDYxLjQ5NSAzIDYyIEMyLjcxMTI1IDYwLjc4MzEyNSAyLjQyMjUgNTkuNTY2MjUgMi4xMjUgNTguMzEyNSBDMS41MTk4MDg4OSA1NS44MzA3ODEwNyAwLjg5MjAyOTY2IDUzLjc2NzAxMTM3IC0wLjE4NzUgNTEuNDM3NSBDLTEuMzQyMzE4NDQgNDcuOTczMDQ0NjggLTAuODE4NjU2ODYgNDUuNTI2NTIxODcgMCA0MiBDMC43NzM0Mzc1IDQwLjczMTU2MjUgMC43NzM0Mzc1IDQwLjczMTU2MjUgMS41NjI1IDM5LjQzNzUgQzMuNDExMzY2MjEgMzYuMzAyNDY1OTkgMy41MTMyNzU5MiAzNC41OTI5MzE0MSAzIDMxIEMyLjM0IDMwLjAxIDEuNjggMjkuMDIgMSAyOCBDLTEuMzMwNDM1NTggMjQuNTA0MzQ2NjQgLTEuNTg3NjMyNDQgMjMuMTEzNDI3MSAtMSAxOSBDLTAuNTA1IDE3Ljg2NTYyNSAtMC4wMSAxNi43MzEyNSAwLjUgMTUuNTYyNSBDMi41NDM3NjAwOCAxMC43MDg1Njk4MSAyLjY5NzAxMDU0IDcuMDQ3NDY4NDUgMSAyLjA2MjUgQzAuNjcgMS4zODE4NzUgMC4zNCAwLjcwMTI1IDAgMCBaICIgZmlsbD0iI0U5RjFFRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2OSw1OSkiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwLjMzIDIuNjQgMC42NiA0IDEgQzUuMTU2NjQ3MzcgNi40ODI2OTA2OSA1LjExNDE2MjU1IDExLjgwMzM5Mjc0IDUuMDYyNSAxNy4zNzUgQzUuMDU3OTg4MjggMTguMzAxODM1OTQgNS4wNTM0NzY1NiAxOS4yMjg2NzE4OCA1LjA0ODgyODEyIDIwLjE4MzU5Mzc1IEM1LjAzNzExNTc0IDIyLjQ1NTc5NzA5IDUuMDIwNzEzNzIgMjQuNzI3ODYzODggNSAyNyBDMy4zNSAyNy4zMyAxLjcgMjcuNjYgMCAyOCBDLTIuNjA1MTM5NTkgMjQuMDkyMjkwNjIgLTIuMjkzNjc1NjUgMjAuNzc3NzA5MjEgLTIuMjUgMTYuMjUgQy0yLjI1NzczNDM4IDE1LjQ2MzY3MTg4IC0yLjI2NTQ2ODc1IDE0LjY3NzM0Mzc1IC0yLjI3MzQzNzUgMTMuODY3MTg3NSBDLTIuMjU2ODM4MzYgOC44NzA4NDc1NSAtMS41OTU2NjE5NSA0LjczNjMyOTkxIDAgMCBaICIgZmlsbD0iIzIyMUUyMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTY5LDcxKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjY3NTQyOTc2IDAuMjg2MDQ4OTggMy4zNDM4NTM0MyAwLjYxNzgxMjMzIDUgMSBDNi4wNjgwODM3NCA3LjI3NDk5MTk3IDcuMDQzNjc4MzkgMTMuODY4OTY0ODMgNSAyMCBDNC40NDQ5NTIwOSAyNS44ODM1MDc4OCA1Ljc0ODA2MTcyIDI4LjIyMzcxNTY1IDkgMzMgQzkuNjgyNDU2MDcgMzcuMDA5NDI5NCA5LjA2MjU0MzA2IDM5LjEyMDM1OTYxIDYuOTM3NSA0Mi40Mzc1IEM1LjE4NzQ3ODQxIDQ1LjI2MTExNjM5IDQuOTk5MzU1NTggNDUuOTYzOTEyNyA1LjA2MjUgNDkuNSBDNi4wNjQxNTYzNSA1My4yMzk1MTcwMiA3LjQxMDgyMDg0IDU2LjQ3NjE2Nzk1IDkgNjAgQzkgNjAuNjYgOSA2MS4zMiA5IDYyIEM4LjAxIDYyIDcuMDIgNjIgNiA2MiBDNS4xMjcyMDEzOCA2MC4xMzM2MDAxOSA0LjI3NzQ4OTczIDU4LjI1NjM5Mzg5IDMuNDM3NSA1Ni4zNzUgQzIuOTYxODM1OTQgNTUuMzMwODU5MzggMi40ODYxNzE4OCA1NC4yODY3MTg3NSAxLjk5NjA5Mzc1IDUzLjIxMDkzNzUgQzAuODc4NDcyMzMgNDkuNjA4MjUxOTcgMS4wMTg2Mjk2NiA0Ny42MDg1ODA1MSAyIDQ0IEMyLjUxNTYyNSA0My4xNzUgMy4wMzEyNSA0Mi4zNSAzLjU2MjUgNDEuNSBDNS4zODcwMjc1NiAzOC4zMjY5MDg1OCA1LjUxNjQ0MTE4IDM2LjYxNTA4ODI1IDUgMzMgQzQuMzE5Mzc1IDMyLjA3MTg3NSAzLjYzODc1IDMxLjE0Mzc1IDIuOTM3NSAzMC4xODc1IEMwLjMyMzM1MDI2IDI1Ljg4NjgwMjA0IDAuODgyMTgxNzcgMjIuNzc3MDAxIDIgMTggQzIuMzMgMTcuMzQgMi42NiAxNi42OCAzIDE2IEMzLjQxNzQwMjY4IDExLjA1OTExNzE1IDMuNDg3NDY4NzMgNi40MjIxNjY2NCAxIDIgQzAuMzQgMS42NyAtMC4zMiAxLjM0IC0xIDEgQy0wLjY3IDAuNjcgLTAuMzQgMC4zNCAwIDAgWiAiIGZpbGw9IiMxRDc1NTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzAsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMC42NiAwLjY2IDEuMzIgMSAyIEMwLjY3IDIuNjYgMC4zNCAzLjMyIDAgNCBDMC4wMjM3OTA0IDYuMzExMDc4NzggMC4wMjM3OTA0IDYuMzExMDc4NzggMC4zMTI1IDguODc1IEMwLjM5MTEzMjgxIDkuNzM4NjcxODcgMC40Njk3NjU2MyAxMC42MDIzNDM3NSAwLjU1MDc4MTI1IDExLjQ5MjE4NzUgQzEuMDAzMjA3MjQgMTQuMDE3OTA0NzUgMS44MTI2MDgzMyAxNS43NDgyMTM0IDMgMTggQzMuNzA0NDkyODkgMjMuNDAxMTEyMTcgMS45Mjk0NDIzOSAyNS42MDU4MzY0MiAtMSAzMCBDLTEuNjc4NzgwNTkgMzQuMDcyNjgzNTYgLTEuMzQxNzI0MDYgMzUuNDk4MDkyNzkgMSAzOC45Mzc1IEMzLjQ1MjU5MTI5IDQyLjY5MzAzMDQxIDMuNTUxNTQyOTEgNDQuNTg3NjU2NyAzIDQ5IEMyLjA2NTUzNDY1IDUxLjAzMTQ0NjQxIDEuMDY3NzUyMjQgNTMuMDM1MzM1ODcgMCA1NSBDLTAuNjk5MDc0MTQgNTcuNzM1NzI1ODUgLTAuNjk5MDc0MTQgNTcuNzM1NzI1ODUgLTEgNjAgQy0yLjMyIDU5LjY3IC0zLjY0IDU5LjM0IC01IDU5IEMtNC41MjI2OTE2MiA1Ny41NDEwNTc0IC00LjA0MzA4OTU4IDU2LjA4Mjg2NTA0IC0zLjU2MjUgNTQuNjI1IEMtMy4xNjIyNDYwOSA1My40MDY4MzU5NCAtMy4xNjIyNDYwOSA1My40MDY4MzU5NCAtMi43NTM5MDYyNSA1Mi4xNjQwNjI1IEMtMiA1MCAtMiA1MCAtMSA0OCBDLTAuNTQzMTA3NzYgNDQuMDcwNzI2NzUgLTAuOTU5NzA3MDkgNDEuNzM5NDU4MTMgLTMgMzguNDM3NSBDLTUuNzU4MjkzODQgMzMuNjk2NjgyNDYgLTUuNzU4MjkzODQgMzMuNjk2NjgyNDYgLTUgMzAgQy00LjM0IDI5LjA1MTI1IC0zLjY4IDI4LjEwMjUgLTMgMjcuMTI1IEMtMC41ODgzOTUzIDIzLjM1Njg2NzY2IC0wLjUyMDEwNzIzIDIxLjM5OTAxNzAyIC0xIDE3IEMtMS4zMyAxNi4xOTU2MjUgLTEuNjYgMTUuMzkxMjUgLTIgMTQuNTYyNSBDLTMuNDY1MDU4MjkgMTAuODA4Mjg4MTIgLTMuMzIwMjAxNTkgOC4wMzQ1NDAwMiAtMyA0IEMtMS41IDEuNSAtMS41IDEuNSAwIDAgWiAiIGZpbGw9IiNGMUY2RjQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNTEsNjApIi8+CjxwYXRoIGQ9Ik0wIDAgQzMgMSAzIDEgNSA0IEM1IDQuOTkgNSA1Ljk4IDUgNyBDNS42NiA2LjY3IDYuMzIgNi4zNCA3IDYgQzguNTQwMjM5OTYgNS45MzA0OTQ1OSAxMC4wODMzNDk4OCA1LjkxNTQ3NjQzIDExLjYyNSA1LjkzNzUgQzEyLjg1MDg5ODQ0IDUuOTUxMDM1MTYgMTIuODUwODk4NDQgNS45NTEwMzUxNiAxNC4xMDE1NjI1IDUuOTY0ODQzNzUgQzE1LjA0MTI4OTA2IDUuOTgyMjQ2MDkgMTUuMDQxMjg5MDYgNS45ODIyNDYwOSAxNiA2IEMxNS4yMzY4NzUgNi43NDI1IDE0LjQ3Mzc1IDcuNDg1IDEzLjY4NzUgOC4yNSBDMTEuMDU1OTU5NzIgMTAuNzU4MDE3NDUgMTEuMDU1OTU5NzIgMTAuNzU4MDE3NDUgOS42NTIzNDM3NSAxMy4wOTc2NTYyNSBDNy41MTM0ODk4OSAxNS41NjAxMTkyIDYuMDYwMDUxNDUgMTUuNzE4NTYzODUgMi44NzUgMTYuMTg3NSBDLTAuMzYzMTQzNTQgMTYuNDU4MzM3OTMgLTAuMzYzMTQzNTQgMTYuNDU4MzM3OTMgLTMgMTggQy00LjY2NjE3MTE1IDE4LjA0MDYzODMyIC02LjMzMzg4MDk1IDE4LjA0MjcyMSAtOCAxOCBDLTcuMjU5NDMzNTkgMTYuOTMwNzIyNjYgLTcuMjU5NDMzNTkgMTYuOTMwNzIyNjYgLTYuNTAzOTA2MjUgMTUuODM5ODQzNzUgQy0xLjU0NzYwNyA4LjUwMTAxOTAzIC0xLjU0NzYwNyA4LjUwMTAxOTAzIDAgMCBaICIgZmlsbD0iI0VGRjVGMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNiw1NSkiLz4KPHBhdGggZD0iTTAgMCBDMS44NzUgMS4xMjUgMS44NzUgMS4xMjUgMyAzIEMzLjY4NzUgNi4xODc1IDMuNjg3NSA2LjE4NzUgNCA5IEMwLjM3IDkgLTMuMjYgOSAtNyA5IEMtNi4wMSA5Ljk5IC01LjAyIDEwLjk4IC00IDEyIEMtMC4zNTQ1ODE1NSAxMS43NjUyMjgwMSAtMC4zNTQ1ODE1NSAxMS43NjUyMjgwMSAzIDExIEMyLjY3IDEyLjY1IDIuMzQgMTQuMyAyIDE2IEMtNC4yNDE1OTc5NyAxNy4zNDYyMjcwMSAtNC4yNDE1OTc5NyAxNy4zNDYyMjcwMSAtNy44NzUgMTUuNjg3NSBDLTEwIDE0IC0xMCAxNCAtMTEgMTIgQy0xMS41NzE0Mjg1NyA0LjkxNDI4NTcxIC0xMS41NzE0Mjg1NyA0LjkxNDI4NTcxIC05LjQzNzUgMS41IEMtNi4wODk2NTY1MSAtMC41NjAyMTEzOCAtMy44NTk4NTc1MyAtMC40OTEyNTQ1OSAwIDAgWiBNLTUgMyBDLTUuOTkgNC40ODUgLTUuOTkgNC40ODUgLTcgNiBDLTQuNjkgNiAtMi4zOCA2IDAgNiBDLTAuNjYgNS4wMSAtMS4zMiA0LjAyIC0yIDMgQy0yLjk5IDMgLTMuOTggMyAtNSAzIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTAwLDkzKSIvPgo8cGF0aCBkPSJNMCAwIEMxMC44OSAwIDIxLjc4IDAgMzMgMCBDMzIuNjcgMS4zMiAzMi4zNCAyLjY0IDMyIDQgQzI5LjA3ODAyMzEgNS40NjA5ODg0NSAyNi41MDEwNjUyNSA1LjExMTM0OTAxIDIzLjI0MjE4NzUgNS4wOTc2NTYyNSBDMjIuMjQ3NjEwMzIgNS4wOTU1MzM4MyAyMi4yNDc2MTAzMiA1LjA5NTUzMzgzIDIxLjIzMjk0MDY3IDUuMDkzMzY4NTMgQzE5LjExMzU4MTM3IDUuMDg3NzY3NTQgMTYuOTk0MzI3NDEgNS4wNzUyMTUgMTQuODc1IDUuMDYyNSBDMTMuNDM4ODAzNjEgNS4wNTc0ODUxMiAxMi4wMDI2MDU1NiA1LjA1MjkyMjE5IDEwLjU2NjQwNjI1IDUuMDQ4ODI4MTIgQzcuMDQ0MjM2NTUgNS4wMzc3OTc4MiAzLjUyMjEyODU1IDUuMDIwNTMyNTkgMCA1IEMwIDMuMzUgMCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTQ5LDcyKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjIxNzQ5MjE5IC0wLjA3NDE5MTM0IDguNDM0NjM4MTEgLTAuMTI4NjIwNCAxMi42NTI1ODc4OSAtMC4xNjQ3OTQ5MiBDMTQuMDg3MjI1NTIgLTAuMTc5ODc1ODkgMTUuNTIxODE3MDggLTAuMjAwMzQzOCAxNi45NTYyOTg4MyAtMC4yMjYzMTgzNiBDMTkuMDE5MTU4NTkgLTAuMjYyNzM0MzcgMjEuMDgxNDA4NTggLTAuMjc5NzMyNDMgMjMuMTQ0NTMxMjUgLTAuMjkyOTY4NzUgQzI1LjAwNjIxOTQ4IC0wLjMxNjUzNDQyIDI1LjAwNjIxOTQ4IC0wLjMxNjUzNDQyIDI2LjkwNTUxNzU4IC0wLjM0MDU3NjE3IEMzMCAwIDMwIDAgMzEuOTI4NDY2OCAxLjM5MzMxMDU1IEMzMyAzIDMzIDMgMzMgNSBDMjIuMTEgNSAxMS4yMiA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0OSw3OSkiLz4KPHBhdGggZD0iTTAgMCBDMC42NiAwIDEuMzIgMCAyIDAgQzIuMDg2MzY3MTkgMC41Njg0NzY1NiAyLjE3MjczNDM3IDEuMTM2OTUzMTIgMi4yNjE3MTg3NSAxLjcyMjY1NjI1IEMzLjM1MjcwNTM2IDcuNzE4MDc4MSA1LjI4MTQzMTU2IDExLjIwNTAwMzg1IDkgMTYgQzkgMTYuNjYgOSAxNy4zMiA5IDE4IEM4LjI3NTU0Njg3IDE3Ljg0NjYwMTU2IDcuNTUxMDkzNzUgMTcuNjkzMjAzMTIgNi44MDQ2ODc1IDE3LjUzNTE1NjI1IEM0LjA3MzM2NjA3IDE2Ljk3MzE0OTc3IDQuMDczMzY2MDcgMTYuOTczMTQ5NzcgMS41NzAzMTI1IDE2Ljc0NjA5Mzc1IEMtNC45MDkwNjM1OCAxNS45Mjg0MDg5MSAtNy44MDY5NTYzOCAxMy44OTExMzYyMyAtMTEuODIwMzEyNSA4Ljc3NzM0Mzc1IEMtMTMgNyAtMTMgNyAtMTMgNiBDLTYuMzc1IDUuODc1IC02LjM3NSA1Ljg3NSAtMyA3IEMtMi44NzYyNSA2LjQwMTg3NSAtMi43NTI1IDUuODAzNzUgLTIuNjI1IDUuMTg3NSBDLTIgMyAtMiAzIDAgMCBaICIgZmlsbD0iI0YyRjdGNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5NCw1NSkiLz4KPHBhdGggZD0iTTAgMCBDMSAyIDEgMiAwLjkzNzUgNS44MTI1IEMwLjg3OTY0ODA4IDkuMzg2NDYzMTggMS42NDA2MzE3NyAxMS42ODY1Mzk5NCAzIDE1IEMzLjQ3NzIyODgxIDE5LjM3NDU5NzM5IDMuNDk4NjQwNDQgMjEuMjg5ODE1MTMgMC45Mzc1IDI0LjkzNzUgQy0xLjA1MTY1MDY5IDI4LjA4MTY0MTQxIC0xLjI4MzkwMDM2IDI4LjY1NDU4MTU5IC0wLjkzNzUgMzIuMTI1IEMtMC4wNDE1OTEyMiAzNS44MjgwODk2MSAwLjc4Mzk2MDg3IDM3LjEwOTUxNDE4IDMgNDAgQzMuNjQwNzA0NzggNDQuOTEyMDY5OTQgMi4yODAwNjUxNiA0Ny43MTM0Nzc1IDAgNTIgQy0wLjY5OTA3NDE0IDU0LjczNTcyNTg1IC0wLjY5OTA3NDE0IDU0LjczNTcyNTg1IC0xIDU3IEMtMS45OSA1NyAtMi45OCA1NyAtNCA1NyBDLTMuMjQ3ODEzNDEgNTAuNDgxMDQ5NTYgLTMuMjQ3ODEzNDEgNTAuNDgxMDQ5NTYgLTEuOTM3NSA0Ny45Mzc1IEMtMC41NTU0NjYzNyA0NS4wODEyOTcxNyAtMC42Mjk3ODY4MiA0My4xNDY4MTIgLTEgNDAgQy0xLjkyMzQ0MjExIDM4LjIzNzkyNDggLTEuOTIzNDQyMTEgMzguMjM3OTI0OCAtMy4wNjI1IDM2LjUgQy00LjcyOTM3MDExIDMzLjgyMjM2ODIyIC01LjAwMjU5OTI2IDMzLjEzMjU2MjEgLTQuOTM3NSAyOS44MTI1IEMtNCAyNyAtNCAyNyAtMi40Mzc1IDI1LjE4NzUgQy0wLjE2NjczOTU4IDIxLjczMTk5NTAyIC0wLjYxNDU0MzE5IDE4LjAyNTA1ODY1IC0xIDE0IEMtMS4zMyAxMy4wMSAtMS42NiAxMi4wMiAtMiAxMSBDLTIuMTY3OTY4NzUgOS4wNjI1IC0yLjE2Nzk2ODc1IDkuMDYyNSAtMi4xODc1IDcgQy0yLjIwMTY3OTY5IDYuMzE5Mzc1IC0yLjIxNTg1OTM4IDUuNjM4NzUgLTIuMjMwNDY4NzUgNC45Mzc1IEMtMiAzIC0yIDMgMCAwIFogIiBmaWxsPSIjMTQ3MDRCIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ4LDYyKSIvPgo8cGF0aCBkPSJNMCAwIEMxMi44NyAwIDI1Ljc0IDAgMzkgMCBDMzUuMDM1MDk2OTkgMy45NjQ5MDMwMSAzNS4wMzUwOTY5OSAzLjk2NDkwMzAxIDMwLjY1MTg1NTQ3IDQuMTEzNTI1MzkgQzI5LjIyMzYyMzAzIDQuMTEzMzY2ODggMjcuNzk1Mzg0NTggNC4xMDc3MDczNSAyNi4zNjcxODc1IDQuMDk3NjU2MjUgQzI1LjIzOTQzNDA1IDQuMDk1NTMzODMgMjUuMjM5NDM0MDUgNC4wOTU1MzM4MyAyNC4wODg4OTc3MSA0LjA5MzM2ODUzIEMyMS42ODQyMjQ5IDQuMDg3NzY0NjUgMTkuMjc5NjQ0NzMgNC4wNzUyMTE1NyAxNi44NzUgNC4wNjI1IEMxNS4yNDYwOTUwOSA0LjA1NzQ4NTUgMTMuNjE3MTg4NzMgNC4wNTI5MjI1IDExLjk4ODI4MTI1IDQuMDQ4ODI4MTIgQzcuOTkyMTUxNzMgNC4wMzc3OTM5NyAzLjk5NjA5MTU4IDQuMDIwNTI2NzkgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFGNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0MSwxMDIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNDQ1MDA2NiAyLjkzNTY2NDIzIDMuNTc0ODI0NjQgNS4yNTc0NDI5NCAzLjk2ODc1IDkuNTk3NjU2MjUgQzMuOTk4ODM1MiAxMS45MTA0NTU4IDMuNzA3ODg2MzggMTMuODY2Mzg3MzUgMy4yNSAxNi4xMjUgQzIuOTg0MTIwNjEgMjAuMjQ2MTMwNTMgMy4xMDk4NDA0MiAyMC42ODU1NzQyMiA1LjQzNzUgMjMuNzUgQzUuOTEwNTg1OTQgMjQuMjgxMDkzNzUgNi4zODM2NzE4NyAyNC44MTIxODc1IDYuODcxMDkzNzUgMjUuMzU5Mzc1IEM4IDI3IDggMjcgOCAzMSBDMTAuMzEgMzEuNjYgMTIuNjIgMzIuMzIgMTUgMzMgQzE1IDMzLjk5IDE1IDM0Ljk4IDE1IDM2IEMxNi4zMiAzNi42NiAxNy42NCAzNy4zMiAxOSAzOCBDMTkgMzguOTkgMTkgMzkuOTggMTkgNDEgQzE3LjkxNzE4NzUgNDAuNDc0MDYyNSAxNy45MTcxODc1IDQwLjQ3NDA2MjUgMTYuODEyNSAzOS45Mzc1IEMxNC4wNzY4ODc3IDM4Ljc1NjQ4MjEyIDE0LjA3Njg4NzcgMzguNzU2NDgyMTIgMTEuNSAzOS41NjI1IEM5IDQwIDkgNDAgNi4xODc1IDM4LjU2MjUgQzUuNDY1NjI1IDM4LjA0Njg3NSA0Ljc0Mzc1IDM3LjUzMTI1IDQgMzcgQzQuMTk1MjkyOTcgMzYuMTY0Njg3NSA0LjE5NTI5Mjk3IDM2LjE2NDY4NzUgNC4zOTQ1MzEyNSAzNS4zMTI1IEM1LjMwMzg2MTMxIDMwLjQ2NzI5MzAxIDUuMzAzODYxMzEgMzAuNDY3MjkzMDEgMy45MTc5Njg3NSAyNS44NjcxODc1IEMyLjk3NDUwMDc2IDI0LjU0MTY1Mzk2IDIuMDI5MTkzNjQgMjMuMjE3NDI3NDggMS4wODIwMzEyNSAyMS44OTQ1MzEyNSBDLTAuNjgwNTA5NzQgMTguODA4NDkzNzggMC4yMzQyODE5NyAxNi4zNTczNzkwNyAxIDEzIEMxLjA4MjI5MTcgMTEuNDM5MTEyMjkgMS4xMjI0NDU5OSA5Ljg3NTU1MzM3IDEuMTI1IDguMzEyNSBDMS4xMjg4NjcxOSA3LjIyMzg4NjcyIDEuMTI4ODY3MTkgNy4yMjM4ODY3MiAxLjEzMjgxMjUgNi4xMTMyODEyNSBDMC45OTc4MDczMiAzLjk2NTExMDU5IDAuNTg3NzI5NCAyLjA2NjM4MTk1IDAgMCBaICIgZmlsbD0iI0VGRjVGMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3OCw2MykiLz4KPHBhdGggZD0iTTAgMCBDOS4yNCAwIDE4LjQ4IDAgMjggMCBDMjggMS42NSAyOCAzLjMgMjggNSBDMTguNzYgNSA5LjUyIDUgMCA1IEMwIDMuMzUgMCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTEwLDk0KSIvPgo8cGF0aCBkPSJNMCAwIEM5LjI0IDAgMTguNDggMCAyOCAwIEMyOCAxLjY1IDI4IDMuMyAyOCA1IEMxOC43NiA1IDkuNTIgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MTAsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzkuMjQgMCAxOC40OCAwIDI4IDAgQzI4IDEuNjUgMjggMy4zIDI4IDUgQzE4Ljc2IDUgOS41MiA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUxMCw1MCkiLz4KPHBhdGggZD0iTTAgMCBDMCAzIDAgMyAtMSA1IEMtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAwIDE2IEMwLjc1NDE0MjM1IDIyLjQ5MDU2OTM3IC0wLjI2NzY1MDE5IDI1LjU4MjA3Mjg1IC00IDMxIEMtMy45Mjc0OTIxNCAzNC41NTI4ODQ5NCAtMy4zMTc3NDE2NCAzNi40OTE2MTMzNyAtMS40Mzc1IDM5LjUgQzAuNDMyMjMyNTQgNDIuNzUxNzA4NzYgMC40OTI4MjA0OCA0NC4yNjg2NDQ5NCAwIDQ4IEMtMS4xNzkwNDA1IDUxLjQwNDQxNTYzIC0yLjU0MTk2MzU0IDU0LjcwNjM5OTc4IC00IDU4IEMtNC45OSA1Ny42NyAtNS45OCA1Ny4zNCAtNyA1NyBDLTYuNTc1MjcyMSA1NC40NTE2MzI2IC02LjE4NjYwNjY3IDUyLjM0MDI4Mjc1IC00LjkzNzUgNTAuMDYyNSBDLTMuNjI5MDkzODEgNDcuMTg0MDA2MzkgLTMuNjg2MTgxNDMgNDUuMTM4MTg1NzMgLTQgNDIgQy00LjQ5NSA0MS4wMSAtNC45OSA0MC4wMiAtNS41IDM5IEMtNy4yMTc0NTA3IDM1LjU2NTA5ODYgLTcuNTUyMzU3MzMgMzMuNzg3NTkzMTMgLTcgMzAgQy01Ljk4MjkyOTY5IDI4LjY2Nzc1MzkxIC01Ljk4MjkyOTY5IDI4LjY2Nzc1MzkxIC00Ljk0NTMxMjUgMjcuMzA4NTkzNzUgQy0yLjU3NzgwMDU3IDIzLjI4MTkyMTg1IC0yLjgyMDAzNjc0IDIwLjUwMjM1NDg2IC0zLjQzNzUgMTYuMDYyNSBDLTQuMjQwNTQ3MzkgMTAuMDc2NjY0NDYgLTMuNzgyNzc2OTMgNi4zMjc0MTg5MSAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogIiBmaWxsPSIjRTRFRUVBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ4LDYwKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjkwOTM4NzAzIDMuNzM5NDEzNjggMy45MDkzODcwMyAzLjczOTQxMzY4IDQuMTMyODEyNSA2Ljg0NzY1NjI1IEM0LjEzMDIzNDM4IDcuNTc4NTU0NjkgNC4xMjc2NTYyNSA4LjMwOTQ1MzEzIDQuMTI1IDkuMDYyNSBDNC4xMjI0MjE4OCA5Ljg2MzAwNzgxIDQuMTE5ODQzNzUgMTAuNjYzNTE1NjMgNC4xMTcxODc1IDExLjQ4ODI4MTI1IEM0LjAwMTcwMTk1IDEzLjk2MzUyMTY0IDMuNjUxMDI0NzkgMTYuMzA3MDIyNDggMy4yNSAxOC43NSBDMi43NjIwMjY5NSAyMi40MjA4OTQxOCAyLjc2MjAyNjk1IDIyLjQyMDg5NDE4IDQuOTM3NSAyNS41NjI1IEM1Ljk1ODQzNzUgMjYuNzY5MDYyNSA1Ljk1ODQzNzUgMjYuNzY5MDYyNSA3IDI4IEM4LjA0NzU1MTk0IDMzLjMxNDE0MzcgNi44NDIyMzI0NCAzNi40OTk3OTg2MyA0IDQxIEMzLjM3MDk3MDM5IDQ1LjkyNzM5ODU3IDQuNzQ3ODkzNDUgNDguNjgzNDYyNDQgNyA1MyBDNyA1NC4zMiA3IDU1LjY0IDcgNTcgQzQgNTYgNCA1NiAyLjc5Njg3NSA1My45MjU3ODEyNSBDLTAuNzYwMjg1NzMgNDUuMDQ2MTUyNDIgLTAuNzYwMjg1NzMgNDUuMDQ2MTUyNDIgMSA0MCBDMS41MTU2MjUgMzkuMTc1IDIuMDMxMjUgMzguMzUgMi41NjI1IDM3LjUgQzQuMzg3MDI3NTYgMzQuMzI2OTA4NTggNC41MTY0NDExOCAzMi42MTUwODgyNSA0IDI5IEMzLjM0IDI4LjAzMDYyNSAyLjY4IDI3LjA2MTI1IDIgMjYuMDYyNSBDLTAuNDEwNTc3ODIgMjIuMzcxMzAyNzIgLTAuNDA4MzI3NTUgMjAuMzI4MjcxOTkgMCAxNiBDMC4zMyAxNS4wMSAwLjY2IDE0LjAyIDEgMTMgQzEuMDkyNDczODEgMTEuNTIzMTM4ODkgMS4xMjk5OTA3MSAxMC4wNDIyNDQ5OSAxLjEyNSA4LjU2MjUgQzEuMTI4ODY3MTkgNy40MTk3NDYwOSAxLjEyODg2NzE5IDcuNDE5NzQ2MDkgMS4xMzI4MTI1IDYuMjUzOTA2MjUgQzEuMDAyNzYwMTUgNC4wNDY4NDE0MSAwLjYwODU2MTk5IDIuMTIwMzA3MjQgMCAwIFogIiBmaWxsPSIjRTZGMEVDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzc0LDYxKSIvPgo8cGF0aCBkPSJNMCAwIEM4LjI1IDAgMTYuNSAwIDI1IDAgQzI1LjY2IDEuNjUgMjYuMzIgMy4zIDI3IDUgQzE4LjA5IDUgOS4xOCA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU4Nyw1NykiLz4KPHBhdGggZD0iTTAgMCBDOC4yNSAwIDE2LjUgMCAyNSAwIEMyNSAxLjY1IDI1IDMuMyAyNSA1IEMxNi40MiA1IDcuODQgNSAtMSA1IEMtMC42NyAzLjM1IC0wLjM0IDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjQsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyLjMzIDEuNjUgMi42NiAzLjMgMyA1IEM0LjY1IDUgNi4zIDUgOCA1IEM3LjAxIDYuNDg1IDcuMDEgNi40ODUgNiA4IEM1LjgzMjg2NDMxIDEwLjYyNTMxNTI0IDUuODMyODY0MzEgMTAuNjI1MzE1MjQgNiAxMyBDNi42NiAxMy4zMyA3LjMyIDEzLjY2IDggMTQgQzcuMzQgMTQgNi42OCAxNCA2IDE0IEM2IDE0LjY2IDYgMTUuMzIgNiAxNiBDMi43IDE2IC0wLjYgMTYgLTQgMTYgQy00IDE1LjM0IC00IDE0LjY4IC00IDE0IEMtNC42NiAxMy42NyAtNS4zMiAxMy4zNCAtNiAxMyBDLTUuMzQgMTMgLTQuNjggMTMgLTQgMTMgQy0zLjc5OTEzNTU3IDkuMjg0MDA4MDkgLTMuODQ4MDU2MyA4LjIyNzkxNTU1IC02IDUgQy00LjM1IDUgLTIuNyA1IC0xIDUgQy0wLjY3IDMuMzUgLTAuMzQgMS43IDAgMCBaICIgZmlsbD0iI0Q4RTdFMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2MCwzNykiLz4KPHBhdGggZD0iTTAgMCBDMCAxLjY1IDAgMy4zIDAgNSBDLTAuNzYzMTI1IDQuNzczMTI1IC0xLjUyNjI1IDQuNTQ2MjUgLTIuMzEyNSA0LjMxMjUgQy0zLjE5OTM3NSA0LjIwOTM3NSAtNC4wODYyNSA0LjEwNjI1IC01IDQgQy02LjgzNTQ3OTkgNS4zMzM3ODU3NSAtNi44MzU0Nzk5IDUuMzMzNzg1NzUgLTggNyBDLTcuMzQgOC42NSAtNi42OCAxMC4zIC02IDEyIEMtMy42OSAxMiAtMS4zOCAxMiAxIDEyIEMxIDEzLjMyIDEgMTQuNjQgMSAxNiBDLTUuMjAwODE5NjcgMTcuMzM3NDMxNjkgLTUuMjAwODE5NjcgMTcuMzM3NDMxNjkgLTguODEyNSAxNS44MTI1IEMtMTEuMTQwMzY2MTcgMTMuODgzNjk2NiAtMTIuMTcyMjU2MTEgMTIuODk3MTAzNjEgLTEzIDEwIEMtMTIuODU1NzAyNCA2LjUzNjg1NzUgLTEyLjM0NTYyNDk3IDQuNTI1MzQ5OTYgLTEwLjQzNzUgMS42MjUgQy02Ljg1NzUyODY3IC0wLjc2MTY0NzU1IC00LjI0ODUyOTc0IC0wLjI4MzIzNTMyIDAgMCBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE5Miw5MykiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQzEuNjUgMyAzLjMgMyA1IDMgQzUgNC4zMiA1IDUuNjQgNSA3IEMzLjM1IDcgMS43IDcgMCA3IEMwIDkuOTcgMCAxMi45NCAwIDE2IEMxLjY1IDE1LjY3IDMuMyAxNS4zNCA1IDE1IEM1IDE2LjMyIDUgMTcuNjQgNSAxOSBDMS43MTMwMzc2NyAxOS43OTk1MzEzOCAwLjI4OTc2ODA4IDIwLjA5NjU4OTM2IC0zIDE5IEMtNC4yNjIzNzczMSAxNi40NzUyNDUzOCAtNC4wOTg1NjQwNCAxNC42ODc5OTUzNCAtNC4wNjI1IDExLjg3NSBDLTQuMDUzNDc2NTYgMTAuOTY0OTIxODggLTQuMDQ0NDUzMTMgMTAuMDU0ODQzNzUgLTQuMDM1MTU2MjUgOS4xMTcxODc1IEMtNC4wMjM1NTQ2OSA4LjQxODUxNTYyIC00LjAxMTk1MzEzIDcuNzE5ODQzNzUgLTQgNyBDLTQuOTkgNyAtNS45OCA3IC03IDcgQy0zLjg2MjA2ODk3IDAgLTMuODYyMDY4OTcgMCAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMzcsOTApIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMS42NSAwLjY2IDMuMyAxIDUgQzAuMDUxMjUgNC43OTM3NSAtMC44OTc1IDQuNTg3NSAtMS44NzUgNC4zNzUgQy0zLjQyMTg3NSA0LjE4OTM3NSAtMy40MjE4NzUgNC4xODkzNzUgLTUgNCBDLTcuMzQ5NzM4MTggNS44OTc1NTE0NCAtNy4zNDk3MzgxOCA1Ljg5NzU1MTQ0IC03LjEyNSA5LjEyNSBDLTcuMDYzMTI1IDEwLjU0ODEyNSAtNy4wNjMxMjUgMTAuNTQ4MTI1IC03IDEyIEMtNC4zNiAxMiAtMS43MiAxMiAxIDEyIEMxIDEzLjMyIDEgMTQuNjQgMSAxNiBDLTUuMzI5OTc5ODggMTcuMjE3MzAzODIgLTUuMzI5OTc5ODggMTcuMjE3MzAzODIgLTguMzEyNSAxNi4yNSBDLTEwIDE1IC0xMCAxNSAtMTIgMTIgQy0xMi40NDUwNTU3NiA3Ljk5NDQ5ODEzIC0xMi4zNDMxOTE2NyA1LjY3MjA4MzY5IC0xMC41IDIuMDYyNSBDLTYuODg4MjI0MDkgLTAuOTE3MjE1MTMgLTQuNTg5MTk0MjEgLTAuMzgyNDMyODUgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTIyLDkzKSIvPgo8cGF0aCBkPSJNMCAwIEM3LjU5IDAgMTUuMTggMCAyMyAwIEMyMy4zMyAxLjY1IDIzLjY2IDMuMyAyNCA1IEMxNi4wOCA1IDguMTYgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRjcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1ODcsNTApIi8+CjxwYXRoIGQ9Ik0wIDAgQzcuMjYgMCAxNC41MiAwIDIyIDAgQzIyIDEuNjUgMjIgMy4zIDIyIDUgQzE0LjQxIDUgNi44MiA1IC0xIDUgQy0wLjY3IDMuMzUgLTAuMzQgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTYyNyw1MCkiLz4KPHBhdGggZD0iTTAgMCBDMy45NiAwIDcuOTIgMCAxMiAwIEMxMiAzLjY2NjY2NjY3IDEyIDcuMzMzMzMzMzMgMTIgMTEgQzguMDQgMTEgNC4wOCAxMSAwIDExIEMwIDcuMzMzMzMzMzMgMCAzLjY2NjY2NjY3IDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc4MiwxMTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzkuMjQgMCAxOC40OCAwIDI4IDAgQzI4IDEuMzIgMjggMi42NCAyOCA0IEMxOC43NiA0IDkuNTIgNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTEwLDEwMikiLz4KPHBhdGggZD0iTTAgMCBDMCAxLjY1IDAgMy4zIDAgNSBDLTAuNTU1NTg1OTQgNC41MTQwMjM0NCAtMS4xMTExNzE4OCA0LjAyODA0Njg4IC0xLjY4MzU5Mzc1IDMuNTI3MzQzNzUgQy00LjM3OTY1MzUgMS43NDk2NzE5NyAtNS44NjQwNjM4NiAxLjU2NzMyNDE5IC05LjA2MjUgMS41NjI1IEMtOS45MTk3MjY1NiAxLjU0MzE2NDA2IC0xMC43NzY5NTMxMyAxLjUyMzgyODEzIC0xMS42NjAxNTYyNSAxLjUwMzkwNjI1IEMtMTQuMTc3NTgwNDEgMS43OTY0NDEzNyAtMTQuMTc3NTgwNDEgMS43OTY0NDEzNyAtMTUuODA4NTkzNzUgNC4wMjczNDM3NSBDLTE2LjM5ODMzOTg0IDUuMDAzODA4NTkgLTE2LjM5ODMzOTg0IDUuMDAzODA4NTkgLTE3IDYgQy0xNS4wMiA2IC0xMy4wNCA2IC0xMSA2IEMtMTAuNjcgNy42NSAtMTAuMzQgOS4zIC0xMCAxMSBDLTExLjMyIDExIC0xMi42NCAxMSAtMTQgMTEgQy0xNCAxMC4zNCAtMTQgOS42OCAtMTQgOSBDLTE1LjMyIDkgLTE2LjY0IDkgLTE4IDkgQy0xOC4zMyA3LjM1IC0xOC42NiA1LjcgLTE5IDQgQy0xOS42NiA0LjY2IC0yMC4zMiA1LjMyIC0yMSA2IEMtMjEgNC4wMiAtMjEgMi4wNCAtMjEgMCBDLTEzLjk3OTM2NDY0IC0yLjM5MDAwMzUzIC02Ljg1MjIxNDU0IC0zLjUzNjYyNjg2IDAgMCBaICIgZmlsbD0iIzE5NzM0RiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3MCw1NykiLz4KPHBhdGggZD0iTTAgMCBDNi45MyAwIDEzLjg2IDAgMjEgMCBDMjEgMS42NSAyMSAzLjMgMjEgNSBDMTQuMDcgNSA3LjE0IDUgMCA1IEMwIDMuMzUgMCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjI5LDk0KSIvPgo8cGF0aCBkPSJNMCAwIEMwIDAuOTkgMCAxLjk4IDAgMyBDLTAuOTkgMyAtMS45OCAzIC0zIDMgQy0zIDMuNjYgLTMgNC4zMiAtMyA1IEMtMi4wMSA1LjMzIC0xLjAyIDUuNjYgMCA2IEMwIDcuMzIgMCA4LjY0IDAgMTAgQy02LjYyNSAxMi44NzUgLTYuNjI1IDEyLjg3NSAtMTAgMTQgQy0xMS4xOTI4NzQxMSAxMC4xMjMxNTkxMyAtMTIgNy4wODM3ODA3NyAtMTIgMyBDLTEwLjc1MzM2NjY5IDIuNDkxNjY0MDkgLTkuNTAyNTA2MTMgMS45OTM2ODg1NSAtOC4yNSAxLjUgQy03LjU1MzkwNjI1IDEuMjIxNTYyNSAtNi44NTc4MTI1IDAuOTQzMTI1IC02LjE0MDYyNSAwLjY1NjI1IEMtNCAwIC00IDAgMCAwIFogIiBmaWxsPSIjMUM3NTUxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzI5LDgwKSIvPgo8cGF0aCBkPSJNMCAwIEM2LjYgMCAxMy4yIDAgMjAgMCBDMjAgMS42NSAyMCAzLjMgMjAgNSBDMTMuNCA1IDYuOCA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFFNzBDMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU4Nyw5NCkiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwIDIuNjQgMCA0IDAgQzQgNy45MiA0IDE1Ljg0IDQgMjQgQzIuNjggMjQgMS4zNiAyNCAwIDI0IEMwIDE2LjA4IDAgOC4xNiAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNzcsODUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuNjA4NzUgLTAuMDIwNjI1IDMuMjE3NSAtMC4wNDEyNSA0Ljg3NSAtMC4wNjI1IEM1Ljc3OTkyMTg4IC0wLjA3NDEwMTU2IDYuNjg0ODQzNzUgLTAuMDg1NzAzMTIgNy42MTcxODc1IC0wLjA5NzY1NjI1IEMxMCAwIDEwIDAgMTIgMSBDMTEuMzQgMi4zMiAxMC42OCAzLjY0IDEwIDUgQzguMzUgNSA2LjcgNSA1IDUgQzQuNjcgOC42MyA0LjM0IDEyLjI2IDQgMTYgQzIuNjggMTYgMS4zNiAxNiAwIDE2IEMwIDEwLjcyIDAgNS40NCAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxNDksOTMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzYuMjcgMCAxMi41NCAwIDE5IDAgQzE4LjY3IDEuNjUgMTguMzQgMy4zIDE4IDUgQzEyLjM5IDUgNi43OCA1IDEgNSBDMC42NyAzLjM1IDAuMzQgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTYwOSw3OSkiLz4KPHBhdGggZD0iTTAgMCBDNi45MyAwIDEzLjg2IDAgMjEgMCBDMjEgMS4zMiAyMSAyLjY0IDIxIDQgQzEzLjc0IDQgNi40OCA0IC0xIDQgQy0wLjY3IDIuNjggLTAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjEsNjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuODEyNSAyLjE4NzUgMC44MTI1IDIuMTg3NSAxIDUgQy0xLjEyNSA3Ljg3NSAtMS4xMjUgNy44NzUgLTQgMTAgQy02LjgxMjUgOS44MTI1IC02LjgxMjUgOS44MTI1IC05IDkgQy05Ljc1IDYuNzUgLTkuNzUgNi43NSAtMTAgNCBDLTcuMTk2NDEzNTIgLTAuMTQ5MzA3OTkgLTQuODI5NDYzOCAtMC40MzkwNDIxNiAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMDgsNDApIi8+CjxwYXRoIGQ9Ik0wIDAgQzYuOTMgMCAxMy44NiAwIDIxIDAgQzIxIDEuMzIgMjEgMi42NCAyMSA0IEMxNC4wNyA0IDcuMTQgNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjI5LDEwMikiLz4KPHBhdGggZD0iTTAgMCBDNi42IDAgMTMuMiAwIDIwIDAgQzIwLjMzIDEuMzIgMjAuNjYgMi42NCAyMSA0IEMxNC4wNyA0IDcuMTQgNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTk1LDY1KSIvPgo8cGF0aCBkPSJNMCAwIEM2LjYgMCAxMy4yIDAgMjAgMCBDMjAgMS4zMiAyMCAyLjY0IDIwIDQgQzEzLjQgNCA2LjggNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTg3LDEwMikiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwLjY2IDAuNjYgMS4zMiAxIDIgQzAuNjcgMi42NiAwLjM0IDMuMzIgMCA0IEMwLjAyMzc5MDQgNi4zMTEwNzg3OCAwLjAyMzc5MDQgNi4zMTEwNzg3OCAwLjMxMjUgOC44NzUgQzAuMzkxMTMyODEgOS43Mzg2NzE4NyAwLjQ2OTc2NTYzIDEwLjYwMjM0Mzc1IDAuNTUwNzgxMjUgMTEuNDkyMTg3NSBDMS4wMDMyMDcyNCAxNC4wMTc5MDQ3NSAxLjgxMjYwODMzIDE1Ljc0ODIxMzQgMyAxOCBDMy42ODc1MDI5NCAyMy4yNzA4NTU4NiAyLjE2OTQxODg1IDI1Ljg0MDEzNzc1IC0xIDMwIEMtMS42NiAyOS42NyAtMi4zMiAyOS4zNCAtMyAyOSBDLTIuNTA1IDI3Ljk3OTA2MjUgLTIuNTA1IDI3Ljk3OTA2MjUgLTIgMjYuOTM3NSBDLTAuNTQwNjAwMTQgMjIuNjUwNTEyOSAtMC4yNjA1MDE3MyAxOC44MDI1MjcwNCAtMiAxNC41NjI1IEMtMy40NjUwNTgyOSAxMC44MDgyODgxMiAtMy4zMjAyMDE1OSA4LjAzNDU0MDAyIC0zIDQgQy0xLjUgMS41IC0xLjUgMS41IDAgMCBaICIgZmlsbD0iI0U1RUZFQiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1MSw2MCkiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwIDAuNjYgMCAxIDAgQzAuOTg4Mzk4NDQgMC43NTAyMzQzNyAwLjk3Njc5Njg3IDEuNTAwNDY4NzUgMC45NjQ4NDM3NSAyLjI3MzQzNzUgQzAuOTE5NjU0NTMgNy4zOTkxODY2NiAwLjk4NDI4NjYxIDEyLjMwMTE4MTk1IDEuNzUgMTcuMzc1IEMyLjE5NjY0NjM5IDIxLjE0NzM1MTI3IDIuMTA3NDI3NTkgMjEuODEwMjExMjYgMC4xMjUgMjUuMzEyNSBDLTAuOTI2ODc1IDI2LjY0MjgxMjUgLTAuOTI2ODc1IDI2LjY0MjgxMjUgLTIgMjggQy0yLjc4MjE1NTg4IDMwLjcyODI1MDQgLTIuNzgyMTU1ODggMzAuNzI4MjUwNCAtMyAzMyBDLTMuOTkgMzMgLTQuOTggMzMgLTYgMzMgQy01LjY2Mzk0OTIgMjkuMzg3NDUzODUgLTUuNDU0NzA0MzIgMjcuNDg1NTg5OSAtMi45Mjk2ODc1IDI0Ljc4OTA2MjUgQy0wLjM4MTE3MzczIDIxLjEwNTU4MzA5IC0wLjgyNDUyNDMzIDE4LjI5NzIzMDcyIC0xLjM3NSAxNC4wNjI1IEMtMS45OTMyNTI0NiA4Ljg4OTQ2NTc5IC0yLjA0NDM3NzU4IDQuOTExMTE3NTYgMCAwIFogIiBmaWxsPSIjMkE3RDVDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ0LDYyKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjE2MTE1Nzc2IDEuMzY5ODM1MDMgMy45OTI3MDkyIDEuOTg5MDYzOCA2IDUgQzYuNTMwNzQ3NDEgMTAuNTE5NzczMDggNS4zMDE0OTUxMSAxNC4wMjg3NzA1NSAzIDE5IEMyLjMwODU5NDc4IDIxLjc3ODg4NjEzIDIuMzA4NTk0NzggMjEuNzc4ODg2MTMgMiAyNCBDMS4wMSAyNCAwLjAyIDI0IC0xIDI0IEMtMS4yNTgxMzMwMiAyMC4zODYxMzc3NCAtMS4xNjgxNTY2NyAxOC4zMjkzMDY4IDAuNSAxNS4wNjI1IEMyLjczMzE5NzQyIDEwLjUwMzA1NTI2IDIuNjIzNDM0NjEgNi44MzEzMzkxNiAxIDIuMDYyNSBDMC42NyAxLjM4MTg3NSAwLjM0IDAuNzAxMjUgMCAwIFogIiBmaWxsPSIjMTc3MjREIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzUxLDk3KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMzIDAuOTkgMC42NiAxLjk4IDEgMyBDMC41MDUgMy45MDc1IDAuMDEgNC44MTUgLTAuNSA1Ljc1IEMtMi4zNzE1ODI0MSA5LjgwNTA5NTIzIC0yLjA1NTkwNDQyIDExLjcwMDk2MDU3IC0xIDE2IEMtMC4wODA4Mzc4IDE4LjM3NzMwOTU2IDAuOTUxMzM0NzMgMjAuNjc0Njk4NzUgMiAyMyBDMiAyMy42NiAyIDI0LjMyIDIgMjUgQzEuMDEgMjUgMC4wMiAyNSAtMSAyNSBDLTEuODcyNzk4NjIgMjMuMTMzNjAwMTkgLTIuNzIyNTEwMjcgMjEuMjU2MzkzODkgLTMuNTYyNSAxOS4zNzUgQy00LjI3NTk5NjA5IDE3LjgwODc4OTA2IC00LjI3NTk5NjA5IDE3LjgwODc4OTA2IC01LjAwMzkwNjI1IDE2LjIxMDkzNzUgQy02LjEzMjU2NzY4IDEyLjU3MjY2NDE5IC02LjAzOTIzNjQyIDEwLjYzNzMyNzQ1IC01IDcgQy0zLjU1NDMxMTQ1IDQuNDMwOTQwMzUgLTEuODIzMDY5ODYgMi4zMzcyNjkwNSAwIDAgWiAiIGZpbGw9IiMxMzZGNEEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzcsOTQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEM1LjE4NDE5OTU5IDMuNzk2NTQ1NjcgNS4zODczNDU0OCA3LjExNjc2MjIgNS4yMzgyODEyNSAxMS44NjMyODEyNSBDNC45NDYwNDkxMyAxNC40ODM3ODg5NyA0LjA0MjM4MTk1IDE2LjU4OTQ5MTczIDMgMTkgQzIuNzkzNDQ5MzQgMjIuNDQyNTEwOTcgMi45MDYxNjA2OSAyNC43MTg0ODIwOCA0IDI4IEMyLjA2MjUgMjcuNjI1IDIuMDYyNSAyNy42MjUgMCAyNyBDLTEuNDIxNTEzNDUgMjQuMTU2OTczMDkgLTEuMjM5MjI2MDYgMjIuMTY5NzQ1MjggLTEgMTkgQy0wLjUwNSAxNy44NjU2MjUgLTAuMDEgMTYuNzMxMjUgMC41IDE1LjU2MjUgQzIuNTQzNzYwMDggMTAuNzA4NTY5ODEgMi42OTcwMTA1NCA3LjA0NzQ2ODQ1IDEgMi4wNjI1IEMwLjY3IDEuMzgxODc1IDAuMzQgMC43MDEyNSAwIDAgWiAiIGZpbGw9IiNEREVBRTUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNjksNTkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMiAyIDIgMi4yNSA1LjMxMjUgQzIuMDE4NjM0NTIgOC43MjUxNDA4NCAxLjQ3NjUyODggMTAuOTU0NjU5MzUgMCAxNCBDLTAuNjYgMTMuMzQgLTEuMzIgMTIuNjggLTIgMTIgQy0xLjYyNSA4Ljg3NSAtMS42MjUgOC44NzUgLTEgNiBDLTMuMzEgNi4zMyAtNS42MiA2LjY2IC04IDcgQy04LjA0MjcyMSA1LjMzMzg4MDk1IC04LjA0MDYzODMyIDMuNjY2MTcxMTUgLTggMiBDLTUuOTU0NDc5NTggLTAuMDQ1NTIwNDIgLTIuNzI5NDE5MTQgMC4yMzk0MjI3MyAwIDAgWiAiIGZpbGw9IiMwQzZCNDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzAsNjIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuMjkgMCA4LjU4IDAgMTMgMCBDMTMgMS42NSAxMyAzLjMgMTMgNSBDOC43MSA1IDQuNDIgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjksNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuMzIgMCAyLjY0IDAgNCAwIEM0IDUuMjggNCAxMC41NiA0IDE2IEMyLjY4IDE2IDEuMzYgMTYgMCAxNiBDMCAxMC43MiAwIDUuNDQgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTY5LDkzKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzEyLjY3IDAuOTkgMTIuMzQgMS45OCAxMiAzIEMxMC42OCAzIDkuMzYgMyA4IDMgQzggNS42NCA4IDguMjggOCAxMSBDNy4wMSAxMSA2LjAyIDExIDUgMTEgQzUgOC4zNiA1IDUuNzIgNSAzIEMzLjM1IDIuNjcgMS43IDIuMzQgMCAyIEMwIDEuMzQgMCAwLjY4IDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc0OSwxMTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS42NSAxMiAzLjMgMTIgNSBDOC4wNCA1IDQuMDggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1OTUsNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS42NSAxMiAzLjMgMTIgNSBDOC4wNCA1IDQuMDggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MTgsNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS42NSAxMiAzLjMgMTIgNSBDOC4wNCA1IDQuMDggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRjcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MTgsNzIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMCAxLjk4IDAgMyAwIEMzIDIuNjQgMyA1LjI4IDMgOCBDNS42NCA4IDguMjggOCAxMSA4IEMxMC42NyA4Ljk5IDEwLjM0IDkuOTggMTAgMTEgQzYuNyAxMSAzLjQgMTEgMCAxMSBDMCA3LjM3IDAgMy43NCAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3OTgsMTE2KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjEyMTE3MTg4IDAuNjAzMjgxMjUgMC4yNDIzNDM3NSAxLjIwNjU2MjUgMC4zNjcxODc1IDEuODI4MTI1IEMwLjUzNDc2NTYzIDIuNjI3MzQzNzUgMC43MDIzNDM3NSAzLjQyNjU2MjUgMC44NzUgNC4yNSBDMS4wMzc0MjE4OCA1LjAzODkwNjI1IDEuMTk5ODQzNzUgNS44Mjc4MTI1IDEuMzY3MTg3NSA2LjY0MDYyNSBDMS45MTcxMzYxNyA5LjAxNDkwNDM4IDEuOTE3MTM2MTcgOS4wMTQ5MDQzOCAzLjA2MjUgMTEuMDkzNzUgQzQuMzcxMjUzNjQgMTMuNzU0ODgyNCA0LjEzMjY4NDUxIDE2LjA4MDk0MDc2IDQgMTkgQzMuMDEgMTkgMi4wMiAxOSAxIDE5IEMwLjcxMTI1IDE3Ljc4MzEyNSAwLjQyMjUgMTYuNTY2MjUgMC4xMjUgMTUuMzEyNSBDLTAuNDgzNjM3NyAxMi44NDMxNjk5MSAtMS4xMzkxMzY4MSAxMC42Njc2MTc2MyAtMi4xMjUgOC4zMTI1IEMtMy4xMDE2MzIyIDUuNzMxNDAwNjMgLTMuMTU2Mzg1NjggMy43MzY3NDk0NSAtMyAxIEMtMSAwIC0xIDAgMCAwIFogIiBmaWxsPSIjMEU2QzQ3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzY4LDEwMikiLz4KPHBhdGggZD0iTTAgMCBDNC45NSAwIDkuOSAwIDE1IDAgQzE0LjM0IDEuMzIgMTMuNjggMi42NCAxMyA0IEM5LjA0IDQgNS4wOCA0IDEgNCBDMC42NyAyLjY4IDAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MTEsODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNjI1NDM5MjIgMC41MTc5MTk4OSA3LjI1MDczNjc2IDEuMDM2Mzk3MjcgMTAuODc1IDEuNTYyNSBDMTIuOTMwODIyNzEgMS44NzcxMDUwMiAxMi45MzA4MjI3MSAxLjg3NzEwNTAyIDE1IDIgQzE1IDMuNjUgMTUgNS4zIDE1IDcgQzkuNTQ1MjA4MTUgNi40MzE3OTI1MiA1LjA4OTQwNzQ0IDUuMDUzNjIwNTUgMCAzIEMwIDIuMDEgMCAxLjAyIDAgMCBaICIgZmlsbD0iI0VFRjRGMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5MSw3MykiLz4KPHBhdGggZD0iTTAgMCBDMy42MyAwIDcuMjYgMCAxMSAwIEMxMSAyLjMxIDExIDQuNjIgMTEgNyBDMTAuMzQgNyA5LjY4IDcgOSA3IEM5IDUuNjggOSA0LjM2IDkgMyBDNy4wMiAzIDUuMDQgMyAzIDMgQzIuNjcgNC4zMiAyLjM0IDUuNjQgMiA3IEMxLjM0IDcgMC42OCA3IDAgNyBDMCA0LjY5IDAgMi4zOCAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4MTMsMTIwKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzEzIDEuMzIgMTMgMi42NCAxMyA0IEM4LjcxIDQgNC40MiA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRjcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjksODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIuMzMgMS4zMiAxMi42NiAyLjY0IDEzIDQgQzguNzEgNCA0LjQyIDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Miw4NykiLz4KPHBhdGggZD0iTTAgMCBDMy40NDQ0NzI5OSAyLjkzNTIwOTUxIDMuNTc3ODc2MSA1LjI1NjU4Mjc0IDMuOTY0ODQzNzUgOS41OTc2NTYyNSBDMy45OTg0NTQwNiAxMS44OTQzNjEgMy43Mzc5MTUwOSAxMy44NzUxMjQzMyAzLjMxMjUgMTYuMTI1IEMyLjkwNDY5NjM3IDIxLjE4MTc2NSA0LjE4MDYwNDkgMjIuODk5MDYxNjcgNyAyNyBDNi4zNCAyNy4zMyA1LjY4IDI3LjY2IDUgMjggQy0wLjA2ODA5Mzg0IDIxLjI0ODM4NzEgLTAuMDY4MDkzODQgMjEuMjQ4Mzg3MSAwLjE4NzUgMTYuNTYyNSBDMC40NTU2MjUgMTUuMzg2ODc1IDAuNzIzNzUgMTQuMjExMjUgMSAxMyBDMS4wODIyOTE3IDExLjQzOTExMjI5IDEuMTIyNDQ1OTkgOS44NzU1NTMzNyAxLjEyNSA4LjMxMjUgQzEuMTI4ODY3MTkgNy4yMjM4ODY3MiAxLjEyODg2NzE5IDcuMjIzODg2NzIgMS4xMzI4MTI1IDYuMTEzMjgxMjUgQzAuOTk3ODA3MzIgMy45NjUxMTA1OSAwLjU4NzcyOTQgMi4wNjYzODE5NSAwIDAgWiAiIGZpbGw9IiNEMEUyREIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzgsNjMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuMjkgMCA4LjU4IDAgMTMgMCBDMTIuNjcgMS4zMiAxMi4zNCAyLjY0IDEyIDQgQzguMDQgNCA0LjA4IDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Miw2NSkiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQy0xLjU3OTY3ODA3IDMuNjc1MjgyMjMgLTMuMTYzOTE5MDMgNC4zMzk4OTY5NCAtNC43NSA1IEMtNi4wNzI1NzgxMyA1LjU1Njg3NSAtNi4wNzI1NzgxMyA1LjU1Njg3NSAtNy40MjE4NzUgNi4xMjUgQy0xMCA3IC0xMCA3IC0xNCA3IEMtMTQgNS42OCAtMTQgNC4zNiAtMTQgMyBDLTQuNTg5OTc3MjIgLTAuNDQ0MTkxMzQgLTQuNTg5OTc3MjIgLTAuNDQ0MTkxMzQgMCAwIFogIiBmaWxsPSIjRUZGNUYzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzMxLDczKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzEyIDEuMzIgMTIgMi42NCAxMiA0IEM4LjA0IDQgNC4wOCA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1OTUsODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS4zMiAxMiAyLjY0IDEyIDQgQzguMDQgNCA0LjA4IDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0OSw4NykiLz4KPHBhdGggZD0iTTAgMCBDMy45NiAwIDcuOTIgMCAxMiAwIEMxMiAxLjMyIDEyIDIuNjQgMTIgNCBDOC4wNCA0IDQuMDggNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTE4LDg3KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzEyIDEuMzIgMTIgMi42NCAxMiA0IEM4LjA0IDQgNC4wOCA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1NDksNjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS4zMiAxMiAyLjY0IDEyIDQgQzguMDQgNCA0LjA4IDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUxOCw2NSkiLz4KPHBhdGggZD0iTTAgMCBDMy4zNzQ2MjcxNSAwLjU0NzIzNjgzIDUuMDgyMzUgMS4wNTQ5IDggMyBDNy4zNCA0Ljk4IDYuNjggNi45NiA2IDkgQzQgOCAyIDcgMCA2IEMwIDQuMDIgMCAyLjA0IDAgMCBaICIgZmlsbD0iIzFENzY1MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5Myw5MykiLz4KPHBhdGggZD0iTTAgMCBDMCAzIDAgMyAtMSA1IEMtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAwIDE2IEMwLjEyNzgxNzg2IDE4LjY3Mzk0OTY0IDAuMDQzOTE4NzEgMjEuMzIwOTU4NTcgMCAyNCBDLTAuNjYgMjQgLTEuMzIgMjQgLTIgMjQgQy0zLjcyNzI5MzA0IDE3LjI5MDY3OTkxIC00Ljc4MjM1NDYyIDEwLjgxODQwMzYgLTMgNCBDLTEuNDQ5MjE4NzUgMS43MTA5Mzc1IC0xLjQ0OTIxODc1IDEuNzEwOTM3NSAwIDAgWiAiIGZpbGw9IiNEOUU4RTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNDgsNjApIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMCAwLjY2IDAgMSAwIEMxIDEuNjUgMSAzLjMgMSA1IEMxLjg4Njg3NSA0LjY5MDYyNSAyLjc3Mzc1IDQuMzgxMjUgMy42ODc1IDQuMDYyNSBDOS4xNjA2NzE0NiAyLjMwNjk1NDQ0IDkuMTYwNjcxNDYgMi4zMDY5NTQ0NCAxMiAyIEMxMi45OSAyLjY2IDEzLjk4IDMuMzIgMTUgNCBDMTQuNjcgNC42NiAxNC4zNCA1LjMyIDE0IDYgQzExLjY4MDI1NzY2IDYuNDE3NTUzNjIgOS4zNDIxNDIwNyA2LjczNTU2NDYgNyA3IEM1LjA1MDkzNzUgNy4yNzg0Mzc1IDUuMDUwOTM3NSA3LjI3ODQzNzUgMy4wNjI1IDcuNTYyNSBDMi4wNTE4NzUgNy43MDY4NzUgMS4wNDEyNSA3Ljg1MTI1IDAgOCBDMCA1LjM2IDAgMi43MiAwIDAgWiAiIGZpbGw9IiMxODcyNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMTcsNjgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMzMzMzMzMzMgMCA2LjY2NjY2NjY3IDAgMTAgMCBDMTAgMS45OCAxMCAzLjk2IDEwIDYgQzcuMzYgNiA0LjcyIDYgMiA2IEMyIDQuNjggMiAzLjM2IDIgMiBDMS4zNCAyIDAuNjggMiAwIDIgQzAgMS4zNCAwIDAuNjggMCAwIFogIiBmaWxsPSIjMDA2NDNDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzg1LDExNykiLz4KPHBhdGggZD0iTTAgMCBDMi45NyAwIDUuOTQgMCA5IDAgQzguNjcgMS42NSA4LjM0IDMuMyA4IDUgQzUuNjkgNSAzLjM4IDUgMSA1IEMwLjY3IDMuMzUgMC4zNCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjE0LDk0KSIvPgo8cGF0aCBkPSJNMCAwIEMwIDAuOTkgMCAxLjk4IDAgMyBDLTMuNjMgNC4zMiAtNy4yNiA1LjY0IC0xMSA3IEMtMTEuMzMgNS42OCAtMTEuNjYgNC4zNiAtMTIgMyBDLTEwLjc1MzM2NjY5IDIuNDkxNjY0MDkgLTkuNTAyNTA2MTMgMS45OTM2ODg1NSAtOC4yNSAxLjUgQy03LjU1MzkwNjI1IDEuMjIxNTYyNSAtNi44NTc4MTI1IDAuOTQzMTI1IC02LjE0MDYyNSAwLjY1NjI1IEMtNCAwIC00IDAgMCAwIFogIiBmaWxsPSIjRUZGNUYyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzI5LDgwKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjA3MDc3Mzc1IDMuMjEyMzIxMjUgMSA1LjYzOTM3ODA3IDEgOSBDMS4zMyA5Ljk5IDEuNjYgMTAuOTggMiAxMiBDMS4wMSAxMiAwLjAyIDEyIC0xIDEyIEMtMS4zMyAxMC4zNSAtMS42NiA4LjcgLTIgNyBDLTMuOTggNyAtNS45NiA3IC04IDcgQy03LjIzNjg3NSA2LjQwMTg3NSAtNi40NzM3NSA1LjgwMzc1IC01LjY4NzUgNS4xODc1IEMtMy42NTE2NDI1IDMuNTMwNDA2NjggLTEuODAyMTcyMSAxLjg5NzAyMzI2IDAgMCBaICIgZmlsbD0iIzBENkI0NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2OCw3NSkiLz4KPHBhdGggZD0iTTAgMCBDMS4yMDE1NzEzMSAzLjYwNDcxMzkzIDEuNTQ5ODEzNDggNy4xMTUwMzA4OCAxLjg3NSAxMC44NzUgQzEuOTYwMDc4MTMgMTEuNTgyNjk1MzEgMi4wNDUxNTYyNSAxMi4yOTAzOTA2MyAyLjEzMjgxMjUgMTMuMDE5NTMxMjUgQzIuNDc2OTI2MjggMTcuMjE5MjgzNTEgMi4yMzk3Mzc5MiAxOC43MTA2NjExMyAtMC40OTIxODc1IDIyLjAwNzgxMjUgQy0xLjMxOTc2NTYyIDIyLjY2NTIzNDM3IC0yLjE0NzM0Mzc1IDIzLjMyMjY1NjI1IC0zIDI0IEMtMi4xMjUgMjAuMTI1IC0yLjEyNSAyMC4xMjUgLTEgMTkgQy0wLjkzOTY4OTYzIDE1LjM4NTE0NzQyIC0wLjk4MDA1NDkzIDExLjc4NDEzNTc2IC0xLjAzOTA2MjUgOC4xNjk5MjE4OCBDLTEuMTAwMTMzMTUgMi4yMDAyNjYyOSAtMS4xMDAxMzMxNSAyLjIwMDI2NjI5IDAgMCBaICIgZmlsbD0iI0RERUFFNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM0Miw2NSkiLz4KPHBhdGggZD0iTTAgMCBDMSAyIDEgMiAwLjkzNzUgNS42ODc1IEMwLjg2OTQ3NzA3IDkuODIxNzgyMyAxLjY5NjU0Mzg5IDEzLjA4OTYzMTY4IDMgMTcgQzIuMzQgMTcgMS42OCAxNyAxIDE3IEMwLjY3IDE4LjMyIDAuMzQgMTkuNjQgMCAyMSBDLTEuMzk3NzM2NjEgMTQuOTA5ODYxOSAtMi40MzkxOTg3NCA5LjI1ODU4MjExIC0yIDMgQy0xLjM0IDIuMDEgLTAuNjggMS4wMiAwIDAgWiAiIGZpbGw9IiMyMTc4NTUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNDgsNjIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuMTk0Njk1NzEgMC41OTkyNDIyNCA4LjAwOTk5ODM0IDEuNTc0OTk5NDEgMTIgMyBDMTIgMy45OSAxMiA0Ljk4IDEyIDYgQzcuNjgyMjU0MiA1LjQ5MjAyOTkxIDMuOTY2OTc4ODYgNC44MDMxNzIyMSAwIDMgQzAgMi4wMSAwIDEuMDIgMCAwIFogIiBmaWxsPSIjRTdGMEVDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzkzLDgwKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjY3NTQyOTc2IDAuMjg2MDQ4OTggMy4zNDM4NTM0MyAwLjYxNzgxMjMzIDUgMSBDNS44NDY4MTEzMyA2LjA4MDg2Nzk2IDYuMDkwMzgwOTkgMTAuODQ4MjgzNzcgNiAxNiBDNS4zNCAxNiA0LjY4IDE2IDQgMTYgQzMuOTUxMDE1NjMgMTUuNDA4MzIwMzEgMy45MDIwMzEyNSAxNC44MTY2NDA2MyAzLjg1MTU2MjUgMTQuMjA3MDMxMjUgQzMuMjYxOTU4IDcuODg5NzQ5MDkgMy4yNjE5NTggNy44ODk3NDkwOSAxIDIgQzAuMzQgMS42NyAtMC4zMiAxLjM0IC0xIDEgQy0wLjY3IDAuNjcgLTAuMzQgMC4zNCAwIDAgWiAiIGZpbGw9IiMxNzcyNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzAsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNjA4ODEzMSAwLjgzNTA2MTE3IDMuNjA4ODEzMSAwLjgzNTA2MTE3IDUuODEyNSAtMC41IEM1LjgxMjUgMS4xNSA1LjgxMjUgMi44IDUuODEyNSA0LjUgQzMuNDc5MTY2NjcgNC4xNjY2NjY2NyAxLjE0NTgzMzMzIDMuODMzMzMzMzMgLTEuMTg3NSAzLjUgQy0yLjQ2NjI1IDMuMzU1NjI1IC0zLjc0NSAzLjIxMTI1IC01LjA2MjUgMy4wNjI1IEMtNi4wOTM3NSAyLjg3Njg3NSAtNy4xMjUgMi42OTEyNSAtOC4xODc1IDIuNSBDLTguNTE3NSAxLjg0IC04Ljg0NzUgMS4xOCAtOS4xODc1IDAuNSBDLTUuOTIyMjU5MDcgLTAuNDE4MzQ5MDEgLTMuMzE1NTMyMDkgLTAuNDc3MDk4NDIgMCAwIFogIiBmaWxsPSIjMUI3NDUxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzk5LjE4NzUsNzEuNSkiLz4KPHBhdGggZD0iTTAgMCBDMi45NyAwIDUuOTQgMCA5IDAgQzguNjcgMS4zMiA4LjM0IDIuNjQgOCA0IEM1LjAzIDQgMi4wNiA0IC0xIDQgQy0wLjY3IDIuNjggLTAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiNEQ0VERTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNDAsOTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTEuNjcgMC45OSAxMS4zNCAxLjk4IDExIDMgQzcuNyAzIDQuNCAzIDEgMyBDMC42NyAyLjAxIDAuMzQgMS4wMiAwIDAgWiAiIGZpbGw9IiNFNzIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3NjYsMTIwKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzExLjY3IDAuOTkgMTEuMzQgMS45OCAxMSAzIEM3LjcgMyA0LjQgMyAxIDMgQzAuNjcgMi4wMSAwLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRTkyMDI2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzY2LDExNikiLz4KPHBhdGggZD0iTTAgMCBDOS40MTAwMjI3OCAtMC4zNjkwMjA1IDkuNDEwMDIyNzggLTAuMzY5MDIwNSAxNCAyIEMxNCAzLjY1IDE0IDUuMyAxNCA3IEMxMy41MDUgNi41MjU2MjUgMTMuMDEgNi4wNTEyNSAxMi41IDUuNTYyNSBDOS45MzI3MzUyOSAzLjk1Nzk1OTU1IDguODAwMzY5MDkgMy43NDk5ODYwOSA1Ljg3NSAzLjUgQzQuNTk2MjUgMy4zMzUgMy4zMTc1IDMuMTcgMiAzIEMxLjM0IDIuMDEgMC42OCAxLjAyIDAgMCBaICIgZmlsbD0iIzNEODk2QiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1Niw1NSkiLz4KPHBhdGggZD0iTTAgMCBDMC4yODQ4ODI4MSAwLjU3NDkyMTg4IDAuNTY5NzY1NjIgMS4xNDk4NDM3NSAwLjg2MzI4MTI1IDEuNzQyMTg3NSBDMS41OTM5MzI5NyAzLjE5MzQ0NzYyIDIuMzQwMTUwNTEgNC42MzcwMzEgMy4xMDU0Njg3NSA2LjA3MDMxMjUgQzMuNDYyNTM5MDYgNi43NDgzNTkzOCAzLjgxOTYwOTM4IDcuNDI2NDA2MjUgNC4xODc1IDguMTI1IEM0LjU1MjMwNDY5IDguODA4MjAzMTMgNC45MTcxMDkzOCA5LjQ5MTQwNjI1IDUuMjkyOTY4NzUgMTAuMTk1MzEyNSBDNS41MjYyODkwNiAxMC43OTA4NTkzNyA1Ljc1OTYwOTM4IDExLjM4NjQwNjI1IDYgMTIgQzUuNjcgMTIuNjYgNS4zNCAxMy4zMiA1IDE0IEM0LjM0IDE0IDMuNjggMTQgMyAxNCBDLTEuMDc4Nzc0NjIgNS45NjQ5ODkwNiAtMS4wNzg3NzQ2MiA1Ljk2NDk4OTA2IC0wLjc1IDEuOTM3NSBDLTAuNTAyNSAxLjI5ODEyNSAtMC4yNTUgMC42NTg3NSAwIDAgWiAiIGZpbGw9IiMwQzZCNDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzgsMTAzKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzExLjAxIDEuNDg1IDExLjAxIDEuNDg1IDEwIDMgQzguMTI1IDMuMzI4MTI1IDguMTI1IDMuMzI4MTI1IDYgMy4yNSBDNS4yOTg3NSAzLjIzNDUzMTI1IDQuNTk3NSAzLjIxOTA2MjUgMy44NzUgMy4yMDMxMjUgQzIgMyAyIDMgMCAyIEMwIDEuMzQgMCAwLjY4IDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc2NiwxMjQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNjMgMCA3LjI2IDAgMTEgMCBDMTAuNjcgMC45OSAxMC4zNCAxLjk4IDEwIDMgQzcuMDMgMyA0LjA2IDMgMSAzIEMwLjY3IDIuMDEgMC4zNCAxLjAyIDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTgxMywxMTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNDk1IDAuMzkxODc1IDAuOTkgMC43ODM3NSAxLjUgMS4xODc1IEMwLjE2NjY2NjY3IDEuODU0MTY2NjcgLTEuMTY2NjY2NjcgMi41MjA4MzMzMyAtMi41IDMuMTg3NSBDLTMuNDkgMy43NDQzNzUgLTMuNDkgMy43NDQzNzUgLTQuNSA0LjMxMjUgQy02LjUgNS4xODc1IC02LjUgNS4xODc1IC0xMC41IDUuMTg3NSBDLTEwLjUgNC4xOTc1IC0xMC41IDMuMjA3NSAtMTAuNSAyLjE4NzUgQy0zLjI4Nzc0NjE3IC0xLjA2ODUxNzUxIC0zLjI4Nzc0NjE3IC0xLjA2ODUxNzUxIDAgMCBaICIgZmlsbD0iIzEyNkY0QSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNy41LDc3LjgxMjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuNjQgMCA1LjI4IDAgOCAwIEM3LjY3IDEuMzIgNy4zNCAyLjY0IDcgNCBDNC42OSA0IDIuMzggNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjRDdFQkRFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDA5LDk2KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjU1NzgwMTk2IDAuNjA5OTA4OTEgNi42ODI4NTg5IDEuNTc4MzY4MSAxMCAzIEM5LjY3IDMuOTkgOS4zNCA0Ljk4IDkgNiBDNS44NTI2MjgxOCA1LjMwMDU4NDA0IDIuOTc0MTExMjQgNC4yMzkyMTMwMiAwIDMgQzAgMi4wMSAwIDEuMDIgMCAwIFogIiBmaWxsPSIjREZFQkU2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzk0LDg3KSIvPgo8cGF0aCBkPSJNMCAwIEMtMSAzIC0xIDMgLTIuODQ3NjU2MjUgNC4xNjc5Njg3NSBDLTMuNTc4NTU0NjkgNC41MDQ0MTQwNiAtNC4zMDk0NTMxMiA0Ljg0MDg1OTM3IC01LjA2MjUgNS4xODc1IEMtNS43OTU5NzY1NiA1LjUzMTY3OTY5IC02LjUyOTQ1MzEyIDUuODc1ODU5MzggLTcuMjg1MTU2MjUgNi4yMzA0Njg3NSBDLTguMTM0MDAzOTEgNi42MTEzODY3MiAtOC4xMzQwMDM5MSA2LjYxMTM4NjcyIC05IDcgQy05LjMzIDUuNjggLTkuNjYgNC4zNiAtMTAgMyBDLTYuMjcwMzQ4NjEgMC45NjU2NDQ2OSAtNC4zMzA5NDk1OCAwIDAgMCBaICIgZmlsbD0iI0U4RjFFRCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyOCw4NykiLz4KPHBhdGggZD0iTTAgMCBDMi4zOTI3MzIzNSAzLjU4OTA5ODUzIDMuMTUzMTA5ODYgNS4yNjMxMzQ3OCAzLjE4NzUgOS41IEMzLjIwMTY3OTY5IDEwLjI5NDA2MjUgMy4yMTU4NTkzOCAxMS4wODgxMjUgMy4yMzA0Njg3NSAxMS45MDYyNSBDMyAxNCAzIDE0IDEgMTYgQy0wLjE1NzAzOTggMTIuNTI4ODgwNTkgLTAuMDMzOTY0ODkgOS43NzM2ODM0NiAwLjA2MjUgNi4xNTYyNSBDMC4wOTg0MjE3OSAzLjgxNDI1MTIzIDAuMDk4NDIxNzkgMy44MTQyNTEyMyAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogIiBmaWxsPSIjMjI3OTU2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzc3LDYyKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjY2IDAuMzMgMS4zMiAwLjY2IDIgMSBDMS4zNCAzLjk3IDAuNjggNi45NCAwIDEwIEMtMC45OSA5LjY3IC0xLjk4IDkuMzQgLTMgOSBDLTIuNDQyNzEwODcgNS42NTYyNjUyNSAtMS42NDgyNjExMSAyLjk2Njg3MDAxIDAgMCBaICIgZmlsbD0iI0RDRUFFNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM0NCwxMDgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMjcyODY2ODIgMi43ODE5MzY4IDQuOTY0Mjc2OTcgNi4yNzk1NDA2NyA3IDEwIEM2LjAxIDEwLjMzIDUuMDIgMTAuNjYgNCAxMSBDMy4zMjU5MTY5MiA5LjczMzA4NDkzIDIuNjYwOTk1MDMgOC40NjEyOTI1MSAyIDcuMTg3NSBDMS42Mjg3NSA2LjQ3OTgwNDY5IDEuMjU3NSA1Ljc3MjEwOTM3IDAuODc1IDUuMDQyOTY4NzUgQzAgMyAwIDMgMCAwIFogIiBmaWxsPSIjRDVFNURGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzc5LDEwNCkiLz4KPHBhdGggZD0iTTAgMCBDMi42NCAwIDUuMjggMCA4IDAgQzcuMzQgMS4zMiA2LjY4IDIuNjQgNiA0IEMzLjAzIDMuNTA1IDMuMDMgMy41MDUgMCAzIEMwIDIuMDEgMCAxLjAyIDAgMCBaICIgZmlsbD0iI0ZDRkRGQyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjAzOCw5OSkiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQy0zLjQ2NSA0LjQ4NSAtMy40NjUgNC40ODUgLTcgNiBDLTcuMzMgNS4wMSAtNy42NiA0LjAyIC04IDMgQy0zLjM3NSAwIC0zLjM3NSAwIDAgMCBaICIgZmlsbD0iI0Q2RTZERiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyOSw5MykiLz4KPHBhdGggZD0iTTAgMCBDLTAuNzUgNy43NSAtMC43NSA3Ljc1IC0zIDEwIEMtNC40NzgzMjI2IDcuMDQzMzU0ODEgLTQuMDYwMzI3ODMgNC4yNTc3MDI2MyAtNCAxIEMtMiAwIC0yIDAgMCAwIFogIiBmaWxsPSIjMkM3RTVEIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzcyLDY2KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjkzMDQ1OTMzIDIuNTUxNDQ4MjQgMS4wODU2NDA5MSAzLjc0MDA2NDc4IDAuMjIyNjU2MjUgNi4zNTkzNzUgQy0wLjE2MDE5NTMxIDcuMTQ4MjgxMjUgLTAuNTQzMDQ2ODggNy45MzcxODc1IC0wLjkzNzUgOC43NSBDLTEuNTA3OTEwMTYgOS45NDg4MjgxMyAtMS41MDc5MTAxNiA5Ljk0ODgyODEzIC0yLjA4OTg0Mzc1IDExLjE3MTg3NSBDLTIuMzkwMTk1MzEgMTEuNzc1MTU2MjUgLTIuNjkwNTQ2ODggMTIuMzc4NDM3NSAtMyAxMyBDLTMuNjYgMTIuNjcgLTQuMzIgMTIuMzQgLTUgMTIgQy00LjQ2MjMxMTI4IDguMTI4NjQxMiAtMy40MjI1MjcgNi4wMjgxNTg3NSAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRENFOUU0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQyLDEwMykiLz4KPHBhdGggZD0iTTAgMCBDMC45OSAwLjMzIDEuOTggMC42NiAzIDEgQzIuNTQ2MjUgMS43NDI1IDIuMDkyNSAyLjQ4NSAxLjYyNSAzLjI1IEMwLjMxMzU5MjA0IDUuNDY5MzA1NzggLTAuODgyODA4MDMgNy42Nzk2NzgyMiAtMiAxMCBDLTMuMDYzNTE2NzUgNi42MTYwODMwNyAtMy4yMTQ0Mjk4MiA1LjQxOTUzNjYgLTEuNTYyNSAyLjE4NzUgQy0xLjA0Njg3NSAxLjQ2NTYyNSAtMC41MzEyNSAwLjc0Mzc1IDAgMCBaICIgZmlsbD0iI0RCRTlFMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3OCw5NikiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQy0yLjUgNC42ODc1IC0yLjUgNC42ODc1IC01IDYgQy01LjY2IDUuMDEgLTYuMzIgNC4wMiAtNyAzIEMtMy4zNzUgMCAtMy4zNzUgMCAwIDAgWiAiIGZpbGw9IiMwRDZDNDYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMjksOTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyIDAuNjYgMiAxLjMyIDIgMiBDMy4zMiAyIDQuNjQgMiA2IDIgQzYgMi42NiA2IDMuMzIgNiA0IEM0LjY4IDQgMy4zNiA0IDIgNCBDMS42NyA1LjMyIDEuMzQgNi42NCAxIDggQy0wLjM1NDM5NjY4IDUuMjkxMjA2NjUgLTAuMDY1MDE0NTEgMi45OTA2NjczMiAwIDAgWiAiIGZpbGw9IiMxOTczNEYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNTAsNjQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuMzIgMC42NiAyLjY0IDEuMzIgNCAyIEM0IDIuOTkgNCAzLjk4IDQgNSBDMSA1IDEgNSAtMC42ODc1IDMuNSBDLTEuMTIwNjI1IDMuMDA1IC0xLjU1Mzc1IDIuNTEgLTIgMiBDLTEuMzQgMS4zNCAtMC42OCAwLjY4IDAgMCBaICIgZmlsbD0iIzE1NzI0QyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5MiwxMDEpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMC4zMyAxLjk4IDAuNjYgMyAxIEMyLjM0IDMuOTcgMS42OCA2Ljk0IDEgMTAgQzAuMDEgOS4wMSAtMC45OCA4LjAyIC0yIDcgQy0xLjM0IDQuNjkgLTAuNjggMi4zOCAwIDAgWiAiIGZpbGw9IiMyOTdENUIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzMsNzMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMC42NjY2NjY2NyA0IDEuMzMzMzMzMzMgNiAyIEM1LjY3IDIuNjYgNS4zNCAzLjMyIDUgNCBDMi4zNTEzOTU3MyA0LjU5MzU1NjE0IC0wLjI5MTk3MzIyIDQuNzQyMDkyNjkgLTMgNSBDLTIuNjI1IDMuMDYyNSAtMi42MjUgMy4wNjI1IC0yIDEgQy0xLjM0IDAuNjcgLTAuNjggMC4zNCAwIDAgWiAiIGZpbGw9IiMzMzgzNjMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMjYsNzApIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuMzEgMCA0LjYyIDAgNyAwIEM3IDEuMzIgNyAyLjY0IDcgNCBDNS42OCA0IDQuMzYgNCAzIDQgQzMgMy4zNCAzIDIuNjggMyAyIEMyLjAxIDIgMS4wMiAyIDAgMiBDMCAxLjM0IDAgMC42OCAwIDAgWiAiIGZpbGw9IiM2N0EyOEEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNTMsNjQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMCAxLjk4IDAgMyAwIEMyLjY4NzUgMS44NzUgMi42ODc1IDEuODc1IDIgNCBDMS4wMSA0LjY2IDAuMDIgNS4zMiAtMSA2IEMtMS42MjUgNC4xMjUgLTEuNjI1IDQuMTI1IC0yIDIgQy0xLjM0IDEuMzQgLTAuNjggMC42OCAwIDAgWiAiIGZpbGw9IiMxNDcwNEIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMjgsMTAxKSIvPgo8cGF0aCBkPSJNMCAwIEM0Ljc1IDEuODc1IDQuNzUgMS44NzUgNyAzIEM2LjY3IDMuOTkgNi4zNCA0Ljk4IDYgNiBDMy45NjE2NjU3NiA0LjcyNjA0MTEgMS45NjE0Nzg3NCAzLjM4OTM4MDc3IDAgMiBDMCAxLjM0IDAgMC42OCAwIDAgWiAiIGZpbGw9IiNFOEYxRUUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzOTQsOTMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuOTggMCAzLjk2IDAgNiAwIEM2IDAuOTkgNiAxLjk4IDYgMyBDMy42OSAzIDEuMzggMyAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRjhGQkY5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDEyLDkwKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMzIDEuMzIgMC42NiAyLjY0IDEgNCBDMS42NiA0IDIuMzIgNCAzIDQgQzMuNjYgNS42NSA0LjMyIDcuMyA1IDkgQzMuMDYyNSA4LjYyNSAzLjA2MjUgOC42MjUgMSA4IEMtMC4zNTQzOTY2OCA1LjI5MTIwNjY1IC0wLjA2NTAxNDUxIDIuOTkwNjY3MzIgMCAwIFogIiBmaWxsPSIjRDRFNERFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzY4LDc4KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjk5IDAuMzMgMS45OCAwLjY2IDMgMSBDMi4zNCAzLjMxIDEuNjggNS42MiAxIDggQzAuMzQgOCAtMC4zMiA4IC0xIDggQy0xLjEyNSAyLjI1IC0xLjEyNSAyLjI1IDAgMCBaICIgZmlsbD0iI0VGRjVGMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3MCw3NCkiLz4KPHBhdGggZD0iTTAgMCBDMi4wMDcyMDkyMyAwLjI4Njc0NDE4IDQuMDA4NTk0NCAwLjYxODY2NzAxIDYgMSBDNiAxLjY2IDYgMi4zMiA2IDMgQzQuMzUgMyAyLjcgMyAxIDMgQzEgMy45OSAxIDQuOTggMSA2IEMwLjM0IDYgLTAuMzIgNiAtMSA2IEMtMS4wNDI3MjEgNC4zMzM4ODA5NSAtMS4wNDA2MzgzMiAyLjY2NjE3MTE1IC0xIDEgQy0wLjY3IDAuNjcgLTAuMzQgMC4zNCAwIDAgWiAiIGZpbGw9IiM3MkE5OTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNjMsNjMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuOTM3NSAwLjY4NzUgMS45Mzc1IDAuNjg3NSA0IDIgQzQuNzUgNC42MjUgNC43NSA0LjYyNSA1IDcgQzQuMzQgNyAzLjY4IDcgMyA3IEMwIDIuNjE1Mzg0NjIgMCAyLjYxNTM4NDYyIDAgMCBaICIgZmlsbD0iIzBDNkI0NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1MSw5NykiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwIDIuNjQgMCA0IDAgQzQgMC45OSA0IDEuOTggNCAzIEMyLjAyIDMuNjYgMC4wNCA0LjMyIC0yIDUgQy0xLjM0IDMuMzUgLTAuNjggMS43IDAgMCBaICIgZmlsbD0iI0U2RjBFQyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNSw4MCkiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwIDIuNjQgMCA0IDAgQzMuNjcgMS4zMiAzLjM0IDIuNjQgMyA0IEMyLjAxIDQgMS4wMiA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMwMDg0MjgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxNjksODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMCAxLjk4IDAgMyAwIEMyLjM0IDEuMzIgMS42OCAyLjY0IDEgNCBDMC42NyAyLjY4IDAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MTcsMTAyKSIvPgo8L3N2Zz4K\\\" 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<sup>\\u00AE</sup> 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};\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\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 _this.isAngular = false;\n _this.isReact = false;\n _this.isVue = 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 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(_this.getModuleName())) {\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 this.detachUnloadEvent();\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 if (this.enablePersistence) {\n this.attachUnloadEvent();\n }\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 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 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 * Adding unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.attachUnloadEvent = function () {\n this.handleUnload = this.handleUnload.bind(this);\n window.addEventListener('pagehide', this.handleUnload);\n };\n /**\n * Handling unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.handleUnload = function () {\n this.setPersistData();\n };\n /**\n * Removing unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.detachUnloadEvent = function () {\n window.removeEventListener('pagehide', this.handleUnload);\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 this.attachUnloadEvent();\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 // Throw a warning for the required modules to be injected.\n var ignoredComponents = {\n schedule: 'all',\n diagram: 'all',\n PdfViewer: 'all',\n grid: ['logger'],\n richtexteditor: ['link', 'table', 'image', 'audio', 'video', 'formatPainter', 'emojiPicker', 'pasteCleanup', 'htmlEditor', 'toolbar', 'importExport', 'codeBlock'],\n treegrid: ['filter'],\n gantt: ['tooltip'],\n chart: ['Export', 'Zoom'],\n accumulationchart: ['Export'],\n 'query-builder': 'all'\n };\n var component = this.getModuleName();\n if (this.requiredModules && (!ignoredComponents[\"\" + component] || ignoredComponents[\"\" + component] !== 'all')) {\n var modulesRequired = this.requiredModules();\n for (var _i = 0, _a = this.moduleLoader.getNonInjectedModules(modulesRequired); _i < _a.length; _i++) {\n var module = _a[_i];\n var moduleName = module.name ? module.name : module.member;\n if (ignoredComponents[\"\" + component] && ignoredComponents[\"\" + component].indexOf(module.member) !== -1) {\n continue;\n }\n var componentName = component.charAt(0).toUpperCase() + component.slice(1); // To capitalize the component name\n console.warn(\"[WARNING] :: Module \\\"\" + moduleName + \"\\\" is not available in \" + componentName + \" component! You either misspelled the module name or forgot to load it.\");\n }\n }\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 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 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 Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.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 Component.prototype.renderReactTemplates = function (callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\n Component.prototype.clearTemplate = function (templateName, index, callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\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 = 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 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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 | Function} 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 if (typeof template === 'function') {\n return template;\n }\n else {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\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}\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 if (exp.test(str)) {\n var insideBraces = false;\n var outputString = '';\n for (var i = 0; i < str.length; i++) {\n if (str[i + ''] === '$' && str[i + 1] === '{') {\n insideBraces = true;\n }\n else if (str[i + ''] === '}') {\n insideBraces = false;\n }\n outputString += (str[i + ''] === '\"' && !insideBraces) ? '\\\\\"' : str[i + ''];\n }\n str = outputString;\n }\n else {\n str = str.replace(/\\\\?\"/g, '\\\\\"');\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, 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 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 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 var fNameSpace = (helper && Object.prototype.hasOwnProperty.call(helper, 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 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 }\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 && str !== 'true' && str !== 'false') ? 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/**\n * Replace double slashes to single slash.\n *\n * @param {string} tempStr ?\n * @returns {any} ?\n */\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n return tempStr;\n }\n else {\n return tempStr.replace(SINGLE_SLASH, double);\n }\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","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\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 | Function} 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 */\nexport function compile(templateString, helper, ignorePrefix) {\n var compiler = engineObj.compile(templateString, helper, ignorePrefix);\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 return propName === 'rowTemplate' ? [createElement('tr', { id: blazorId, className: 'e-blazor-template' })] :\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 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/**\n * Set the current template function to support Content Security Policy.\n *\n * @param {Function} template - The template function that is going to render.\n * @param {any} helper - The data utilized by the template from the helper.\n * @returns {Function} ?\n * @private\n */\nexport function initializeCSPTemplate(template, helper) {\n var boundFunc;\n template.prototype.CSPTemplate = true;\n if (!isNullOrUndefined(helper)) {\n boundFunc = template.bind(helper);\n boundFunc.prototype = Object.create(template.prototype);\n }\n else {\n boundFunc = template;\n }\n return boundFunc;\n}\n//Default Engine Class\nvar Engine = /** @class */ (function () {\n function Engine() {\n }\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","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 * @returns {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 _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 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 var header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined as isNOU, isObject, merge } from './util';\n/**\n * The Fetch class provides a way to make asynchronous network requests, typically to retrieve resources from a server.\n * ```typescript\n * var fetchApi = new Fetch('index.html', 'GET');\n * fetchApi.send()\n * .then((value) => {\n * console.log(value);\n * }).catch((error) => {\n * console.log(error);\n * });\n * ```\n */\nvar Fetch = /** @class */ (function () {\n /**\n * Constructor for Fetch class.\n *\n * @param {string|Object} options - Specifies the URL or Request object with URL to which the request is to be sent.\n * @param {string} type - Specifies which request method is to be used, such as GET, POST, etc.\n * @param {string} contentType - Specifies the content type of the request, which is used to indicate the original media type of the resource.\n */\n function Fetch(options, type, contentType) {\n /**\n * Specifies which request method is to be used, such as GET, POST, etc.\n *\n * @default GET\n */\n this.type = 'GET';\n /**\n * A boolean value indicating whether to reject the promise or not.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n if (typeof options === 'string') {\n this.url = options;\n this.type = !isNOU(type) ? type.toUpperCase() : this.type;\n this.contentType = contentType;\n }\n else if (isObject(options) && Object.keys(options).length > 0) {\n merge(this, options);\n }\n this.contentType = !isNOU(this.contentType) ? this.contentType : 'application/json; charset=utf-8';\n }\n /**\n * Send the request to server.\n *\n * @param {string|Object} data - Specifies the data that needs to be added to the request.\n * @returns {Promise<Response>} - Returns the response to a request.\n */\n Fetch.prototype.send = function (data) {\n var _this = this;\n var contentTypes = {\n 'application/json': 'json',\n 'multipart/form-data': 'formData',\n 'application/octet-stream': 'blob',\n 'application/x-www-form-urlencoded': 'formData'\n };\n try {\n if (isNOU(this.fetchRequest) && this.type === 'GET') {\n this.fetchRequest = new Request(this.url, { method: this.type });\n }\n else if (isNOU(this.fetchRequest)) {\n this.data = !isNOU(data) ? data : this.data;\n this.fetchRequest = new Request(this.url, {\n method: this.type,\n headers: { 'Content-Type': this.contentType },\n body: this.data\n });\n }\n var eventArgs = { cancel: false, fetchRequest: this.fetchRequest };\n this.triggerEvent(this['beforeSend'], eventArgs);\n if (eventArgs.cancel) {\n return null;\n }\n this.fetchResponse = fetch(this.fetchRequest);\n return this.fetchResponse.then(function (response) {\n _this.triggerEvent(_this['onLoad'], response);\n if (!response.ok) {\n throw response;\n }\n var responseType = 'text';\n for (var _i = 0, _a = Object.keys(contentTypes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (response.headers.get('Content-Type') && response.headers.get('Content-Type').indexOf(key) !== -1) {\n responseType = contentTypes[key];\n }\n }\n return response[responseType]();\n }).then(function (data) {\n _this.triggerEvent(_this['onSuccess'], data, _this);\n return data;\n }).catch(function (error) {\n var returnVal = {};\n if (_this.emitError) {\n _this.triggerEvent(_this['onFailure'], error);\n returnVal = Promise.reject(error);\n }\n return returnVal;\n });\n }\n catch (error) {\n return error;\n }\n };\n Fetch.prototype.triggerEvent = function (callback, data, instance) {\n if (!isNOU(callback) && typeof callback === 'function') {\n callback(data, instance);\n }\n };\n return Fetch;\n}());\nexport { Fetch };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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 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 {string} ?\n */\n Browser.getEvent = function (event) {\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 && !REGX_BROWSER.CHROME.test(navigator.userAgent)) {\n browserDetails['isIos'] = true;\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\n // Set 'isPointer' for pointer-enabled devices (e.g., iPad on Safari)\n browserDetails['isPointer'] = ('pointerEnabled' in window.navigator);\n }\n if (typeof window !== 'undefined' && window.Capacitor && window.Capacitor.getPlatform() === 'ios') {\n browserDetails['isPointer'] = false;\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 = EventHandler.addOrGetEventData(element);\n var copyData = extend([], undefined, eventData);\n for (var i = 0; i < copyData.length; i++) {\n var parseValue = copyData[parseInt(i.toString(), 10)];\n element.removeEventListener(parseValue.name, parseValue.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","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { 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, id: id }];\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 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 * To remove internationalization events\n *\n * @returns {void} ?\n */\n Observer.prototype.offIntlEvents = function () {\n var eventsArr = this.boundedEvents['notifyExternalChange'];\n if (eventsArr) {\n for (var i = 0; i < eventsArr.length; i++) {\n var curContext = eventsArr[parseInt(i.toString(), 10)].context;\n if (curContext && curContext.detectFunction && curContext.randomId && curContext.isReactMock) {\n this.off('notifyExternalChange', curContext.detectFunction, curContext.randomId);\n i--;\n }\n }\n if (!this.boundedEvents['notifyExternalChange'].length) {\n delete this.boundedEvents['notifyExternalChange'];\n }\n }\n };\n /**\n * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n return Object.prototype.hasOwnProperty.call(this.boundedEvents, 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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 * Returns the array of modules that are not loaded in the component library.\n *\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @returns {ModuleDeclaration[]} ?\n * @private\n */\n ModuleLoader.prototype.getNonInjectedModules = function (requiredModules) {\n var _this = this;\n return requiredModules.filter(function (module) { return !_this.isModuleLoaded(module.member); });\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\n * @returns {void} ?\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 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 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","/***\n * Hijri parser\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\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, setDateFormat } 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/**\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 formatOptions.firstDayOfWeek = base.getWeekData(culture, cldr);\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 formatOptions.weekday = getValue('days.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\n formatOptions.weekday = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n formatOptions.month = getValue('months.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\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 var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n }\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 ret += options.month[\"\" + curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[\"\" + weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n 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 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 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 var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[\"\" + desig];\n break;\n }\n case 'G': {\n var dec = value.getFullYear() < 0 ? 0 : 1;\n var retu = options.era[\"\" + dec];\n if (isNullOrUndefined(retu)) {\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n }\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/'/g, '');\n break;\n case 'z': {\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n }\n case ':':\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, options.firstDayOfWeek);\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 };\nsetDateFormat(DateFormat);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { IntlBase as base, setNumberFormat, defaultCurrencyCode } 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 percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\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, option.ignoreCurrency);\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 if (!isUndefined(fOptions.useGrouping) && fOptions.useGrouping) {\n fOptions.useGrouping = cOptions.pData.useGrouping;\n }\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, option);\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 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 * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions, option) {\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, option);\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[parseInt(i.toString(), 10)] === '0' && i >= curData.minimumFractionDigits) {\n decimalPart = decimalPart.slice(0, i);\n }\n else {\n break;\n }\n }\n // removes the dot and trailing zero\n var decimalSeparator = (dOptions).numberMapper.numberSymbols[mapper[3]] || '.';\n if (decimalPart === '') {\n fValue = temp[0];\n }\n else {\n fValue = temp[0] + decimalSeparator + decimalPart;\n }\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, 10)) : fValue;\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n if (fValue === '0' && option && option.format === '0') {\n return fValue + curData.nend;\n }\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 * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.roundTo = function (value, digits) {\n var factor = Math.pow(10, digits);\n return (Math.round(value * factor) / factor).toFixed(digits);\n };\n NumberFormat.processFraction = function (value, min, max, option) {\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 this.roundTo(value, max);\n }\n var str = value + '';\n if (str[0] === '0' && option && option.format === '###.00') {\n str = str.slice(1);\n }\n return str;\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 * @returns {string} ?\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 };\nsetNumberFormat(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/**\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 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 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 var weekData = void 0;\n if (isBlazor()) {\n weekData = getValue('days.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n weekData = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n var weekObject = parser.reverseObject(weekData);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n }\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 monthData = getValue('months.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n monthData = dependable.dateObject[\"\" + month][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n parseOptions[\"\" + charKey] = parser.reverseObject(monthData);\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 var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n }\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 var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n parseOptions[\"\" + charKey] = parser.reverseObject(periodValur);\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + ')';\n break;\n }\n case 'G': {\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[\"\" + charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + '?)';\n break;\n }\n case 'z': {\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[\"\" + charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[\"\" + charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n }\n case '\\'': {\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n }\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 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 /**\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 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 res[timeSetter[\"\" + key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[\"\" + timeSetter[\"\" + key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n *\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 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 var cultureOptions = ['en-US', 'en-MH', 'en-MP'];\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 matchString = ((prop !== 'month') && (prop === 'designator') && parseOptions.culture && parseOptions.culture.indexOf('en-') !== -1 && cultureOptions.indexOf(parseOptions.culture) === -1)\n ? matchString.toLowerCase() : matchString;\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 * Escapes all regex metacharacters in a string, preserving the {0} placeholder.\n *\n * @param {string} str ? - The input string to escape.\n * @returns {string} ? - The escaped string with {0} preserved.\n */\n DateParser.escapeRegex = function (str) {\n var tempPlaceholder = '__TEMP__';\n var tempStr = str.replace('{0}', tempPlaceholder);\n var metaChars = /[.*+?^${}()|[\\]\\\\]/g;\n var escapedStr = tempStr.replace(metaChars, '\\\\$&');\n return escapedStr.replace(tempPlaceholder, '{0}');\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 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 pattern = this.escapeRegex(pattern);\n var splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n var gmtZeroFormat = this.escapeRegex(tZone.gmtZeroFormat);\n ret = splitStr.join('|') + '|' + 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 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 var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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 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 _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 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 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 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.enableAutoScroll) {\n this.setDragArea();\n }\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 if (this.dragArea) {\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\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 if (this.isPreventScroll) {\n dragValue = this.getProcessedPositionValue({\n top: (this.position.top - this.parentClientRect.top - 2) + 'px',\n left: (this.position.left - this.parentClientRect.left - 2) + 'px'\n });\n }\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 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 Draggable.prototype.getScrollParent = function (node, reverse) {\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 var docScrollTop = document.scrollingElement.scrollTop;\n var helperClientHeight = this.helperElement.clientHeight;\n if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - helperClientHeight + docScrollTop) < draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.getBoundingClientRect().top > (draEleTop - helperClientHeight - docScrollTop)) {\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 * @param {MouseEvent | TouchEvent} evt ?\n * @returns {void}\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, 10) > 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 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 ele = document.scrollingElement;\n var isVerticalScroll = ele.scrollHeight > 0 && ele.scrollHeight > ele.clientHeight && ele.scrollTop > 0;\n var isHorrizontalScroll = ele.scrollWidth > 0 && ele.scrollWidth > ele.clientWidth && ele.scrollLeft > 0;\n pageX = isHorrizontalScroll ? pageX - ele.scrollLeft : pageX;\n pageY = isVerticalScroll ? pageY - ele.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, currentTargetElement: this.currentStateTarget });\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 Property(false)\n ], Draggable.prototype, \"isPreventScroll\", 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 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 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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\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 tDistance = _this.swipeSettings.swipeThresholdDistance;\n var eSwipeArgs = extend(undefined, _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 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 EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n var 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 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';\nimport { isNullOrUndefined } from './util';\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: 'href', selector: 'a[href]' },\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 if (isNullOrUndefined(value)) {\n return value;\n }\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 this.wrapElement = null;\n return tempEleValue.replace(/&/g, '&');\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 this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n if (item.selector === 'a[href]') {\n elements.forEach(function (element) {\n if ((element.getAttribute(item.attribute)).replace(/\\t|\\s|&/, '').indexOf('javascript:alert') !== -1) {\n element.removeAttribute(item.attribute);\n }\n });\n }\n else {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\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","location","origin","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","args","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","hasOwnProperty","call","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","later","clearTimeout","setTimeout","queryParams","array","keys_2","push","encodeURIComponent","join","isObjectArray","parser","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","setDefaultCurrencyCode","defaultCurrencyCode","setNumberFormat","NumberFormat","setDateFormat","DateFormat","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","style","cssText","attrs","attributes","updateCSSText","existingStyles","reduce","trim","newStyles","styleElement","__assign","setProperty","addClass","elements","classes","classList","getClassList","regExp","RegExp","ele","_b","classList_1","curClass","contains","add","removeClass","flag","classList_2","classArr","index","splice","remove","isVisible","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","append","NodeList","script","text","head","detach","removeChild","EventHandler","clearEvents","iKey","setAttribute","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","type","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","newValueParse","model","getArrayModel","serverDataBind","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","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","setCurrencyCode","loadCldr","data_1","cldrData","enableRtl","status","rightToLeft","getNumericObject","numObject","IntlBase","getDependables","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getNumberDependable","currency","getCurrencySymbol","numericObject","getDefaultDateObject","mode","convertToChar","cArr","cArr_1","arr","String","fromCharCode","registerLicense","licenseValidator","LicenseValidator","enableVersionBasedPersistence","versionBasedStatePersistence","compile","template","helper","ignorePrefix","fnCode","evalExp","str","varCOunt","localKeys","isClass","singleSpace","exp","insideBraces","outputString","LINES","DBL_QUOTED_STR","cnt","matchStr","SPECIAL_CHAR","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","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","initializeCSPTemplate","boundFunc","CSPTemplate","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","blazorCultureFormats","en-US","d","D","f","F","g","G","m","M","r","R","s","t","T","u","U","Y","getResultantPattern","skeleton","isIslamic","blazorCulture","resPattern","iType","compareBlazorDateFormats","format","basicPatterns","dPattern","tPattern","cldr","culture","calendartype","parserObject","blazorDefaultObject","defaultObject","dateString","isAccount","ConvertDateToWeekFormat","convertMapper","dateConverterMapper","tempString","formatOptions","curFormatMapper","getProperNumericSkeleton","formatRegex","toUpperCase","patternMatcher","fractionDigits","needFraction","cSymbol","fractionOnly","nData","nlead","nend","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","minimumFraction","maximumFraction","sym","defaultCurrency","altSymbol","ignoreCurrency","symbol","customFormat","dOptions","options","formatSplit","customNumberFormat","pData","minusSymbol","cOptions","minimumFractionDigits","maximumFractionDigits","integerPart","spaceCapture","spaceGrouping","useGrouping","fractionPart","minimumIntegerDigits","lastIndexOf","isCurrencyPercent","isCustomFormat","currencySymbol","isCurrency","percentSymbol","symbolPattern","numberMapper","groupSeparator","groupData","getGroupingDetails","parts","actual","part","loc","typeMapper","dateObj","getActualDateTimeFormat","isExcelFormat","dependable","calendar","actualPattern","patternRegex","patternMatch","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","Date","getTimezoneOffset","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","processSymbol","option","getActualNumberFormat","isExcel","minFrac","parseOptions","custom","numrericObject","curMatch","currencyFormatRegex","curCode","hasNegativePattern","fractionDigitsPattern","minimumIntegerPattern","groupingPattern","cPattern","minDigits","maxDigits","a","diff","b","integer","no","getWeekData","firstDay","defaultFirstDay","iCulture","firstDayMapper","replaceBlazorCurrency","aCurrency","rCurrency","iCurrency","pData_1","getWeekOfYear","date","firstDayOfWeek","weeknum","newYear","getFullYear","day","getDay","daynum","floor","getTime","nday","negativeDataRegex","latnParseRegex","L","H","c","'"," a","yy","EEEE","E","islamicRegex","sun","mon","tue","wed","thu","fri","sat","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","days","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","h","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","ms","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","islamic","yyyy","yyyyM","yyyyMd","yyyyMEd","yyyyMMM","yyyyMMMd","yyyyMMMEd","yyyyMMMM","yyyyQQQ","yyyyQQQQ","timeZoneNames","numbers","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","primary","percentpData","percentnData","currencynData","decimalnData","decimalpData","dateSeperator","monthIndex","month","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","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","toLowerCase","JSON","parse","error","readyState","statusText","getResponseHeader","responseHeaders","headers","exec","getAllResponseHeaders","header","Fetch","isNOU","contentTypes","application/json","multipart/form-data","application/octet-stream","application/x-www-form-urlencoded","fetchRequest","Request","method","Content-Type","triggerEvent","fetchResponse","fetch","then","response","ok","responseType","catch","returnVal","callback","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","clientInfo","userAgent","name","version","language","navigator","getEvent","isTouch","isDevice","move","end","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","isSafari","isIos","regX","platform","maxTouchPoints","Capacitor","getPlatform","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","addOrGetEventData","__eventList","eventName","listener","bindTo","intDebounce","debounceListener","eventData","isIE","passive","some","copyData","parseValue","shift","trigger","eventProp","eventData_1","event_1","assign","n","p","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","argument","errorHandler","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","isJson","dateReviver","offIntlEvents","eventsArr","curContext","detectFunction","randomId","isReactMock","boundedEvents_1","isColEName","Base","isRendered","isServerRendered","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","finalUpdate","childChangedProperties","modelObserver","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","moduleClass","filter","proxyToRaw","setProxyToRaw","toRaw","__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","GlobalAnimationMode","Disable","begin","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","progress","requestAnimationFrame","fail","newProp","oldProp","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clean","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","modules","getNonInjectedModules","usedModules","arg","removableModule_1","mod","substring","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","clearUpdate","curIndex","restrictServerDataBind","isSaveChanges","action","parent_1","parentKey","complexKeys","isFinal","valueLength","HijriParser","getHijriDate","gDate","getDate","getMonth","year","tMonth","tYear","yPrefix","julilanOffset","julianNumber","tempMonth","modifiedJulianDate","z","cyc","iy","im","tempDay","dateCorrection","iln","ii","hYear","hmonth","hDate","toGregorian","julianDate","gDay","gMonth","gYear","weekdayKey","timeSetter","datePartMatcher","Z","dateFormat","base","patternMatch_1","char","weekday","designator","eText","era","isNaN","intDateFormatter","dObject","getCurrentDateValue","matches_1","curval","curvalstr","processNumber","curstr","curlength","desig","getHours","dec","retu","pattern_1","checkTwodigitNumber","tVal","curPattern","ishour","errorText","ls","mf","lf","numberFormatter","fOptions","symbols","isPercent","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","mval","mfrac","lfrac","isFinite","intNumberFormatter","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","range","curData","zeroData","fValue","processSignificantDigits","processFraction","processMinimumIntegers","decimalPart","decimalSeparator","toExponential","customPivotFormat","groupNumbers","min","toPrecision","level1","sep","decimalSymbol","level2","roundTo","factor","pow","round","toFixed","lead","ceil","latnRegex","minute","hour","milliseconds","DateParser","dateParser","numOptions","hourOnly","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","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","matchString","internalNumberParser","cultureOptions","tmatch","getZoneValue","escapeRegex","tZone","cRegex","splitStr","ival","parseRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","Infinity","NaN","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","accountURL","lastPageID","Internationalization","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","getNumberPattern","getFirstDayOfWeek","componentList","pdfViewerSDKComponents","spreadsheetEditorSDKComponents","wordEditorSDKComponents","bypassKey","isLicensed","prefixRegex","incorrectPlatform","errors","noLicense","trailExpired","versionMismatched","platformMismatched","invalidKey","componentRestricted","validatedPlatforms","minVersion","allowedComponentsMap","pdfviewersdk","spreadsheeteditorsdk","docxeditorsdk","manager","licKey","setKey","getKey","npxManager","npxLicKey","validate","contentKey","URLKey","validateMsg","validateURL","getInfoFromKey","componentRestrictedMsg","result_1","hasError","invalidPlatform","restrictionMsg","restrictComponent","lastValue","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","needsID","isReactHybrid","isAngular","isReact","isVue","moduleLoader","localObserver","appendTo","enablePersistence","setPersistData","detachUnloadEvent","refresh","attachUnloadEvent","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","handleUnload","mergePersistData","ignoredComponents","schedule","diagram","PdfViewer","grid","richtexteditor","treegrid","gantt","chart","accumulationchart","query-builder","modulesRequired","moduleName","componentName","charAt","console","warn","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","clearTemplate","isHistoryChanged","pageID","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","enableAutoScroll","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","draEleTop","draEleLeft","isDialogEle","tempDraEleTop","dragValue","isPreventScroll","scrollIntoView","getPathElements","scrollParent","getScrollParent","getScrollPosition","reverse","hasScroll","nodeEl","clientHeight","scrollingElement","overflow","nodeEle","docScrollTop","helperClientHeight","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","currentTargetElement","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","tDistance","swipeSettings","swipeThresholdDistance","eSwipeArgs","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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AAO,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,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,MAmEpHlB,GAAYC,aAAeA,EAiC3BD,EAAYwB,YAAcA,GAC3BxB,gBAAgBA,kBCtMnB,IAEI6B,KAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAExDC,IACA3lB,EAAG,aACHmO,EAAG,WACHpE,EAAG,WACH3J,EAAG,aACHV,EAAG,UACHE,EAAG,mBAEIgmB,IACP3lB,EAAK,QACLP,EAAK,MACL2K,EAAK,UACLL,EAAK,UACLngB,EAAK,OACLmW,EAAK,SACLmO,EAAK,OACLpE,EAAK,OACL3J,EAAK,SACL0J,EAAK,QACL7B,EAAK,aACLyc,EAAK,WACLmB,EAAK,WACL9lB,EAAK,MACLH,EAAK,gBAQLxkB,GAA4B,WAC5B,QAASA,MA+PT,MArPAA,GAAW0qC,WAAa,SAAUxkB,EAAS0F,EAAQ3F,GAC/C,GAAI9qB,GAAQC,KACRsvB,EAAaigB,WAAKr6B,eAAe2V,EAAMC,EAAS0F,EAAOjB,UACvDva,EAAY7Y,EAAS,uBAAwBmzB,GAC7Cla,EAAaka,EAAWla,WACxBqW,GAAkBrB,UAAWmlB,WAAKzb,aAAa9uB,KAAKwrB,EAAOjB,UAC/D9D,GAAciH,eAAiB6c,WAAKzd,YAAYhH,EAASD,GACrDzrB,KAAcoxB,EAAOwV,mBACrBxV,EAAS+e,WAAK/kB,yBAAyBgG,EAAQ1F,GAEnD,IAAIR,GAAakG,EAAO/F,QACpB8kB,WAAKrlB,oBAAoBsG,EAAOrG,SAAUmF,EAAWla,WAAYob,EAAO7kB,MAAM,EAAOvM,IAAa0rB,EAAU,GAEhH,IADAW,EAAc2P,cAAgBh8B,IAAajD,EAAS,gBAAiBiZ,GAAcm6B,WAAK55B,iBAAiB2Z,EAAWla,YAChHzY,EAAY2tB,GACZppB,EAAW,oDAEV,CACDopB,EAAailB,WAAKlkB,wBAAwBf,GACtClrB,MACAkrB,EAAaA,EAAW9tB,QAAQ,KAAM,MAE1CivB,EAAclW,QAAU+U,EACxBmB,EAAcsE,UAAY3wB,IACtBf,KAAW2W,GAAarU,GAAOoe,gBAAgBuQ,EAAWtE,aAAcrqB,GAAOwc,mBAAmB0N,GAEtG,KAAK,GAAI9sB,GAAK,EAAGyxC,EADEllB,EAAWrnB,MAtEd,wEAuEgClF,EAAKyxC,EAAe3zC,OAAQkC,IAAM,CAC9E,GAAIoZ,GAAMq4B,EAAezxC,GACrBmE,EAAMiV,EAAItb,OACV4zC,EAAOt4B,EAAI,EAIf,QAHa,MAATs4B,IACAA,EAAO,KAEHA,GACJ,IAAK,IACL,IAAK,IACGrwC,IACAqsB,EAAcikB,QAAUvzC,EAAS,QAAUozC,WAAKlU,WAAW,GAAKn5B,GAAMkT,GAGtEqW,EAAcikB,QAAUpgB,EAAWla,WAAW,GAAKm6B,WAAKvZ,MApFnE,eAoF0FuZ,WAAKlU,WAAW,GAAKn5B,GAExG,MACJ,KAAK,IACL,IAAK,IACG9C,IACAqsB,EAAc6P,MAAQn/B,EAAS,UAAYozC,WAAKlU,WAAW,GAAKn5B,GAAMkT,GAGtEqW,EAAc6P,MAAQhM,EAAWla,WAAW,GAAKm6B,WAAKjU,OA7FjE,eA6FyFiU,WAAKlU,WAAW,GAAKn5B,GAEvG,MACJ,KAAK,IACDupB,EAAckkB,WAAavwC,IACvBjD,EAAS,aAAciZ,GAAcjZ,EAAS,yBAA0BiZ,EAC5E,MACJ,KAAK,IACD,GAAIw6B,GAAS1tC,GAAO,EAAK,UAAqB,IAARA,EAAa,WAAa,WAChEupB,GAAcokB,IAAMzwC,IAAajD,EAAS,OAAQiZ,GAAcjZ,EAAS,QAAUyzC,EAAOtgB,EAAWla,WACrG,MAEJ,KAAK,IACDqW,EAAcqE,SAAW3zB,EAAS,sBAAuBmzB,EAAWtE,gBAKpF,MAAO,UAAU1uB,GACb,MAAIwzC,OAAMxzC,EAAMkxC,WACL,KAEJztC,EAAMgwC,iBAAiBzzC,EAAOmvB,KAU7C7mB,EAAWmrC,iBAAmB,SAAUzzC,EAAO+wB,GAK3C,IAAK,GAHDlpB,GAAM,GACNwF,EAFU0jB,EAAQ9X,QAEAtS,MAAMssC,WAAK3a,gBAC7Bob,EAAUhwC,KAAKiwC,oBAAoB3zC,EAAO+wB,EAAQjD,WAC7CrsB,EAAK,EAAGmyC,EAAYvmC,EAAS5L,EAAKmyC,EAAUr0C,OAAQkC,IAAM,CAC/D,GAAIkF,GAAQitC,EAAUnyC,GAClB2d,EAAWzY,EAAMpH,OACjB4zC,EAAOxsC,EAAM,EACJ,OAATwsC,IACAA,EAAO,IAEX,IAAIU,OAAS,GACTC,EAAY,GACZpxB,MAAW,GACXqxB,MAAgB,GAChBC,EAAS,EACb,QAAQb,GACJ,IAAK,IACL,IAAK,IACDU,EAASH,EAAQ1U,MACb5f,EAAW,EACXvX,GAAOkpB,EAAQiO,MAAM,GAAK6U,GAG1BnxB,GAAW,CAEf,MACJ,KAAK,IACL,IAAK,IACD7a,GAAOkpB,EAAQqiB,QAAQ,GAAKR,GAAW5yC,EAAMy2B,UAC7C,MACJ,KAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAED,GADA/T,GAAW,EACE,MAATywB,EACAU,EAASH,EAAQvd,SAEhB,IAAa,MAATgd,EAAc,CACnBzwB,GAAW,EACXqxB,GAAgB,CAGhB,IAAIE,IADJH,GADAA,EAAY9zC,EAAM,GAAK6yC,GAAW,GAAKM,MAAS5yC,YAC1BuvC,UAAU,EAAG1wB,IACT7f,MAC1B,IAAI6f,IAAa60B,EAAW,CACxB,GAAI70B,EAAW,EACX,QAEJ,KAAK,GAAIhf,GAAI,EAAGA,EAAIgf,EAAW60B,EAAW7zC,IACtC0zC,EAAY,IAAMA,EAAUvzC,WAGpCyzC,GAAUF,MAGVD,GAAS7zC,EAAM,GAAK6yC,GAAW,GAAKM,KAE3B,OAATA,IACAU,EAASA,EAAS,IAAM,GAE5B,MACJ,KAAK,IACDE,GAAgB,EAChBC,GAAUN,EAAQtC,KACD,IAAbhyB,IACA40B,EAASA,EAAOj2B,OAAOi2B,EAAOz0C,OAAS,GAE3C,MACJ,KAAK,IACD,GAAI20C,GAAQl0C,EAAMm0C,WAAa,GAAK,KAAO,IAC3CtsC,IAAOkpB,EAAQsiB,WAAW,GAAKa,EAC/B,MAEJ,KAAK,IACD,GAAIE,GAAMp0C,EAAMu2B,cAAgB,EAAI,EAAI,EACpC8d,EAAOtjB,EAAQwiB,IAAI,GAAKa,EACxBvzC,GAAkBwzC,KAClBA,EAAOtjB,EAAQwiB,IAAIa,EAAM,EAAI,IAEjCvsC,GAAOwsC,GAAQ,EACf,MAEJ,KAAK,IACDxsC,GAAkB,OAAVlB,EAAoB,IAAOA,EAAMzG,QAAQ,KAAM,GACvD,MACJ,KAAK,IACD,GAAIwzB,GAAW1zB,EAAM4zB,oBACjB0gB,EAAal1B,EAAW,EAAK,QAAU2R,EAAQyC,SAASK,UAC5DygB,GAAYA,EAAUp0C,QAAQ,KAAM6wB,EAAQ0C,UAAU7Q,eACrC,IAAb8Q,EACA7rB,GAAOkpB,EAAQyC,SAASM,eAGxBigB,GAAgB,EAChBC,EAAStwC,KAAKqwB,iBAAiBL,EAAU4gB,IAE7CN,EAASjjB,EAAQyC,SAASQ,UAAU9zB,QAAQ,QAAS8zC,EACrD,MAEJ,KAAK,IACDnsC,GAAOkpB,EAAQ0C,UAAU9Q,cAAgC,aACzD,MACJ,KAAK,IACD9a,GAAOkpB,EAAQ+N,aACf,MACJ,KAAK,IACDpc,GAAW,EACXmxB,EAASZ,WAAK/c,cAAcl2B,EAAO+wB,EAAQqF,eAC3C,MACJ,SACIvuB,GAAOlB,EAEX+b,IACAqxB,GAAgB,EAChBC,EAAStwC,KAAK6wC,oBAAoBV,EAAQz0B,IAE1C20B,IACAlsC,GAAOxD,GAAOod,kBAAkBuyB,EAAQf,WAAKlc,eAAgBhG,EAAQ0C,UAAU5a,SAGvF,MAAOhR,IAEXS,EAAWqrC,oBAAsB,SAAU3zC,EAAO8tB,GAC9C,MAAIA,GACOijB,cAAYC,aAAahxC,IAE3BoxC,KAAMpxC,EAAMu2B,cAAeyI,MAAOh/B,EAAMmxC,WAAa,EAAGhb,KAAMn2B,EAAMkxC,YASjF5oC,EAAWisC,oBAAsB,SAAU/yB,EAAK5b,GAC5C,GAAIiC,GAAM2Z,EAAM,EAChB,OAAY,KAAR5b,GAA4B,IAAfiC,EAAItI,OACV,IAAMsI,EAEVA,GAUXS,EAAWyrB,iBAAmB,SAAUygB,EAAMv7B,GAC1C,GAAIxV,GAAQC,KAER+wC,EADOx7B,EAAQ9Y,MAAM,KACHq0C,EAAO,EAAI,EAAI,GACjCjf,EAAKnf,KAAKE,IAAIk+B,EAClB,OAAOC,GAAaA,EAAWv0C,QAAQ,UAAW,SAAU2a,GACxD,GAAIjV,GAAMiV,EAAItb,OACVm1C,GAA+B,IAAtB75B,EAAIjZ,QAAQ,IACzB,OAAO6B,GAAM8wC,oBAAoBn+B,KAAKugB,MAAM+d,EAAUnf,EAAK,GAAOA,EAAK,IAAM3vB,MAG9E0C,IAGXD,GAAcC,GCvSd,IAAIqsC,KACAvY,GAAM,2BACNwY,GAAM,2BACNC,GAAM,wBACNC,GAAM,yBAINj8B,IAAU,WAAY,MAAO,QAAS,UAAW,eAMjDzQ,GAA8B,WAC9B,QAASA,MAkXT,MAxWAA,GAAa2sC,gBAAkB,SAAUvmB,EAAS0F,EAAQ3F,GACtD,GAII4D,GAJA1uB,EAAQC,KACRsxC,EAAWjzC,KAAWmyB,GACtB9C,KACAN,KAEAkC,EAAaigB,WAAKr6B,eAAe2V,EAAMC,EAAS,IAAI,GACpD9V,EAAYsa,EAAWvZ,aAC3BqX,GAASsB,aAAetvB,IAAaf,KAAW2W,GAC5CrU,GAAOoe,gBAAgBuQ,EAAWtE,aAAcrqB,GAAOwc,mBAAmB0N,IAAO,GACrFuC,EAASkB,eAAiBlvB,IAAajD,EAAS,iBAAkB6Y,GAAau6B,WAAKz5B,kBAAkBwZ,EAAWvZ,cAAeu7B,EAASz7B,UAAYrR,sBAAqBgsB,EAAOxD,UAAWwD,EAAOvD,gBACnMG,EAASoB,cAAgBpvB,IAAajD,EAAS,4BAA6B6Y,GACxEoY,EAASsB,aAAazP,cAA8B,YACxDmO,EAASK,YAAcruB,IAAajD,EAAS,0BAA2B6Y,GACpEoY,EAASsB,aAAazP,cAA4B,SACtD,IAAIsyB,GAAUnkB,EAASsB,aAAazP,aACpC,IAAKuR,WAAoB+e,WAAK3jB,YAAY5mB,KAAKwrB,EAAO/F,QAClDiD,EAAW6hB,WAAKpiB,aAAaqD,EAAO/F,OAAQ2C,EAAUkC,EAAWvZ,gBAC5DpZ,EAAY20C,EAAStjB,cAAgBsjB,EAAStjB,cAC/CsjB,EAAStjB,YAAcN,EAASF,MAAMQ,iBAGzC,CAkBD,GAjBA3vB,EAAOizC,EAAU/B,WAAK5jB,yBAAyB6E,EAAO/F,QAAU,MAChE6mB,EAAS/iB,WAA+B,aAAlB+iB,EAAS3lC,KAC/B2lC,EAASE,UAA8B,YAAlBF,EAAS3lC,KACzBvM,MACDqvB,EAAgB8gB,WAAK/5B,iBAAiB87B,EAAS3lC,KAAMyhB,EAASsB,aAAarQ,aAAciR,EAAWvZ,cAAeu7B,EAASlmB,YAEhIkmB,EAASG,SAAWzxC,KAAK0xC,gBAAgBJ,EAASK,yBAA0BL,EAASM,0BAA0B,GAC/G5xC,KAAK0xC,gBAAgBJ,EAAS1jB,sBAAuB0jB,EAAS3jB,uBAAuB,GAAO,GACvFhxB,EAAY20C,EAASvlB,kBACtBulB,EAAS3jB,sBAAwB2jB,EAAS1jB,sBAAwB0jB,EAASvlB,gBAE3EpvB,EAAY20C,EAAStjB,eACrBsjB,EAAStjB,aAAc,GAEvBsjB,EAAS/iB,aAAenvB,MACxBqvB,EAAgBA,EAAcjyB,QAAQ,UAAW+yC,WAAKxiB,kBAErD3tB,IAUDsuB,EAASvB,MAAQ9tB,QAAelC,EAASm1C,EAAS3lC,KAAO,QAASqJ,IAClE0Y,EAASF,MAAQnvB,QAAelC,EAASm1C,EAAS3lC,KAAO,QAASqJ,IAC5C,aAAlBs8B,EAAS3lC,MAAuB6kB,EAAO3a,UACvC05B,WAAKpd,uBAAuBzE,EAASF,MAAOE,EAASvB,OAAQiB,EAASkB,eAAgBkC,EAAO3a,cAbpF,CACb,GAAIpZ,GAAQgyB,EAAchyB,MAAM,IAChCixB,GAASvB,MAAQojB,WAAK95B,cAAchZ,EAAM,IAAM,IAAMA,EAAM,IAAI,EAAM2wB,EAASkB,gBAC/EZ,EAASF,MAAQ+hB,WAAK95B,cAAchZ,EAAM,IAAI,EAAO2wB,EAASkB,gBAC1DgjB,EAAStjB,cACTsjB,EAAS3iB,eAAiB4iB,EAAQp8B,GAAO,IACzCm8B,EAAS1iB,UAAY5uB,KAAK6uB,mBAAmBpyB,EAAM,KAc3D,GAJcE,EAAY20C,EAAS3jB,yBAE/B2jB,EAAS3jB,sBAAwBD,EAASvB,MAAMS,iBAEhDjwB,EAAY20C,EAAS1jB,uBAAwB,CAC7C,GAAIikB,GAAOnkB,EAASvB,MAAMU,eAC1BykB,GAAS1jB,sBAAwBjxB,EAAYk1C,IAASP,EAASE,UAAY,EAAIK,EAEnF,GAAIC,GAAQR,EAAS3jB,sBACjBokB,EAAQT,EAAS1jB,qBAChBjxB,GAAYm1C,IAAWn1C,EAAYo1C,IAChCD,EAAQC,IACRT,EAAS1jB,sBAAwBkkB,GAM7C,MAFAzzC,GAAOqvB,EAASvB,MAAOmlB,GACvBjzC,EAAOqvB,EAASF,MAAO8jB,GAChB,SAAUh1C,GACb,MAAIwzC,OAAMxzC,GACCi1C,EAAQp8B,GAAO,IAEhB68B,SAAS11C,GAGZyD,EAAMkyC,mBAAmB31C,EAAOoxB,EAAUN,EAAUoD,GAFhD+gB,EAAQp8B,GAAO,MAWlCzQ,EAAamqB,mBAAqB,SAAUtZ,GACxC,GAAIpR,MACAlB,EAAQsS,EAAQtS,MAAMssC,WAAKnc,kBAC/B,IAAInwB,GAASA,EAAM,GAAI,CACnB,GAAI2tC,GAAY3tC,EAAM,GAClBghC,EAAI2M,EAAUziB,YAAY,IAC9B,KAAW,IAAP8V,EAAU,CACV,GAAIlzB,GAAO6/B,EAAUn0C,MAAM,KAAK,EAChC0H,GAAI22B,QAAW/pB,EAAKlV,OAASooC,EAAK,CAClC,IAAIra,GAAIgnB,EAAUziB,YAAY,IAAK8V,EAAI,IAC5B,IAAPra,IACAzlB,EAAI+tC,UAAYjO,EAAI,EAAIra,IAIpC,MAAOzlB,IAWXO,EAAagtC,gBAAkB,SAAUS,EAAMC,EAAMC,EAAgBC,GACjE,GAAIC,GAASD,EAAa,IAAM,IAC5BE,EAAO,EACPC,EAAOxB,GAAU,IAAMsB,GACvBG,EAAOzB,GAAU,IAAMsB,EAS3B,IARK51C,EAAYw1C,KACbnyC,KAAK2yC,WAAWR,EAAMM,EAAMH,GAC5BE,KAEC71C,EAAYy1C,KACbpyC,KAAK2yC,WAAWP,EAAMM,EAAMJ,GAC5BE,KAES,IAATA,EAAY,CACZ,KAAIL,EAAOC,GAIP,OAAO,CAHPlxC,GAAWwxC,EAAO,kCAAoCD,OAMrDJ,IAA2B,IAATG,GACvBtxC,EAAW,OAASwxC,EAAO,MAAQA,EAAO,kBAE9C,QAAO,GAUXhuC,EAAaiuC,WAAa,SAAU70B,EAAK1V,EAAMkqC,GAC3C,GAAIM,GAAQN,GAAc,EAAG,KAAO,EAAG,KACnCx0B,EAAM80B,EAAM,IAAM90B,EAAM80B,EAAM,KAC9B1xC,EAAWkH,EAAO,iCAAmCwqC,EAAM,GAAK,KAAOA,EAAM,KAYrFluC,EAAautC,mBAAqB,SAAU31C,EAAOg1C,EAAUlkB,EAAUoD,GACnE,GAAIqiB,EACJ,KAAIl2C,EAAY20C,EAASnlB,MAAMxgB,MAA/B,CAIQrP,EAAQ,GACRA,IAAiB,EACjBu2C,EAAUvB,EAASnlB,OAGnB0mB,EADe,IAAVv2C,EACKg1C,EAASwB,UAAYxB,EAAS9jB,MAG9B8jB,EAAS9jB,KAEvB,IAAIulB,GAAS,EAIb,IAHIF,EAAQrB,YACRl1C,GAAgB,KAEhBu2C,EAAQpB,SACRsB,EAAS/yC,KAAKgzC,yBAAyB12C,EAAOu2C,EAAQjB,yBAA0BiB,EAAQlB,8BAOxF,IAJAoB,EAAS/yC,KAAKizC,gBAAgB32C,EAAOu2C,EAAQllB,sBAAuBklB,EAAQjlB,sBAAuB4C,GAC/FqiB,EAAQ3kB,uBACR6kB,EAAS/yC,KAAKkzC,uBAAuBH,EAAQF,EAAQ3kB,uBAErDd,EAASiB,gBAAkBwkB,EAAQllB,sBAAwBklB,EAAQjlB,uBAChE,WAAW5oB,KAAK+tC,GAAS,CAI5B,IAAK,GAHDhiC,GAAOgiC,EAAOt2C,MAAM,KACpB02C,EAAcpiC,EAAK,GAEdrU,EADCy2C,EAAYt3C,OACH,EAAGa,GAAK,IACyB,MAA5Cy2C,EAAYv2C,SAASF,EAAEG,WAAY,MAAgBH,GAAKm2C,EAAQllB,uBAD1CjxB,IAEtBy2C,EAAcA,EAAYtxC,MAAM,EAAGnF,EAO3C,IAAI02C,GAAmB,EAAW1kB,aAAazP,cAAc9J,GAAO,KAAO,GAEvE49B,GADgB,KAAhBI,EACSpiC,EAAK,GAGLA,EAAK,GAAKqiC,EAAmBD,EAclD,MAVqB,eAAjBN,EAAQlnC,OAERonC,GADAA,EAASz2C,EAAM+2C,cAAcR,EAAQjlB,wBACrBpxB,QAAQ,IAAK4wB,EAASsB,aAAazP,cAAc9J,GAAO,MAE5E49B,EAASA,EAAOv2C,QAAQ,IAAK4wB,EAASsB,aAAazP,cAAc9J,GAAO,KACxE49B,EAA4B,sBAAnBF,EAAQpoB,OAAiCzqB,KAAKszC,kBAAkB12C,SAASm2C,EAAQ,KAAOA,EAC7FF,EAAQ7kB,cACR+kB,EAAS/yC,KAAKuzC,aAAaR,EAAQF,EAAQjkB,UAAUkM,QAAS+X,EAAQlkB,gBAAkB,IAAKvB,EAASsB,aAAazP,cAAc9J,GAAO,KAAO,IAAK09B,EAAQjkB,UAAUsjB,YAE1Ka,EAASpyC,GAAOod,kBAAkBg1B,EAAQxD,WAAKlc,eAAgBjG,EAASsB,aAAavZ,QAC/D,QAAlB09B,EAAQzmB,MACDymB,EAAQzmB,MAGA,MAAX2mB,GAAkBviB,GAA4B,MAAlBA,EAAO/F,OAC5BsoB,EAASF,EAAQxmB,KAErBwmB,EAAQzmB,MAAQ2mB,EAASF,EAAQxmB,OAYpD3nB,EAAasuC,yBAA2B,SAAU12C,EAAOk3C,EAAK7gC,GAC1D,GAAI5B,GAAOzU,EAAQ,EAGnB,OADayU,GAAKlV,OACL23C,EACFl3C,EAAMm3C,YAAYD,IAGzBziC,EAAOzU,EAAMm3C,YAAY9gC,IACnB5B,EACM,KAapBrM,EAAa6uC,aAAe,SAAUz1B,EAAK41B,EAAQC,EAAKC,EAAeC,GAMnE,IALA,GAAI9sC,IAAQ5J,EAAkB02C,IAAsB,IAAXA,EACrCp3C,EAAQqhB,EAAIrhB,MAAMm3C,GAClBtkC,EAAS7S,EAAM,GACfZ,EAASyT,EAAOzT,OAChBsb,EAAM,GACHtb,EAAS63C,GACZv8B,EAAM7H,EAAOzN,MAAMhG,EAAS63C,EAAQ73C,IAAWsb,EAAItb,OAC9C83C,EAAMx8B,EAAO,IAClBtb,GAAU63C,EACN3sC,IACA2sC,EAASG,EACT9sC,GAAO,EAIf,OADAtK,GAAM,GAAK6S,EAAOzN,MAAM,EAAGhG,IAAWsb,EAAItb,OAAS83C,EAAM,IAAMx8B,EACxD1a,EAAMgE,KAAKmzC,IAWtBlvC,EAAaovC,QAAU,SAAUx3C,EAAOmiB,GACpC,GAAIs1B,GAASrhC,KAAKshC,IAAI,GAAIv1B,EAC1B,QAAQ/L,KAAKuhC,MAAM33C,EAAQy3C,GAAUA,GAAQG,QAAQz1B,IAEzD/Z,EAAauuC,gBAAkB,SAAU32C,EAAOk3C,EAAK7gC,EAAK6d,GACtD,GAAIzf,IAAQzU,EAAQ,IAAIG,MAAM,KAAK,GAC/BZ,EAASkV,EAAOA,EAAKlV,OAAS,CAClC,IAAI23C,GAAO33C,EAAS23C,EAAK,CACrB,GAAIrvC,GAAM,EACV,IAAe,IAAXtI,EAGC,CACDsI,GAAO7H,CACP,KAAK,GAAI+M,GAAI,EAAGA,EAAImqC,EAAM33C,EAAQwN,IAC9BlF,GAAO,GAEX,OAAOA,GAEX,MATIA,GAAM7H,EAAM43C,QAAQV,GASjBl3C,EAAM43C,QAAQV,GAEpB,IAAKr2C,EAAkBwV,KAAS9W,EAAS8W,GAAe,IAARA,GACjD,MAAO3S,MAAK8zC,QAAQx3C,EAAOqW,EAE/B,IAAIwE,GAAM7a,EAAQ,EAIlB,OAHe,MAAX6a,EAAI,IAAcqZ,GAA4B,WAAlBA,EAAO/F,SACnCtT,EAAMA,EAAItV,MAAM,IAEbsV,GASXzS,EAAawuC,uBAAyB,SAAU52C,EAAOk3C,GACnD,GAAIziC,GAAOzU,EAAMG,MAAM,KACnB03C,EAAOpjC,EAAK,GACZ7O,EAAMiyC,EAAKt4C,MACf,IAAIqG,EAAMsxC,EAAK,CACX,IAAK,GAAI92C,GAAI,EAAGA,EAAI82C,EAAMtxC,EAAKxF,IAC3By3C,EAAO,IAAMA,CAEjBpjC,GAAK,GAAKojC,EAEd,MAAOpjC,GAAKtQ,KAAK,MAQrBiE,EAAa4uC,kBAAoB,SAAUh3C,GACvC,GAAIA,GAAS,IAAQ,CAEjB,GAAIwH,IADJxH,GAAS,KACMO,WAAWJ,MAAM,KAAuB8f,GAAPzY,EAAG,GAAcA,EAAG,GACpE,OAAOyY,KAAYA,EAAQ6vB,UAAU,EAAG,IAAM,EACxC15B,KAAK0hC,KAAK93C,GAAOO,WACjB6V,KAAKugB,MAAM32B,GAAOO,WAE5B,MAAO,IAEJ6H,IAGXD,GAAgBC,GCnYhB,IACI2vC,IAAY,WACZlF,IACAmF,OAAQ,aACRC,KAAM,WACN/1C,OAAQ,aACRs0B,IAAK,UACLwI,MAAO,WACPkZ,aAAc,mBAQdC,GAA4B,WAC5B,QAASA,MA+XT,MArXAA,GAAWC,WAAa,SAAU5pB,EAAS0F,EAAQ3F,GAC/C,GAAI9qB,GAAQC,KACRsvB,EAAaigB,WAAKr6B,eAAe2V,EAAMC,EAAS0F,EAAOjB,UACvDolB,EAAah0C,GAAOwd,yBAAyBmR,EAAWtE,aAAcrqB,GAAOwc,mBAAmB0N,IAAO,EAAOzrB,KAC9GwxB,IACAxxB,MAAcoxB,EAAOwV,mBACrBxV,EAAS+e,WAAK/kB,yBAAyBgG,EAAQ1F,GAEnD,IAGI8pB,GAHAtqB,EAAakG,EAAO/F,QACpB8kB,WAAKrlB,oBAAoBsG,EAAOrG,SAAUmF,EAAWla,WAAYob,EAAO7kB,MAAM,EAAOvM,IAAa0rB,EAAU,IAC5G+pB,EAAc,EAElB,IAAIl4C,EAAY2tB,GACZppB,EAAW,oDAEV,CACDopB,EAAailB,WAAKlkB,wBAAwBf,GAC1CsG,GAAiBxG,UAAWmlB,WAAKzb,aAAa9uB,KAAKwrB,EAAOjB,UAAWha,QAAS+U,EAAYwqB,gBAAkBhqB,QAASA,EASrH,KAAK,GARD4E,GAAepF,EAAWrnB,MAAMssC,WAAK3a,oBACrClZ,EAAWgU,EAAa7zB,OACxBk5C,EAAgB,EAChBC,EAAe,EACfC,GAAiB,EACjBC,EAAQP,EAAW/1B,aACnBmR,EAAY3wB,IAAakwB,EAAWtE,aAAa8O,QAC/Cn5B,GAAOoe,gBAAgBuQ,EAAWtE,aAAcrqB,GAAOwc,mBAAmB0N,IACvEnuB,EAAI,EAAGA,EAAIgf,EAAUhf,IAAK,CAC/B,GAAIya,GAAMuY,EAAa9yB,SAASF,EAAEG,WAAY,KAC1CqF,EAAMiV,EAAItb,OACV4zC,EAAmB,MAAXt4B,EAAI,GAAc,IAAMA,EAAI,GACpC6H,MAAW,GACXm2B,MAAY,GACZC,EAAUhG,GAAgB,GAAKK,GAC/B4F,EAAoB,IAARnzC,EAAa,GAAK,GAKlC,QAJI+yC,IACAF,EAAgBC,EAChBC,GAAiB,GAEbxF,GACJ,IAAK,IACL,IAAK,IACD,GAAI6F,OAAW,EAEXA,GADAl2C,IACWjD,EAAS,QAAUozC,WAAKlU,WAAW,GAAKn5B,GAAMotB,EAAWla,YAGzDka,EAAWla,WAAW,GAAKm6B,WAAKvZ,MAzEtD,eAyE6EuZ,WAAKlU,WAAW,GAAKn5B,GAE3F,IAAIqzC,GAAa50C,GAAO0c,cAAci4B,EACtCT,IAAe,IAAM52C,OAAOjB,KAAKu4C,GAAY90C,KAAK,KAAO,GACzD,MAEJ,KAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAED,GADA00C,GAAY,GACE,MAAT1F,GAAyB,MAATA,IAAiBvtC,EAAM,EAAG,CAC3C,GAAIszC,OAAY,EAEZA,GADAp2C,IACYjD,EAAS,UAAYozC,WAAKlU,WAAW,GAAKn5B,GAAMotB,EAAWla,YAG3Dka,EAAWla,WAAqB,OA9F3D,eA8F8Em6B,WAAKlU,WAAW,GAAKn5B,IAExF0uB,EAAa,GAAKwkB,GAAWz0C,GAAO0c,cAAcm4B,GAClDX,GAAe,IAAM52C,OAAOjB,KAAK4zB,EAAa,GAAKwkB,IAAU30C,KAAK,KAAO,QAExE,IAAa,MAATgvC,EAAc,CACnB,GAAIvtC,EAAM,EACN,QAEJ8c,IAAW,EACX61B,GAAe,IAAMK,EAAQA,EAAQ,IAAMA,EAAQ,SAGnDl2B,IAAW,EACX61B,GAAe,IAAMK,EAAQA,EAAQG,EAAW,GAEvC,OAAT5F,IACA7e,EAAa6kB,QAAS,EAE1B,MACJ,KAAK,IAEDZ,GAAe,IAAMK,GADH,IAARhzC,EAAY,IAAM,IACOgzC,EAAQ,GAC3C,MAEJ,KAAK,IACDC,EAAYn2B,GAAW,EAEnB61B,GADQ,IAAR3yC,EACe,IAAMgzC,EAAQA,EAAQ,IAGtB,IAAMA,EAAQ,IAAMhzC,EAAM,KAE7C,MACJ,KAAK,IACDizC,GAAY,CACZ,IAAIO,GAAct2C,IACdjD,EAAS,aAAcmzB,EAAWla,YAClCjZ,EAAS,yBAA0BmzB,EAAWla,WAClDwb,GAAa,GAAKwkB,GAAWz0C,GAAO0c,cAAcq4B,GAClDb,GAAe,IAAM52C,OAAOjB,KAAK4zB,EAAa,GAAKwkB,IAAU30C,KAAK,KAAO,GACzE,MAEJ,KAAK,IACD00C,GAAY,CACZ,IAAIvF,GAAS1tC,GAAO,EAAK,UAAqB,IAARA,EAAa,WAAa,WAChE0uB,GAAa,GAAKwkB,GAAWz0C,GAAO0c,cAAcje,IAC9CjD,EAAS,OAAQmzB,EAAWla,YAAcjZ,EAAS,QAAUyzC,EAAOtgB,EAAWla,aACnFy/B,GAAe,IAAM52C,OAAOjB,KAAK4zB,EAAa,GAAKwkB,IAAU30C,KAAK,KAAO,IACzE,MAEJ,KAAK,IAED00C,EAAsB,KADX,GAAIllB,OAAOC,oBAEtBU,EAAa,GAAKwkB,GAAWj5C,EAAS,sBAAuBmzB,EAAWtE,aACxE,IAAI2qB,GAAQ/kB,EAAa,GAAKwkB,GAE1BQ,GADJhB,EAAY1yC,EAAM,GACQ,QAAUyzC,EAAMxlB,UAC1CylB,GAAWA,EAASp5C,QAAQ,KAAMuzB,EAAU7Q,eAC5C21B,GAAe,IAAM70C,KAAK61C,kBAAkBD,EAAUD,EAAOT,GAAS,KACtED,GAAiB,EACjBD,EAAeJ,EAAW,EAAI,EAC9B,MAEJ,KAAK,IAEDC,GAAe,IADD19B,EAAI3a,QAAQ,KAAM,IACD,IAC/B,MAEJ,SACIq4C,GAAe,UAMvB,GAHIM,IACAvkB,EAAakkB,aAAa,GAAKM,IAAap2B,SAAUA,EAAU82B,IAAKp5C,EAAI,EAAIq4C,EAAeH,SAAUA,IAEtGl4C,IAAMgf,EAAW,IAAMve,EAAkB03C,GAAc,CACvD,GAAIvuC,GAASC,MACbqqB,GAAamlB,YAAc,GAAIzvC,GAAO,IAAMuuC,EAAc,IAAK,OAI3E,MAAO,UAAUv4C,GACb,GAAI05C,GAAkBj2C,EAAMk2C,kBAAkB35C,EAAOs0B,EAAc+jB,EACnE,IAAIx3C,EAAkB64C,KAAqB/3C,OAAOjB,KAAKg5C,GAAiBn6C,OACpE,MAAO,KAEX,IAAI+0B,EAAaxG,UAAW,CACxB,GAAI8rB,MACAtI,EAAQoI,EAAgBtI,KACxByI,EAAQH,EAAgBljB,IACxB6a,EAASqI,EAAgB1a,MACzB8a,EAASxI,EAASA,EAAQ,GAAM,GAChCyI,EAAkC,IAAlBD,EAAOv6C,MACtB+xC,IAAUD,GAAWwI,IAASE,IAC/BH,EAAO7I,cAAYC,aAAa,GAAIrd,QAEpComB,IACAzI,EAAQhxC,UAAUs5C,EAAKxI,KAAO,IAAI7rC,MAAM,EAAG,GAAKu0C,EAAQ,IAE5D,IAAIhhC,GAAai4B,cAAYwB,YAAYjB,GAASsI,EAAKxI,KAAMC,GAAUuI,EAAK5a,MAAO6a,GAASD,EAAKzjB,KACjGujB,GAAgBtI,KAAOt4B,EAAWyd,cAClCmjB,EAAgB1a,MAAQlmB,EAAWq4B,WAAa,EAChDuI,EAAgBljB,IAAM1d,EAAWo4B,UAErC,MAAOztC,GAAMu2C,cAAcN,KAUnCvB,EAAW6B,cAAgB,SAAUjpB,EAAS/wB,GAC1C,GAAIghB,GAAMhhB,GAAS,GAAI2zB,KACvB3S,GAAIi5B,gBAAgB,EACpB,IAAIC,IAAS,OAAQ,SAAU,SAAU,eAAgB,QAAS,OAC9DnjC,EAAIga,EAAQqgB,KACZ8C,EAAQnjB,EAAQsiB,WAChBgG,EAAQtoB,EAAQyC,QACfnzB,GAAY0W,MACFA,EAAI,IAAIxX,QACR,IAEPwX,GADoD,IAAtCX,KAAKugB,MAAM3V,EAAIuV,cAAgB,MAGjDvV,EAAIm5B,YAAYpjC,GAEpB,KAAK,GAAItV,GAAK,EAAG24C,EAAUF,EAAOz4C,EAAK24C,EAAQ76C,OAAQkC,IAAM,CACzD,GAAIhB,GAAM25C,EAAQ34C,GACd44C,EAAStpB,EAAQ,GAAKtwB,EAI1B,IAHIJ,EAAYg6C,IAAmB,QAAR55C,GACvBugB,EAAIs5B,QAAQ,IAEXj6C,EAAYg6C,GACb,GAAY,UAAR55C,EAAiB,CAEjB,IADA45C,GAAU,GACG,GAAKA,EAAS,GACvB,MAAO,IAAI1mB,MAAK,UAEpB,IAAI4mB,GAAQv5B,EAAIkwB,SAChBlwB,GAAIs5B,QAAQ,GACZt5B,EAAI6xB,GAAW,GAAKpyC,IAAM45C,EAC1B,IAAIG,GAAQ,GAAI7mB,MAAK3S,EAAIuV,cAAe8jB,EAAS,EAAG,GAAGnJ,SACvDlwB,GAAIs5B,QAAQC,EAAQC,EAAQD,EAAQC,OAEnC,CACD,GAAY,QAAR/5C,EAAe,CACf,GAAIg6C,GAAU,GAAI9mB,MAAK3S,EAAIuV,cAAevV,EAAImwB,WAAa,EAAG,GAAGD,SACjE,IAAKmJ,EAAS,GAAKA,EAASI,EACxB,MAAO,MAGfz5B,EAAI,GAAK6xB,GAAW,GAAKpyC,IAAM45C,IAI3C,IAAKh6C,EAAY6zC,GAAQ,CACrB,GAAI+D,GAAOj3B,EAAImzB,UACD,QAAVD,EACAlzB,EAAI05B,SAASzC,GAAiB,KAATA,EAAc,EAAI,KAEzB,KAATA,GACLj3B,EAAI05B,SAAS,GAGrB,IAAKr6C,EAAYg5C,GAAQ,CACrB,GAAIsB,GAAUtB,EAAQr4B,EAAI4S,mBACV,KAAZ+mB,GACA35B,EAAI45B,WAAW55B,EAAI65B,aAAeF,GAG1C,MAAO35B,IAUXm3B,EAAWwB,kBAAoB,SAAU35C,EAAOs0B,EAAc31B,GAC1D,GAAI0O,GAAUrN,EAAM2G,MAAM2tB,EAAamlB,aACnCqB,GAAe7C,KAAQ,EAAGD,OAAU,EAAG91C,OAAU,EACrD,IAAIrB,EAAkBwM,GAClB,MAAO,KAIP,KAAK,GAAI5L,GAAK,EAAGs5C,EADLp5C,OAAOjB,KAAK4zB,EAAakkB,cACH/2C,EAAKs5C,EAAQx7C,OAAQkC,IAAM,CACzD,GAAI4P,GAAO0pC,EAAQt5C,GACf2mC,EAAY9T,EAAakkB,aAAa,GAAKnnC,GAC3C2pC,EAAc3tC,EAAQ+6B,EAAUoR,IACpC,IAAIpR,EAAU1lB,SACVo4B,EAAW,GAAKzpC,GAAQ3N,KAAKu3C,qBAAqBD,EAAar8C,OAG/D,IAAa,aAAT0S,GAAwBhR,EAAY26C,GAgBnC,CACD,GAAIE,IAAkB,QAAS,QAAS,QACxCF,GAAyB,UAAT3pC,GAAuBijB,EAAaxG,WAAwC,OAAzBwG,EAAa9F,SAA6C,UAAzB8F,EAAa9F,SAAgD,UAAzB8F,EAAa9F,QACvEwsB,EAAxEA,EAAY,GAAGzrB,cAAgByrB,EAAYlL,UAAU,GAAGtO,cAC9DwZ,EAAyB,UAAT3pC,GAA+B,eAATA,GAA0BijB,EAAa9F,UAAoD,IAAzC8F,EAAa9F,QAAQ5sB,QAAQ,SAAmE,IAAlDs5C,EAAet5C,QAAQ0yB,EAAa9F,SACpKwsB,EAAYxZ,cAAgBwZ,EAClCF,EAAW,GAAKzpC,GAAQijB,EAAa,GAAKjjB,GAAM,GAAK2pC,OAtBH,CAClD,GAAIxB,GAAMpR,EAAUoR,IAChBh4B,MAAM,GACN25B,EAAS9tC,EAAQmsC,EAAM,GACvB/uC,GAAQpK,EAAY86C,EACpB/S,GAAUkQ,SACV92B,EAA+D,GAAzD9d,KAAK03C,aAAa3wC,EAAM0wC,EAAQ9tC,EAAQmsC,EAAM,GAAI76C,IAGxD6iB,EAA+D,GAAzD9d,KAAK03C,aAAa3wC,EAAM0wC,EAAQ9tC,EAAQmsC,EAAM,GAAI76C,GACxD6iB,GAAO9d,KAAK03C,aAAa3wC,EAAM4C,EAAQmsC,EAAM,GAAInsC,EAAQmsC,EAAM,IAAK76C,IAEnEkC,EAAkB2gB,KACnBs5B,EAAW,GAAKzpC,GAAQmQ,IAiB5C,MAJQ8S,GAAa6kB,SACb2B,EAAW3B,QAAS,GAGrB2B,GASX3C,EAAW8C,qBAAuB,SAAUj7C,EAAOk0B,GAE/C,MADAl0B,GAAQqE,GAAOod,kBAAkBzhB,EAAOk0B,EAAO7R,iBAAkB6R,EAAO9R,aACpE21B,GAAUrvC,KAAK1I,IACPA,EAEL,MAQXm4C,EAAWkD,YAAc,SAAUxgC,GAK/B,MAHcA,GAAI3a,QAAQ,MADJ,YAGGA,QADT,sBAC4B,QAC1BA,QAJI,WAIqB,QAU/Ci4C,EAAWoB,kBAAoB,SAAU1lB,EAAYynB,EAAOv4B,GACxD,GACIlb,GADAoR,EAAUqiC,EAAMtnB,UAEhBunB,EAAS,IAAMx4B,EAAS,KAAYA,EAAS,GACjDlb,GAAMgsB,EAAW3zB,QAAQ,IAAK,OAE1B2H,GAD8B,IAA9BgsB,EAAWjyB,QAAQ,MACbiG,EAAI3H,QAAQ,SAAU,IAAMq7C,EAAS,KAGrC1zC,EAAI3H,QAAQ,OAAQ,IAAMq7C,EAAS,MAE7CtiC,EAAUvV,KAAK23C,YAAYpiC,EAC3B,IAAIuiC,GAAY3zC,EAAI1H,MAAM,KAAKihB,IAAI,SAAUvG,GACzC,MAAO5B,GAAQ/Y,QAAQ,MAAO2a,KAE9BiZ,EAAgBpwB,KAAK23C,YAAYC,EAAMxnB,cAE3C,OADAjsB,GAAM2zC,EAASr3C,KAAK,KAAO,IAAM2vB,GAYrCqkB,EAAWiD,aAAe,SAAU3wC,EAAMorC,EAAMC,EAAMn3C,GAClD,GAAI88C,GAAOhxC,EAAOorC,EAAOC,CACzB,KAAK2F,EACD,MAAO,EAEX,IAAIz7C,GAAQ0D,KAAKu3C,qBAAqBQ,EAAM98C,EAC5C,OAAI8L,IACQzK,EAELA,GAEJm4C,KCjZPuD,GAAa,GADJzxC,QACe,qEAExBvJ,IAAQ,YAAa,YAMrBi7C,GAA8B,WAC9B,QAASA,MAsHT,MA5GAA,GAAaC,aAAe,SAAUptB,EAAS0F,EAAQ3F,GACnD,GAAI9qB,GAAQC,KACRsvB,EAAaigB,WAAKr6B,eAAe2V,EAAMC,EAAS,IAAI,GACpD8F,GAAiBC,QAAQ,EACxB0e,YAAK3jB,YAAY5mB,KAAKwrB,EAAO/F,UAAc+F,EAAc,QAC1DnyB,EAAOuyB,EAAc2e,WAAK5jB,yBAAyB6E,EAAO/F,QAAU,MACpEmG,EAAaC,QAAS,EACjBD,EAAa7E,gBACVyE,EAAO5C,wBACPgD,EAAahD,sBAAwB4C,EAAO5C,wBAKpDvvB,EAAOuyB,EAAc2e,WAAKpiB,aAAaqD,EAAO/F,OAAQ,KAAM,MAEhE,IAAIqP,GAAU39B,EAAS,UAAWmzB,EAAWtE,cACzC2pB,EAAah0C,GAAOwd,yBAAyBmR,EAAWtE,aAAcrqB,GAAOwc,mBAAmB0N,IAAO,EAAMzrB,IACjHwxB,GAAaunB,YAAcx3C,GAAO6c,eAAevf,OAAOjB,KAAK23C,EAAW71B,cACxE8R,EAAahU,SAAW+3B,EAAW91B,mBAAmB7hB,GAAK,GAC3D,IAAIo7C,EACJ,IAAKh5C,IAUDwxB,EAAazE,MAAQ9tB,QAAelC,EAASy0B,EAAajlB,KAAO,QAASmuB,IAC1ElJ,EAAapD,MAAQnvB,QAAelC,EAASy0B,EAAajlB,KAAO,QAASmuB,IAChD,aAAtBlJ,EAAajlB,MAAuB6kB,EAAO3a,UAC3C05B,WAAKpd,uBAAuBvB,EAAapD,MAAOoD,EAAazE,OAAQhwB,EAAS,iBAAkB29B,GAAUtJ,EAAO3a,cAXrH,IADAuiC,EAAgB7I,WAAK/5B,iBAAiBob,EAAajlB,KAAMgpC,EAAWt2B,aAAciR,EAAWvZ,cAAe6a,EAAaxF,WACtG,CAEf,GAAI3uB,IADJ27C,EAAgBA,EAAc57C,QAAQ,UAAW+yC,WAAKxiB,kBAC5BtwB,MAAM,IAChCm0B,GAAazE,MAAQojB,WAAK95B,cAAchZ,EAAM,IAAM,IAAMA,EAAM,IAAI,EAAM,IAC1Em0B,EAAapD,MAAQ+hB,WAAK95B,cAAchZ,EAAM,IAAI,EAAM,IAUhE,MAAO,UAAUH,GACb,MAAOyD,GAAMs4C,gBAAgB/7C,EAAOs0B,EAAc+jB,KAW1DsD,EAAaI,gBAAkB,SAAU/7C,EAAO+wB,EAASsnB,GACrD,GAAI2D,GACA9G,EACA7gC,EACAwjC,EACA9S,EACAl9B,CACJ,KAAyC,IAArC7H,EAAM4B,QAAQmvB,EAAQzQ,UACtB,MAAO27B,GAAAA,CAGPj8C,GAAQqE,GAAOod,kBAAkBzhB,EAAO+wB,EAAQ8qB,YAAaxD,EAAW71B,aAG7C,KAD3BxiB,GAAgC,KADhCA,EAAQqE,GAAOod,kBAAkBzhB,EAAOq4C,EAAWh2B,iBAAkBg2B,EAAWj2B,cAClExgB,QAAQ,KAAc5B,EAAME,QAAQ,KAAM,OAASF,GACvD4B,QAAQ,OACd5B,EAAQ,IAAMA,EAElB,IAAIqN,GAAUrN,EAAM2G,MAAM+0C,GAC1B,IAAI76C,EAAkBwM,GAClB,MAAO6uC,IAEXrE,GAAOxqC,EAAQ,GACfgH,EAAYhH,EAAQ,EACpB,IAAI8uC,GAAW9uC,EAAQ,EAyBvB,OAxBA03B,GAAM13B,EAAQ,GACd2uC,EAAajrB,EAAQwD,OAAWsjB,IAAS9mB,EAAQlB,MAAMC,OAAWiV,IAAQhU,EAAQlB,MAAME,MAC3C,IAAvC8nB,EAAKj2C,QAAQmvB,EAAQlB,MAAMC,SAAwD,IAArCiV,EAAInjC,QAAQmvB,EAAQlB,MAAME,MAC9EmlB,EAAY8G,EACRjrB,EAAQlB,MAAMqlB,UACdnkB,EAAQG,MAAMgkB,UAClB7gC,EAAYA,EAAUnU,QAjGjB,KAiGqC,IACtCi8C,IACA9nC,GAAa8nC,GAEjBt0C,GAAOwM,GACc,YAAjB0c,EAAQ1hB,MAAsB6lC,KAC9BrtC,GAAY,MAEZkpB,EAAQwD,QAAUxD,EAAQtB,kBAC1B5nB,EAAMu0C,WAAWv0C,EAAI+vC,QAAQ7mB,EAAQwD,OAChCynB,EAAajrB,EAAQlB,MAAMyB,sBAAwBP,EAAQG,MAAMI,sBAAyBP,EAAQtB,kBAEvGsB,EAAQO,wBACRzpB,EAAMnE,KAAK24C,qBAAqBhoC,EAAW0c,EAASlpB,EAAKm0C,IAEzDA,IACAn0C,IAAQ,GAELA,GAGf8zC,EAAaU,qBAAuB,SAAUr8C,EAAO+wB,EAASlpB,EAAKm0C,GAC/D,GAAIM,GAAoBt8C,EAAMG,MAAM,IAKpC,OAJIm8C,GAAkB,IAAMA,EAAkB,GAAG/8C,OAASwxB,EAAQO,wBAC9DzpB,GAAQA,EAAI+vC,QAAQ7mB,EAAQwD,OACvBynB,EAAajrB,EAAQlB,MAAMyB,sBAAwBP,EAAQG,MAAMI,sBAAyBP,EAAQO,wBAEpGzpB,GAEJ8zC,KhBzHA5jC,GAAe,GAAI6vB,mBAIL,KAMdvvB,wBAMiB,OAC5B,IClBIkkC,ICqBAC,GFHA3jC,IAAU,gBAAiB,cAoC3B4jC,GAAsC,WACtC,QAASA,GAAqB5kC,GACtBA,IACAnU,KAAK8qB,QAAU3W,GA8HvB,MArHA4kC,GAAqBp+C,UAAUq+C,cAAgB,SAAU3rB,GACrD,MAAOzoB,IAAW0qC,WAAWtvC,KAAKi5C,aAAc5rB,IAAa1hB,KAAM,OAAQwe,SAAU,SAAWxV,KAQpGokC,EAAqBp+C,UAAUu+C,gBAAkB,SAAU7rB,GAOvD,MANIA,KAAYA,EAAQxX,WACpBwX,EAAQxX,SAAWrR,uBAEnBpF,KAAciuB,IAAYA,EAAQ5C,SAClC4C,EAAQM,sBAAwB,GAE7BjpB,GAAa2sC,gBAAgBrxC,KAAKi5C,aAAc5rB,MAAe1Y,KAQ1EokC,EAAqBp+C,UAAUw+C,cAAgB,SAAU9rB,GACrD,MAAOonB,IAAWC,WAAW10C,KAAKi5C,aAAc5rB,IAAalD,SAAU,QAASxe,KAAM,QAAUgJ,KAQpGokC,EAAqBp+C,UAAUy+C,gBAAkB,SAAU/rB,GAIvD,MAHIjuB,MAAciuB,IAAYA,EAAQ5C,SAClC4C,EAAQM,sBAAwB,GAE7BsqB,GAAaC,aAAal4C,KAAKi5C,aAAc5rB,IAAa5C,OAAQ,KAAO9V,KASpFokC,EAAqBp+C,UAAU0+C,aAAe,SAAU/8C,EAAOk0B,GAC3D,MAAOxwB,MAAKk5C,gBAAgB1oB,GAAQl0B,IASxCy8C,EAAqBp+C,UAAU2+C,WAAa,SAAUh9C,EAAOk0B,GACzD,MAAOxwB,MAAKg5C,cAAcxoB,GAAQl0B,IAStCy8C,EAAqBp+C,UAAU4+C,UAAY,SAAUj9C,EAAOk0B,GACxD,MAAOxwB,MAAKm5C,cAAc3oB,GAAQl0B,IAStCy8C,EAAqBp+C,UAAU6+C,YAAc,SAAUl9C,EAAOk0B,GAC1D,MAAOxwB,MAAKo5C,gBAAgB5oB,GAAQl0B,IAUxCy8C,EAAqBp+C,UAAU8+C,eAAiB,SAAUjpB,EAAQnB,GAC9D,MAAOpa,YAASma,wBAAwBpvB,KAAKi5C,aAAczoB,EAAQ7b,GAAU0a,IAUjF0pB,EAAqBp+C,UAAU++C,iBAAmB,SAAUlpB,EAAQE,GAChE,MAAOzb,YAASwb,sBAAsBzwB,KAAKi5C,aAAczoB,EAAQ7b,GAAU+b,IAO/EqoB,EAAqBp+C,UAAUg/C,kBAAoB,WAC/C,MAAO1kC,YAAS6c,YAAY9xB,KAAKi5C,aAActkC,KAOnDokC,EAAqBp+C,UAAUs+C,WAAa,WACxC,MAAOj5C,MAAK8qB,SAAW1W,kBAEpB2kC,KC9LAa,IAAiB,OAAQ,YAAa,WAAY,cAAe,iBAAkB,iBAAkB,UAAW,gBAAiB,YAAa,iBAAkB,kBAAmB,QAAS,aAAc,gBAAiB,UAAW,UAAW,cAAe,OAAQ,SAAU,aAAc,UAAW,YAAa,UAAW,cAAe,SAAU,kBAAmB,WAAY,QAAS,YAAa,gBAAiB,iBAAkB,WAAY,cAAe,WAAY,YAAa,MAAO,YAC/eC,IAA0B,OAAQ,QAAS,OAAQ,WAAY,QAAS,iBAAkB,SAAU,WAAY,cAAe,YAAa,UAAW,cAAe,cAAe,kBACrLC,IAAkC,OAAQ,WAAY,QAAS,iBAAkB,SAAU,WAAY,cAAe,YAAa,UAAW,cAAe,YAAa,kBAC1KC,IAA2B,OAAQ,QAAS,OAAQ,WAAY,QAAS,iBAAkB,SAAU,WAAY,cAAe,YAAa,UAAW,cAAe,YAAa,eAC3LC,IAAa,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAC/C,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,IAC7C,IAAK,IAAK,GAAI,IAAK,IAAK,KAOxBtjC,GAAkC,WAClC,QAASA,GAAiB3Z,GACtBiD,KAAKi6C,YAAa,EAClBj6C,KAAK8gC,QAAU,KACf9gC,KAAK6hC,SAAW,sEAChB7hC,KAAKk6C,YAAc,+DACnBl6C,KAAKm6C,kBAAoB,sDACzBn6C,KAAKo6C,QACDC,UAAW,oNAEXC,aAAc,oNAEdC,kBAAmB,2EACnBC,mBAAoB,2EACpBC,WAAY,2EACZC,oBAAqB,4EAEzB16C,KAAK26C,sBACL36C,KAAK46C,WAAa,KAClB56C,KAAK66C,sBACDC,aAAgBjB,GAChBkB,qBAAwBjB,GACxBkB,cAAiBjB,IAKrB/5C,KAAKi7C,QAAU,WAQX,QAASvsC,GAAI3R,GAAOm+C,EAASn+C,EAM7B,QAAS4R,KAAQ,MAAOusC,GAbxB,GAAIA,GAAS,IAcb,QACIC,OAAQzsC,EACR0sC,OAAQzsC,MAMhB3O,KAAKq7C,WAAa,WAOd,QAAS1sC,KAAQ,MAAO2sC,GANxB,GAAIA,GAAY,eAOhB,QACIF,OAAQzsC,MAGhB3O,KAAKi7C,QAAQE,OAAOp+C,GAmOxB,MA3NA2Z,GAAiB/b,UAAU4gD,SAAW,SAAU73C,GAC5C,GAAI83C,IAAc,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAC/D,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,KAC/DC,GAAU,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAC3D,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GACnE,IAAKx/B,KAAoB9f,EAAS+Z,GAAc8jC,IAAY/9B,MAAqB9f,EAAS,SAAU8f,IAAmB,CACnH,GAAIy/B,OAAc,GACdC,MAAc,EAClB,IAAK37C,KAAKi7C,SAAWj7C,KAAKi7C,QAAQG,UAAcp7C,KAAKq7C,YAA2C,kBAA7Br7C,KAAKq7C,WAAWD,SAA+B,CAC9G,GAAI18C,GAASsB,KAAK47C,gBAClB,IAAIl9C,GAAUA,EAAO7C,OAAQ,CAEzB,IAAK,GADDggD,OAAyB,GACpB99C,EAAK,EAAG+9C,EAAWp9C,EAAQX,EAAK+9C,EAASjgD,OAAQkC,IAAM,CAC5D,GAAIuf,GAAMw+B,EAAS/9C,GACfg+C,GAAW,CACf,KAAM/7C,KAAK6hC,SAAS78B,KAAKsY,EAAIukB,YAAc7hC,KAAKk6C,YAAYl1C,KAAKsY,EAAIukB,WAAcvkB,EAAI0+B,gBACnFN,EAAc17C,KAAKo6C,OAAOI,uBAEzB,IAAIx6C,KAAKm6C,kBAAkBn1C,KAAKsY,EAAIukB,WAAajlC,SAAS0gB,EAAIwjB,QAAQrkC,MAAM,KAAK,GAAI,IAAM,GAC5Fi/C,EAAc17C,KAAKo6C,OAAOI,uBAEzB,IAAIx6C,KAAKk6C,YAAYl1C,KAAKsY,EAAIukB,WAAajlC,SAAS0gB,EAAIwjB,QAAQrkC,MAAM,KAAK,GAAI,IAAM,GAAI,CAC1F,GAAIw/C,GAAiBj8C,KAAKk8C,kBAAkBx4C,EAAW4Z,EAAIukB,SA6B3D,IA5BIoa,GACAJ,EAAyBI,EACzBF,GAAW,GAGXF,EAAyB,KAEvBv+B,EAAIs9B,YAAct9B,EAAI6+B,WAAe7+B,EAAIs9B,aAAet9B,EAAI6+B,WAC7D7+B,EAAI6+B,UAAYv/C,SAASoD,KAAK8gC,QAAS,IAGxC4a,GADAA,GADAA,EAAc17C,KAAKo6C,OAAOG,mBACA/9C,QAAQ,mBAAoB8gB,EAAIwjB,UAChCtkC,QAAQ,mBAAoBwD,KAAK8gC,QAAU,OAGhD,MAAjBxjB,EAAI6+B,WAAqBrM,MAAMxyB,EAAI6+B,cAGnCT,GADAA,GADAA,EAAc17C,KAAKo6C,OAAOG,mBACA/9C,QAAQ,mBAAoB8gB,EAAIwjB,UAChCtkC,QAAQ,mBAAoBwD,KAAK8gC,QAAU,OAGzExjB,EAAI8+B,aACAC,EAAU,GAAIpsB,MAAK3S,EAAI8+B,cACvBE,EAAW,GAAIrsB,QACOosB,IAAYC,IAClCZ,EAAc17C,KAAKo6C,OAAOE,aAC1ByB,GAAW,IAGdL,IAAgBG,EACjB,UAiBJ,IAbMv+B,EAAIs9B,YAAct9B,EAAI6+B,WAAe7+B,EAAIs9B,aAAet9B,EAAI6+B,WAC7D7+B,EAAI6+B,UAAYv/C,SAASoD,KAAK8gC,QAAS,IAGxC4a,GADAA,GADAA,EAAc17C,KAAKo6C,OAAOG,mBACA/9C,QAAQ,mBAAoB8gB,EAAIwjB,UAChCtkC,QAAQ,mBAAoBwD,KAAK8gC,QAAU,OAGhD,MAAjBxjB,EAAI6+B,WAAqBrM,MAAMxyB,EAAI6+B,cAGnCT,GADAA,GADAA,EAAc17C,KAAKo6C,OAAOG,mBACA/9C,QAAQ,mBAAoB8gB,EAAIwjB,UAChCtkC,QAAQ,mBAAoBwD,KAAK8gC,QAAU,OAGzExjB,EAAI8+B,WAAY,CAChB,GAAIC,GAAU,GAAIpsB,MAAK3S,EAAI8+B,YACvBE,EAAW,GAAIrsB,KACnB,MAAIosB,IAAYC,GAAYD,EAAUC,GAIlC,KAHAZ,GAAc17C,KAAKo6C,OAAOE,cAOjCyB,GAAY/7C,KAAKk6C,YAAYl1C,KAAKsY,EAAIukB,WACvC7hC,KAAK26C,mBAAmBp6C,KAAK+c,EAAIukB,UAGpC7hC,KAAK26C,mBAAmB9+C,SAAUggD,IACnCH,EAAcA,GAAeG,OAIjCH,GAAc17C,KAAKo6C,OAAOK,eAG7B,CACD,GAAI8B,GAAiBpgD,EAAS+Z,GAAcslC,GAAav/B,GACzD0/B,GAAcx/C,EAAS+Z,GAAculC,GAASx/B,IAE1Cy/B,EADAa,GAAqC,KAAnBA,EACJA,EAGAv8C,KAAKo6C,OAAOC,UAGlC,GAAIqB,GAAmC,mBAAb16C,YAA6B7D,EAAkB6D,UAAW,CAEhF,IADuBA,SAAS4C,cAAc,gCACvB,CAEnB,GAAI44C,GAAW76C,EAAc,OACzBuD,UAAW,2BACXzC,UAAW,qxCAAuxCi5C,EAAc,4EAHpzC7C,GAAc8C,GAA+B,KAAhBA,EAAsBA,EAAc,gLAGk1C,gCAEn5Ca,GAAS7zC,aAAa,QAAS,4dAC/B3H,SAASoR,KAAK/P,YAAYm6C,GAE9Bx8C,KAAKi6C,YAAa,GAG1B,MAAOj6C,MAAKi6C,YAEhBvjC,EAAiB/b,UAAUuhD,kBAAoB,SAAUx4C,EAAWm+B,GAChE,GAAInoB,IAAc,iBAAkB,cAAe,YACnD,OAAiB,gBAAbmoB,GAC0C,IAAnCnoB,EAAWxb,QAAQwF,GAAoB,KAAO1D,KAAKo6C,OAAOM,qBAKtB,KADzB16C,KAAK66C,qBAAqBhZ,QACzB3jC,QAAQwF,GAAoB,KAAO1D,KAAKo6C,OAAOM,qBAG1EhkC,EAAiB/b,UAAU8hD,iBAAmB,SAAU1/C,GACpD,IACI,MAAO2/C,MAAK3/C,GAEhB,MAAOkhC,GACH,MAAO,KAQfvnB,EAAiB/b,UAAUihD,eAAiB,WACxC,IACI,GAAIV,GAAS,GACTyB,GAAQ,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAC9D,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QACxE,QAAS,QAAS,QAAS,QAAS,QAAS,SAC7CC,KACAC,KACAb,GAAkB,EAClBc,GAAW,CACX98C,MAAKi7C,QAAQG,SACbF,EAASl7C,KAAKi7C,QAAQG,UAGtB0B,GAAW,EACX5B,EAASl7C,KAAKq7C,WAAWD,SAAS3+C,MAAM,iBAAiB,GAG7D,KAAK,GAAIsB,GAAK,EAAGg/C,EADC7B,EAAOz+C,MAAM,KACesB,EAAKg/C,EAAclhD,OAAQkC,IAAM,CAC3E,GAAIi/C,GAAOD,EAAch/C,GACrBk/C,EAAYj9C,KAAKy8C,iBAAiBO,EACtC,IAAKC,EAAL,CAGA,GAAIC,GAAI,EACJC,EAAQ,EACZ,IAAKL,EASA,CAGD,IAAK,GAFD1H,GAAU6H,EAAUA,EAAUphD,OAAS,GACvCuhD,KACK1gD,EAAI,EAAGA,EAAIugD,EAAUphD,OAAQa,IAClC0gD,EAAaxgD,SAASF,EAAEG,WAAY,KAAOogD,EAAUrgD,SAASF,EAAEG,WAAY,KAAKwgD,WAAW,GACtFjI,EAAQiI,WAAW,EAE7B,KAAS3gD,EAAI,EAAGA,EAAI0gD,EAAavhD,OAAQa,IACrCygD,GAAS7mC,OAAOC,aAAa6mC,EAAaxgD,SAASF,EAAEG,WAAY,UAhBrE,KAASH,EAAI,EAAGA,EAAIugD,EAAUphD,OAAQa,IAAKwgD,IAAK,CACxCA,IAAMP,EAAK9gD,SACXqhD,EAAI,EAER,IAAI1pB,GAAIypB,EAAUI,WAAW3gD,EAC7BygD,IAAS7mC,OAAOC,aAAaid,EAAKmpB,EAAK//C,SAASsgD,EAAErgD,WAAY,MAAQ,IAc9E,GAAImD,KAAK6hC,SAAS78B,KAAKm4C,IAAUn9C,KAAKk6C,YAAYl1C,KAAKm4C,IAInD,GAHAP,EAAeO,EAAM1gD,MAAM,KAC3Bu/C,GAAkB,EAEdY,EAAa/gD,OAAS,EAAG,CACzB,GAAI++C,GAAah+C,SAASggD,EAAa,GAAGngD,MAAM,KAAK,GAAI,IACrD0/C,EAAYv/C,SAASggD,EAAa,GAAI,GAC1CC,GAAYt8C,MACRshC,SAAU+a,EAAa,GACvB9b,QAAS8b,EAAa,GACtBR,WAAYQ,EAAa,GACzBT,UAAWA,EACXvB,WAAYA,SAIfuC,IAASA,EAAM1gD,MAAM,KAAKZ,OAAS,IACxCmgD,GAAkB,IAG1B,MAAIA,KAAoBa,EAAYhhD,SACtBmgD,gBAAiBA,IAGpBa,EAAYhhD,OAASghD,EAAc,KAGlD,MAAO5e,GACH,MAAO,QAGRvnB,KAEPD,GAAmB,GAAIC,IAwBhB4mC,GAAkB,SAAU55C,EAAW3G,GAI9C,MAHIA,IACAyZ,GAAgBzZ,GAEb0Z,GAAiB8kC,SAAS73C,IAE1B65C,GAAa,WACpB,MAAO9mC,IAAiBqqB,SAGjB0c,GAAuB,WAC9B,GAAIC,GAAiB,u8oHAAmgpH5E,GAAa,6zBACripH,IAAwB,mBAAb73C,YAA6B7D,EAAkB6D,UAAW,CACjE,GAAI08C,GAAkB/7C,EAAc,OAChCc,UAAWg7C,GAEfz8C,UAASoR,KAAK/P,YAAYq7C,KC1V9BhW,GAAwC,WACxC,GAAIC,GAAgB,SAAUze,EAAGyI,GAI7B,OAHAgW,EAAgB1pC,OAAO2pC,iBAChBC,uBAA2B1pC,QAAS,SAAU+qB,EAAGyI,GAAKzI,EAAE2e,UAAYlW,IACvE,SAAUzI,EAAGyI,GAAK,IAAK,GAAIsS,KAAKtS,GAAOA,EAAEryB,eAAe2kC,KAAI/a,EAAE+a,GAAKtS,EAAEsS,MACpD/a,EAAGyI,GAE5B,OAAO,UAAUzI,EAAGyI,GAEhB,QAASmW,KAAO9nC,KAAKzC,YAAc2rB,EADnCye,EAAcze,EAAGyI,GAEjBzI,EAAEvuB,UAAkB,OAANg3B,EAAa1zB,OAAO6S,OAAO6gB,IAAMmW,EAAGntC,UAAYg3B,EAAEh3B,UAAW,GAAImtC,QAGnFC,GAA0C,SAAUC,EAAYx5B,EAAQzR,EAAKkrC,GAC7E,GAA2H/e,GAAvHsK,EAAI70B,UAAU9C,OAAQ6tB,EAAI8J,EAAI,EAAIhlB,EAAkB,OAATy5B,EAAgBA,EAAOhqC,OAAOiqC,yBAAyB15B,EAAQzR,GAAOkrC,CACrH,IAAuB,gBAAZE,UAAoD,kBAArBA,SAAQC,SAAyB1e,EAAIye,QAAQC,SAASJ,EAAYx5B,EAAQzR,EAAKkrC,OACpH,KAAK,GAAIvrC,GAAIsrC,EAAWnsC,OAAS,EAAGa,GAAK,EAAGA,KAASwsB,EAAI8e,EAAWtrC,MAAIgtB,GAAK8J,EAAI,EAAItK,EAAEQ,GAAK8J,EAAI,EAAItK,EAAE1a,EAAQzR,EAAK2sB,GAAKR,EAAE1a,EAAQzR,KAAS2sB,EAChJ,OAAO8J,GAAI,GAAK9J,GAAKzrB,OAAOkP,eAAeqB,EAAQzR,EAAK2sB,GAAIA,GAY5Di0B,GAAiB,EAEjBC,GAAiB,EAEjBC,GAAgB,EAEhBC,IAAU,EAEVC,IAAgB,kCACsB,KAatCC,IAA2B,SAAU1V,GAQrC,QAAS0V,GAAU3wB,EAASxkB,GACxB,GAAI9I,GAAQuoC,EAAO/oC,KAAKS,KAAMqtB,EAASxkB,IAAa7I,IAkCpD,OAjCAD,GAAM2lC,SAAWxhC,IAMjBnE,EAAM2a,kBAAmB,EACzB3a,EAAMk+C,SAAU,EAChBl+C,EAAMm+C,eAAgB,EACtBn+C,EAAMo+C,WAAY,EAClBp+C,EAAMq+C,SAAU,EAChBr+C,EAAMs+C,OAAQ,EACVlhD,EAAkB4C,EAAM6U,YACxB7U,EAAMiM,eAAgB4I,UAAaE,gBAAe,GAElD3X,EAAkB4C,EAAMwU,SACxBxU,EAAMiM,eAAgBuI,OAAUH,mBAAkB,GAEtDrU,EAAMu+C,aAAe,GAAI3T,IAAa5qC,GACtCA,EAAMw+C,cAAgB,GAAIra,IAASnkC,GACnCsU,GAAagwB,GAAG,uBAAwBtkC,EAAM0lC,eAAgB1lC,EAAOA,EAAM2lC,UAErD,mBAAXvqC,SAA8C,mBAAb6F,WAA6Bs8C,GAAgBv9C,EAAMkL,mBACrC,IAAlD2uC,GAAc17C,QAAQ6B,EAAMkL,mBAC5B4yC,IAAgC,GACZ,IAChBC,IAAU,GAIjBnhD,EAAYkM,IACb9I,EAAMy+C,WAEHz+C,EAibX,MA3dA2nC,IAAUsW,EAAW1V,GA4CrB0V,EAAUrjD,UAAUmwC,gBAAkB,WAClC,UAOJkT,EAAUrjD,UAAU4Q,QAAU,WACtBvL,KAAK0mC,cAGL1mC,KAAKy+C,oBACLz+C,KAAK0+C,iBACL1+C,KAAK2+C,qBAET3+C,KAAKu+C,cAAchzC,UACfvL,KAAKsmC,aAGTx/B,GAAa9G,KAAKwB,UAAW,cAC7BxB,KAAK2jC,QAAQ,aAAexH,QAAQ,IACpCmM,EAAO3tC,UAAU4Q,QAAQhM,KAAKS,MAC9BA,KAAKs+C,aAAarT,QAClB52B,GAAaowB,IAAI,uBAAwBzkC,KAAKylC,eAAgBzlC,KAAK0lC,aAOvEsY,EAAUrjD,UAAUikD,QAAU,WAC1B5+C,KAAKsmC,YAAa,EAClBtmC,KAAKs+C,aAAarT,QAClBjrC,KAAKuL,UACLvL,KAAK+mC,eACD/mC,KAAKy+C,mBACLz+C,KAAK6+C,oBAET7+C,KAAKu+C,cAAgB,GAAIra,IAASlkC,MAClCA,KAAK8+C,YACL9+C,KAAK++C,gBACL/+C,KAAKg/C,SACLh/C,KAAKsmC,YAAa,GAEtB0X,EAAUrjD,UAAUskD,YAAc,WAC1Bj/C,KAAKk/C,QAAUl/C,KAAKk+C,eACpBl+C,KAAKk/C,SAQblB,EAAUrjD,UAAUwkD,eAAiB,WACjC,MAAIn/C,MAAKk+C,cACEl+C,KAAKo/C,cAGLp/C,KAAKwB,SAQpBw8C,EAAUrjD,UAAU0kD,aAAe,WAC/B,GAAIC,GAAQt/C,KAAKiL,gBAAkBjL,KAAKwB,QAAQ2D,EAChD,OAAIyR,gCACOzb,OAAOokD,aAAaC,QAAQF,EAAQt/C,KAAKy/C,4BAGzCtkD,OAAOokD,aAAaC,QAAQF,IAQ3CtB,EAAUrjD,UAAUkkD,kBAAoB,WACpC7+C,KAAK0/C,aAAe1/C,KAAK0/C,aAAa9kD,KAAKoF,MAC3C7E,OAAOW,iBAAiB,WAAYkE,KAAK0/C,eAO7C1B,EAAUrjD,UAAU+kD,aAAe,WAC/B1/C,KAAK0+C,kBAOTV,EAAUrjD,UAAUgkD,kBAAoB,WACpCxjD,OAAOe,oBAAoB,WAAY8D,KAAK0/C,eAQhD1B,EAAUrjD,UAAU6jD,SAAW,SAAU31C,GAOrC,GANK1L,EAAkB0L,IAAmC,mBAGhD1L,EAAkB0L,KACxB7I,KAAKwB,QAAUqH,GAHf7I,KAAKwB,QAAUoH,EAAOC,EAAU7H,WAK/B7D,EAAkB6C,KAAKwB,SAAU,CAClC,GAAI6lC,GAAc,KAAOrnC,KAAKiL,gBAAgB6yB,aAC9C73B,IAAUjG,KAAKwB,UAAW,YAAa6lC,IACvCrnC,KAAKkmC,qBAAsB,EACvBlmC,KAAKi+C,UAAYj+C,KAAKwB,QAAQ2D,KAC9BnF,KAAKwB,QAAQ2D,GAAKnF,KAAKR,YAAYQ,KAAKiL,kBAExCjL,KAAKy+C,oBACLz+C,KAAK2/C,mBACL3/C,KAAK6+C,oBAET,IAAI96C,GAAO5H,EAAS,gBAAiB6D,KAAKwB,QACrCuC,KAAgC,IAAxBA,EAAK7F,QAAQ8B,OACtBsoC,EAAO3tC,UAAUqJ,YAAYzE,KAAKS,MAEtCA,KAAK8+C,YACL9+C,KAAK++C,eAEL,IAAIa,IACAC,SAAU,MACVC,QAAS,MACTC,UAAW,MACXC,MAAO,UACPC,gBAAiB,OAAQ,QAAS,QAAS,QAAS,QAAS,gBAAiB,cAAe,eAAgB,aAAc,UAAW,eAAgB,aACtJC,UAAW,UACXC,OAAQ,WACRC,OAAQ,SAAU,QAClBC,mBAAoB,UACpBC,gBAAiB,OAEjB58C,EAAY1D,KAAKiL,eACrB,IAAIjL,KAAK8qC,mBAAqB8U,EAAkB,GAAKl8C,IAAoD,QAAtCk8C,EAAkB,GAAKl8C,IAEtF,IAAK,GADD68C,GAAkBvgD,KAAK8qC,kBAClB/sC,EAAK,EAAG+F,EAAK9D,KAAKs+C,aAAavS,sBAAsBwU,GAAkBxiD,EAAK+F,EAAGjI,OAAQkC,IAAM,CAClG,GAAIstC,GAASvnC,EAAG/F,GACZyiD,EAAanV,EAAOxK,KAAOwK,EAAOxK,KAAOwK,EAAOE,MACpD,KAAIqU,EAAkB,GAAKl8C,KAA4E,IAA9Dk8C,EAAkB,GAAKl8C,GAAWxF,QAAQmtC,EAAOE,QAA1F,CAGA,GAAIkV,GAAgB/8C,EAAUg9C,OAAO,GAAG70B,cAAgBnoB,EAAU7B,MAAM,EACxE8+C,SAAQC,KAAK,wBAA2BJ,EAAa,yBAA4BC,EAAgB,4EAIpG3C,IAAYC,KACbP,KACAO,IAAgB,GAEpB/9C,KAAKg/C,SACAh/C,KAAKk/C,MAINl/C,KAAKi/C,cAHLj/C,KAAK2jC,QAAQ,aAazBqa,EAAUrjD,UAAUkmD,eAAiB,SAAUC,GAC3C,GAAI1hD,IAAY,CAEZjE,OAAoB,SAAE0lD,eAAe7gD,KAAKwB,QAASs/C,GAEvD9gD,KAAK+lC,YAAa,GAOtBiY,EAAUrjD,UAAUksC,SAAW,WAC3B7mC,KAAK++C,gBACLzW,EAAO3tC,UAAUksC,SAAStnC,KAAKS,OAYnCg+C,EAAUrjD,UAAU0pC,GAAK,SAAU3oC,EAAOX,EAAS+N,GAC/C,GAAqB,gBAAVpN,GACPsE,KAAKu+C,cAAcla,GAAG3oC,EAAOX,EAAS+N,OAGtC,KAAK,GAAI/K,GAAK,EAAG+lC,EAAUpoC,EAAOqC,EAAK+lC,EAAQjoC,OAAQkC,IAAM,CACzD,GAAIkuC,GAAMnI,EAAQ/lC,EAClBiC,MAAKu+C,cAAcla,GAAG4H,EAAIvwC,MAAOuwC,EAAIlxC,QAASkxC,EAAInjC,WAY9Dk1C,EAAUrjD,UAAU8pC,IAAM,SAAU/oC,EAAOX,GACvC,GAAqB,gBAAVW,GACPsE,KAAKu+C,cAAc9Z,IAAI/oC,EAAOX,OAG9B,KAAK,GAAIgD,GAAK,EAAGgjD,EAAUrlD,EAAOqC,EAAKgjD,EAAQllD,OAAQkC,IAAM,CACzD,GAAIkuC,GAAM8U,EAAQhjD,EAClBiC,MAAKu+C,cAAc9Z,IAAIwH,EAAIvwC,MAAOuwC,EAAIlxC,WAYlDijD,EAAUrjD,UAAU2Z,OAAS,SAAUpK,EAAU06B,IACpB,IAArB5kC,KAAK0mC,aACL1mC,KAAKu+C,cAAcjqC,OAAOpK,EAAU06B,IAS5CoZ,EAAUrjD,UAAUqmD,mBAAqB,WACrC,MAAOhhD,MAAKihD,iBAQhBjD,EAAUkD,OAAS,WAEf,IAAK,GADDnW,MACKhtC,EAAK,EAAGA,EAAKY,UAAU9C,OAAQkC,IACpCgtC,EAAWhtC,GAAMY,UAAUZ,EAE1BiC,MAAKrF,UAAUsmD,kBAChBjhD,KAAKrF,UAAUsmD,mBAEnB,KAAK,GAAIvkD,GAAI,EAAGA,EAAIquC,EAAWlvC,OAAQa,KACqD,IAApFsD,KAAKrF,UAAUsmD,gBAAgB/iD,QAAQ6sC,EAAWnuC,SAASF,EAAEG,WAAY,OACzEmD,KAAKrF,UAAUsmD,gBAAgB1gD,KAAKwqC,EAAWnuC,SAASF,EAAEG,WAAY,OAalFmhD,EAAUrjD,UAAUgH,cAAgB,SAAUkD,EAAS8I,EAAMwzC,GACzD,MAAOx/C,GAAckD,EAAS8I,IASlCqwC,EAAUrjD,UAAUymD,mBAAqB,SAAUrmD,EAAS6pC,GACpD5kC,KAAKk+C,gBACLl+C,KAAKqhD,WACLrhD,KAAKshD,gBAAmBC,MAAOxmD,EAAS6D,KAAMgmC,KAGtDoZ,EAAUrjD,UAAUokD,cAAgB,WAC5B/+C,KAAKihD,iBAAmBjhD,KAAKihD,gBAAgBplD,QAC7CmE,KAAKs+C,aAAazT,OAAO7qC,KAAK8qC,kBAAmB9qC,KAAKihD,kBAG9DjD,EAAUrjD,UAAU8qC,eAAiB,SAAU7mC,GAC3C,GAAI+O,GAAO1P,OAAOjB,KAAK4B,EACnB+O,GAAK9R,SACLmE,KAAK2N,EAAK,IAAM/O,EAAK+O,EAAK,MAGlCqwC,EAAUrjD,UAAUglD,iBAAmB,WACnC,GAAI/jD,EAOEuB,GALFvB,EADAgb,+BACOzb,OAAOokD,aAAaC,QAAQx/C,KAAKiL,gBAAkBjL,KAAKwB,QAAQ2D,GAAKnF,KAAKy/C,4BAG1EtkD,OAAOokD,aAAaC,QAAQx/C,KAAKiL,gBAAkBjL,KAAKwB,QAAQ2D,MAEhC,KAATvJ,GAC9BoE,KAAKgM,cAAc+xB,KAAKC,MAAMpiC,IAAO,IAG7CoiD,EAAUrjD,UAAU+jD,eAAiB,WAC5B1+C,KAAK0mC,cACF9vB,+BACAzb,OAAOokD,aAAaiC,QAAQxhD,KAAKiL,gBAC7BjL,KAAKwB,QAAQ2D,GAAKnF,KAAKy/C,2BAA4Bz/C,KAAKyhD,kBAG5DtmD,OAAOokD,aAAaiC,QAAQxhD,KAAKiL,gBAAkBjL,KAAKwB,QAAQ2D,GAAInF,KAAKyhD,oBAIrFzD,EAAUrjD,UAAU+mD,qBAAuB,SAAU5hB,GAC5C3iC,EAAkB2iC,IACnBA,KAGRke,EAAUrjD,UAAUgnD,cAAgB,SAAU1mC,EAAc/T,EAAO44B,GAC1D3iC,EAAkB2iC,IACnBA,KAGRke,EAAUrjD,UAAU6E,YAAc,SAAUC,GAMxC,MALIO,MAAK4hD,qBACLjE,GAAiB,GAErB7E,GAAa94C,KAAK6hD,OAAO7lD,SAAS8lD,MAClClE,GAAiBmE,QAAQlmD,OAClB4D,EAAc,IAAMq5C,GAAa,IAAM6E,MAElDK,EAAUrjD,UAAUknD,OAAS,SAAU5lB,GACnC,GAAI+lB,GAAO,CACX,IAAmB,IAAf/lB,EAAIpgC,OACJ,MAAOmmD,EAEX,KAAK,GAAItlD,GAAI,EAAGA,EAAIu/B,EAAIpgC,OAAQa,IAE5BslD,GAASA,GAAQ,GAAKA,EADX/lB,EAAIohB,WAAW3gD,GAE1BslD,GAAcA,CAElB,OAAOtvC,MAAKE,IAAIovC,IAEpBhE,EAAUrjD,UAAUinD,iBAAmB,WACnC,MAAO9I,MAAe94C,KAAK6hD,OAAO7lD,SAAS8lD,OAASlE,KAAmBmE,QAAQlmD,QAEnFmiD,EAAUrjD,UAAUsnD,aAAe,SAAU50B,GAGzC,IAAK,GAFDttB,GAAQC,KACRkiD,KACKnkD,EAAK,EAAG8xB,EAAYxC,EAAStvB,EAAK8xB,EAAUh0B,OAAQkC,IAAM,CAC/D,GAAIhB,GAAM8yB,EAAU9xB,GAChBokD,EAAWhmD,EAASY,EAAKiD,KACxBrD,GAAYwlD,IACbrlD,EAASC,EAAKiD,KAAKoiD,oBAAoBD,GAAWD,GAG1D,MAAOnkB,MAAKskB,UAAUH,EAAY,SAAUnlD,EAAKT,GAC7C,MAAOyD,GAAMqiD,oBAAoB9lD,MAGzC0hD,EAAUrjD,UAAUynD,oBAAsB,SAAU/lD,GAChD,MAAIA,aAAegwC,IACRlwC,EAAS,aAAcE,GAGvBA,GAGf2hD,EAAUrjD,UAAU2nD,gBAAkB,SAAUj1B,GAC5C,MAAO0Q,MAAKskB,UAAUriD,KAAKuiD,sBAAsBviD,KAAK8E,WAAYuoB,KAEtE2wB,EAAUrjD,UAAU4nD,sBAAwB,SAAUlmD,EAAKqd,GAoBvD,IAAK,GAnBD8oC,MAkBAC,EAASziD,KACJjC,EAAK,EAAG+F,EAAK7F,OAAOjB,KAAKX,GAAM0B,EAAK+F,EAAGjI,OAAQkC,KAlB1C,SAAUhB,GACpB,IAAiC,IAA7B2c,EAAWxb,QAAQnB,GAAa,CAChC,GAAIT,GAAQD,EAAI,GAAKU,EACrB,IAAqB,gBAAVT,IAAwBA,YAAiB6B,OAUhDqkD,EAAO,GAAKzlD,GAAOT,MAVqC,CACxD,GAAIomD,GAAUhpC,EAAW4tB,OAAO,SAAUnwB,GAEtC,MAAO,IADM5Q,QACKxJ,EAAM,KAAKiI,KAAKmS,KACnCuG,IAAI,SAAUvG,GACb,MAAOA,GAAI3a,QAAQO,EAAM,IAAK,KAElCylD,GAAO,GAAKzlD,GAAO0lD,EAAOF,sBAAsBE,EAAOL,oBAAoB9lD,GAAQomD,MASjF5+C,EAAG/F,GAGjB,OAAOykD,IAEXza,IACIx5B,IAAS,IACVyvC,EAAUrjD,UAAW,wBAAqB,IAC7CotC,IACIx5B,MACDyvC,EAAUrjD,UAAW,gBAAa,IACrCotC,IACIx5B,MACDyvC,EAAUrjD,UAAW,aAAU,IAClCqjD,EAAYjW,IACRx4B,IACDyuC,IAELlY,KAIF,WAC0B,mBAAX3qC,SACPA,OAAOW,iBAAiB,WAExB,WACI6hD,GAAiB,MezhB7B,IAAIjW,IAAwC,WACxC,GAAIC,GAAgB,SAAUze,EAAGyI,GAI7B,OAHAgW,EAAgB1pC,OAAO2pC,iBAChBC,uBAA2B1pC,QAAS,SAAU+qB,EAAGyI,GAAKzI,EAAE2e,UAAYlW,IACvE,SAAUzI,EAAGyI,GAAK,IAAK,GAAIsS,KAAKtS,GAAOA,EAAEryB,eAAe2kC,KAAI/a,EAAE+a,GAAKtS,EAAEsS,MACpD/a,EAAGyI,GAE5B,OAAO,UAAUzI,EAAGyI,GAEhB,QAASmW,KAAO9nC,KAAKzC,YAAc2rB,EADnCye,EAAcze,EAAGyI,GAEjBzI,EAAEvuB,UAAkB,OAANg3B,EAAa1zB,OAAO6S,OAAO6gB,IAAMmW,EAAGntC,UAAYg3B,EAAEh3B,UAAW,GAAImtC,QAGnFC,GAA0C,SAAUC,EAAYx5B,EAAQzR,EAAKkrC,GAC7E,GAA2H/e,GAAvHsK,EAAI70B,UAAU9C,OAAQ6tB,EAAI8J,EAAI,EAAIhlB,EAAkB,OAATy5B,EAAgBA,EAAOhqC,OAAOiqC,yBAAyB15B,EAAQzR,GAAOkrC,CACrH,IAAuB,gBAAZE,UAAoD,kBAArBA,SAAQC,SAAyB1e,EAAIye,QAAQC,SAASJ,EAAYx5B,EAAQzR,EAAKkrC,OACpH,KAAK,GAAIvrC,GAAIsrC,EAAWnsC,OAAS,EAAGa,GAAK,EAAGA,KAASwsB,EAAI8e,EAAWtrC,MAAIgtB,GAAK8J,EAAI,EAAItK,EAAEQ,GAAK8J,EAAI,EAAItK,EAAE1a,EAAQzR,EAAK2sB,GAAKR,EAAE1a,EAAQzR,KAAS2sB,EAChJ,OAAO8J,GAAI,GAAK9J,GAAKzrB,OAAOkP,eAAeqB,EAAQzR,EAAK2sB,GAAIA,GAW5Di5B,IAAoB9vC,KAAM,EAAGE,IAAK,EAAGC,OAAQ,EAAGF,MAAO,GACvD8vC,IAAoBC,WAAW,GAI/BC,GAA0B,SAAUxa,GAEpC,QAASwa,KACL,MAAkB,QAAXxa,GAAmBA,EAAOztC,MAAMmF,KAAMrB,YAAcqB,KAQ/D,MAVA0nC,IAAUob,EAAUxa,GAIpBP,IACIx5B,GAAS,IACVu0C,EAASnoD,UAAW,WAAQ,IAC/BotC,IACIx5B,GAAS,IACVu0C,EAASnoD,UAAW,UAAO,IACvBmoD,GACTzW,IAkBE0W,GAA2B,SAAUza,GAErC,QAASya,GAAUvhD,EAAS6rB,GACxB,GAAIttB,GAAQuoC,EAAO/oC,KAAKS,KAAMqtB,EAAS7rB,IAAYxB,IAgBnD,OAfAD,GAAMijD,UAAYC,EAAYC,qBAC9BnjD,EAAMojD,YAAcF,EAAYC,qBAChCnjD,EAAMqjD,QAAUH,EAAYC,qBAC5BnjD,EAAMsjD,MAAQ,EACdtjD,EAAMujD,SAAW,EACjBvjD,EAAMwjD,QAAU,EAChBxjD,EAAMyjD,oBAAqB,EAC3BzjD,EAAM0jD,OAAS,EACf1jD,EAAM2jD,aAAe,EACrB3jD,EAAM4jD,oBAAqB,EAC3B5jD,EAAM6jD,MAAQ,EACd7jD,EAAM8jD,cAAgB,EACtB9jD,EAAM+jD,cAAgB,EACtB/jD,EAAMgkD,cACNhkD,EAAMnF,OACCmF,EAlBX2nC,GAAUqb,EAAWza,GAoBrB2a,EAAcF,EACdA,EAAUpoD,UAAUC,KAAO,WACvBoF,KAAKgkD,eACDryC,GAAQ0xB,MACRp9B,GAAUjG,KAAKwB,SAAU,iBAE7BxB,KAAK+jD,WAAW/jD,KAAKikD,WAEzBlB,EAAUG,mBAAqB,WAC3B,MAAO7kD,MAAWskD,KAEtBI,EAAUpoD,UAAUqpD,aAAe,SAAUE,GACzC,GAAI19C,EACC7J,GAAYqD,KAAKmkD,UAClB39C,EAAMoC,EAAO5I,KAAKmkD,OAAQnkD,KAAKwB,SAEnC,IAAIzG,GAAWiF,KAAKokD,eAAiBzyC,GAAQwvB,UAAYxvB,GAAQuvB,QAAWlhC,KAAKqkD,iBAAmBrkD,KAAKskD,UACrGJ,GACA17C,GAAapB,OAAOZ,GAAOxG,KAAKwB,QAASmQ,GAAQ+vB,WAAa,aAAe/vB,GAAQ8wB,gBAAiB1nC,GAGtGyN,GAAa3B,IAAIL,GAAOxG,KAAKwB,QAASmQ,GAAQ+vB,WAAa,aAAe/vB,GAAQ8wB,gBAAiB1nC,EAASiF,OAIpH+iD,EAAUpoD,UAAU0pD,iBAAmB,SAAUE,GAC7C,GAAIxkD,GAAQC,KACRwO,EAAS+1C,EAAIC,aACjBxkD,MAAK0jD,aAAevjD,WAAW,WAC3BJ,EAAM4jD,oBAAqB,EAC3B5jD,EAAM0kD,qBACN1kD,EAAMukD,WAAWC,EAAK/1C,IACvBxO,KAAK0kD,kBACRl8C,GAAa3B,IAAI7F,SAAU2Q,GAAQ+vB,WAAa,YAAc/vB,GAAQ+wB,eAAgB1iC,KAAKykD,mBAAoBzkD,MAC/GwI,GAAa3B,IAAI7F,SAAU2Q,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAKykD,mBAAoBzkD,OAGjH+iD,EAAUpoD,UAAU8pD,mBAAqB,WACrCvkD,aAAaF,KAAK0jD,cAClBl7C,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,YAAc/vB,GAAQ+wB,eAAgB1iC,KAAKykD,oBAC9Fj8C,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAKykD,qBAGhG1B,EAAUpoD,UAAUgqD,oBAAsB,SAAUnjD,EAASojD,GACzD,GAAIC,IAAWC,SAAY,eAAgBC,WAAc,eACrDC,GAAWF,SAAY,eAAgBC,WAAc,cACzD,OAAI5nD,GAAkBqE,GACX,KAEPA,EAAQqjD,EAAO,GAAKD,IAASpjD,EAAQwjD,EAAO,GAAKJ,MACpC,aAATA,EAAsBpjD,EAAQgR,UAAY,EAAIhR,EAAQ6Q,WAAa,IACtD,aAATuyC,GACA5kD,KAAK8jD,cAAgB9jD,KAAK8jD,eACE,IAAvB9jD,KAAK8jD,cAAsBtiD,EAAQgR,UAAYhR,EAAQgR,UAAYxS,KAAK8jD,eAC7E9jD,KAAKilD,iBAAmBzjD,EAAQ0jD,eAGhCllD,KAAK6jD,cAAgB7jD,KAAK6jD,eACE,IAAvB7jD,KAAK6jD,cAAsBriD,EAAQ6Q,WAAa7Q,EAAQ6Q,WAAarS,KAAK6jD,eAC/E7jD,KAAKmlD,gBAAkB3jD,EAAQ4jD,aAE9BjoD,EAAkBqE,GAIZA,EAHAxB,KAAK2kD,oBAAoBnjD,EAAQP,WAAY2jD,IAWrD5kD,KAAK2kD,oBAAoBnjD,EAAQP,WAAY2jD,IAG5D7B,EAAUpoD,UAAU0qD,oBAAsB,WACtCrlD,KAAK6jD,cAAgB,EACrB7jD,KAAK8jD,cAAgB,CACD9jD,MAAKwB,QAAQ4E,UAAUQ,SAAS,aAAe5G,KAAKwB,QAAQ4E,UAAUQ,SAAS,eACxE5G,KAAK2kD,oBAAoB3kD,KAAKwB,QAAQP,WAAY,YAChDjB,KAAK2kD,oBAAoB3kD,KAAKwB,QAAQP,WAAY,eAEnF8hD,EAAUpoD,UAAU2pD,WAAa,SAAUC,EAAKe,GAE5C,GADAtlD,KAAKulD,mBAAqBhB,EAAI/1C,QAC1BxO,KAAKwlD,gBAAT,CASA,GALIxlD,KAAKwlD,eAAc,GACnBxlD,KAAK2jD,oBAAqB,EAE9B3jD,KAAKwO,OAAU+1C,EAAIC,eAAiBc,EACpCtlD,KAAKwjD,oBAAqB,EACtBxjD,KAAKylD,MAAO,CACZ,GAAIC,GAAiB1lD,KAAKylD,KACI,iBAAnBC,KACPA,GAAkBA,GAEtB,KAAK,GAAIhpD,GAAI,EAAGA,EAAIgpD,EAAe7pD,OAAQa,IACvC,IAAKS,EAAkBqM,EAAQ+6C,EAAI/1C,OAAQk3C,EAAe9oD,SAASF,EAAEG,WAAY,OAK7E,YAHImD,KAAKwlD,iBACLxlD,KAAKwlD,eAAc,IAM/BxlD,KAAK2lD,iBAAmBhpD,EAAY4nD,EAAIqB,iBAAgC,eAAbrB,EAAI54C,MAC/D44C,EAAIoB,iBAER3lD,KAAKwB,QAAQmH,aAAa,eAAgB,OAC1C,IAAIk9C,GAAW7lD,KAAK8lD,eAAevB,EAEnC,IADAvkD,KAAK+lD,iBAAoB3yC,EAAGyyC,EAAS1zC,MAAOkB,EAAGwyC,EAAStzC,QACnDvS,KAAKjB,MAAO,CACb,GAAI+2C,GAAM91C,KAAKwB,QAAQyQ,uBACvBjS,MAAKqlD,sBACDd,EAAIyB,UAAYzB,EAAIpyC,QACpBnS,KAAK6jD,cAAgB,GAErBU,EAAI0B,UAAY1B,EAAIhyC,QACpBvS,KAAK8jD,cAAgB,GAEzB9jD,KAAKkmD,kBAAoBL,EAAS1zC,OAAS2jC,EAAIjjC,KAAO7S,KAAK6jD,eAC3D7jD,KAAKmmD,kBAAoBN,EAAStzC,OAASujC,EAAI/iC,IAAM/S,KAAK8jD,eAE1D9jD,KAAK2jD,mBACL3jD,KAAKomD,aAAa7B,IAGlB/7C,GAAa3B,IAAI7F,SAAU2Q,GAAQ+vB,WAAa,YAAc/vB,GAAQ+wB,eAAgB1iC,KAAKomD,aAAcpmD,MACzGwI,GAAa3B,IAAI7F,SAAU2Q,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAKqmD,WAAYrmD,OAEzGA,KAAKgkD,cAAa,GACD,eAAbO,EAAI54C,MAAyB3L,KAAKsmD,iBAClCtlD,SAASoR,KAAKhM,UAAUS,IAAI,oBAEhC7G,KAAK2jD,oBAAqB,EAC1Bn7C,GAAam7B,QAAQ3iC,SAASyR,gBAAiBd,GAAQ+vB,WAAa,aAAe/vB,GAAQ8wB,gBAAiB8hB,KAEhHxB,EAAUpoD,UAAUyrD,aAAe,SAAU7B,GACzCvkD,KAAKykD,oBACL,IAAI8B,IAAiB5pD,EAAY4nD,EAAIqB,eACrC,KAAIW,GAAgD,IAA9BhC,EAAIqB,eAAe/pD,OAAzC,CAGA,GACIi6C,GADA0Q,EAAexmD,KAAK8lD,eAAevB,GAEnCkC,EAAYlzC,iBAAiBvT,KAAKwB,QACtCxB,MAAK0mD,QACD7zC,KAAMjW,SAAS6pD,EAAUE,WAAY,IACrC5zC,IAAKnW,SAAS6pD,EAAUG,UAAW,IACnC9zC,MAAOlW,SAAS6pD,EAAUI,YAAa,IACvC7zC,OAAQpW,SAAS6pD,EAAUK,aAAc,IAE7C,IAAItlD,GAAUxB,KAAKwB,OACnB,IAAIxB,KAAKjB,OAASiB,KAAK+mD,WAAY,CAC/B,GAAIC,GAAax9C,EAAQ+6C,EAAI/1C,OAAQxO,KAAK+mD,WACrC5pD,GAAkB6pD,KACnBxlD,EAAUwlD,GAIdhnD,KAAKinD,mBACLzlD,EAAUxB,KAAKknD,kBAAkB3C,EAAI/1C,OAAQhN,IAEjDxB,KAAKgS,OAAShS,KAAKmnD,wBAAwB3lD,GAC3CxB,KAAKonD,SAAWpnD,KAAKqnD,iBAAiB9C,EAAKvkD,KAAKsnD,aAChD,IAAIl0C,GAAIpT,KAAK+lD,gBAAgB3yC,EAAIozC,EAAar0C,MAC1CkB,EAAIrT,KAAK+lD,gBAAgB1yC,EAAImzC,EAAaj0C,KAE9C,IADeG,KAAKQ,KAAME,EAAIA,EAAMC,EAAIA,IACvBrT,KAAKunD,UAAYvnD,KAAK2jD,mBAAqB,CACxD,GAAIn9C,GAAMxG,KAAKwnD,iBAAiBjD,EAChC,KAAK/9C,GAAOrJ,EAAkBqJ,GAC1B,MAEA+/C,IACAhC,EAAIoB,gBAER,IAAI8B,GAAoBznD,KAAK0nD,cAAgBlhD,CAE7C,IADAxG,KAAK2nD,iBAAmB3nD,KAAKmnD,wBAAwBM,EAAkBG,cACnE5nD,KAAK6nD,UAAW,CAChB,GACIjpD,IACAlD,MAAO6oD,EACP/iD,QAASA,EACTgN,OAJYxO,KAAK8nD,uBAAuBvD,GAKxCwD,WAAY3oD,IAAaY,KAAKgoD,eAAeptD,KAAKoF,MAAQ,KAC1DioD,YAAaR,EAEjBznD,MAAK2jC,QAAQ,YAAa/kC,GAE1BoB,KAAKkoD,SACLloD,KAAKmoD,eAGLnoD,KAAKgjD,WAAcnwC,KAAM,EAAGC,MAAO,EAAGE,OAAQ,EAAGD,IAAK,GACtD/S,KAAKmjD,aAAgBpwC,IAAK,EAAGF,KAAM,IAEvCijC,GAAQjjC,KAAM7S,KAAKonD,SAASv0C,KAAO7S,KAAK2nD,iBAAiB90C,KAAME,IAAK/S,KAAKonD,SAASr0C,IAAM/S,KAAK2nD,iBAAiB50C,KAC1G/S,KAAKjB,QAAUiB,KAAKooD,iBACpBpoD,KAAKqjD,MAAQrjD,KAAKonD,SAASv0C,KAAO7S,KAAKgS,OAAOa,KAC9C7S,KAAK4jD,MAAQ5jD,KAAKonD,SAASr0C,IAAM/S,KAAKgS,OAAOe,KAEjD/S,KAAKqlD,qBAEL,IAAIjgD,GAASmO,iBAAiB/R,GAC1BolD,EAAYlO,WAAWtzC,EAAOwhD,UAE9B5mD,MAAKjB,OAAuB,IAAd6nD,IACd9Q,EAAI/iC,KAAO6zC,GAEf5mD,KAAKyjD,OAAU3T,MAAM4I,WAAWtzC,EAAO2N,MAAmD,EAA3C2lC,WAAWtzC,EAAO2N,KAAO/S,KAAKgS,OAAOe,IAKhF/S,KAAKqoD,sBAAwBroD,KAAKjB,QAClC+2C,EAAI/iC,KAAO/S,KAAK8jD,cAChBhO,EAAIjjC,MAAQ7S,KAAK6jD,cAErB,IAAIyE,GAAWtoD,KAAKuoD,2BAChBx1C,IAAM+iC,EAAI/iC,IAAM/S,KAAK4jD,MAAS,KAC9B/wC,KAAOijC,EAAIjjC,KAAO7S,KAAKqjD,MAAS,MAEhCrjD,MAAKkoD,UAAqC,gBAAlBloD,MAAKkoD,UAAyBloD,KAAKkoD,SAAS9hD,UAAUQ,SAAS,qBAAwD,aAAjC5G,KAAKkoD,SAAS7iD,MAAM+hD,WAClItR,EAAI/iC,KAAO/S,KAAKkoD,SAAS11C,WAE7BxS,KAAKwoD,iBAAoBz1C,IAAK+iC,EAAI/iC,IAAKF,KAAMijC,EAAIjjC,MACjDvI,EAAkBm9C,EAAmBznD,KAAKyoD,iBAAkBrB,SAAU,WAAYv0C,KAAMy1C,EAASz1C,KAAME,IAAKu1C,EAASv1C,OACrHvK,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,YAAc/vB,GAAQ+wB,eAAgB1iC,KAAKomD,cAC9F59C,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAKqmD,YACvFjnD,KACDY,KAAKgoD,eAAeP,MAIhC1E,EAAUpoD,UAAUqtD,eAAiB,SAAUP,GACvCpgD,EAAUogD,IACVj/C,GAAa3B,IAAI7F,SAAU2Q,GAAQ+vB,WAAa,YAAc/vB,GAAQ+wB,eAAgB1iC,KAAK0oD,QAAS1oD,MACpGwI,GAAa3B,IAAI7F,SAAU2Q,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAK2oD,YAAa3oD,MACtGA,KAAK4oD,qBAAoB,EAAO5oD,KAAKwB,QAASimD,KAG9CznD,KAAKgkD,eACLhjD,SAASoR,KAAKhM,UAAUgB,OAAO,sBAGvC27C,EAAUpoD,UAAUkuD,kBAAoB,SAAUp/C,GAK9C,IAJAzJ,KAAK+S,IAAMtJ,EAAGq/C,UACd9oD,KAAK6S,KAAOpJ,EAAGs/C,WACf/oD,KAAKgpD,MAAQv/C,EAAGlC,YAChBvH,KAAKipD,OAASx/C,EAAGy/C,aACVz/C,EAAGm+C,cACNn+C,EAAKA,EAAGm+C,aACR5nD,KAAK+S,KAAOtJ,EAAGq/C,UACf9oD,KAAK6S,MAAQpJ,EAAGs/C,UAEpB,OAAQ/oD,MAAK+S,KAAO5X,OAAOguD,aACvBnpD,KAAK6S,MAAQ1X,OAAOiuD,aACnBppD,KAAK+S,IAAM/S,KAAKipD,QAAY9tD,OAAOguD,YAAchuD,OAAOkuD,aACxDrpD,KAAK6S,KAAO7S,KAAKgpD,OAAW7tD,OAAOiuD,YAAcjuD,OAAOmuD,YAEjEvG,EAAUpoD,UAAU4tD,0BAA4B,SAAUjsD,GACtD,MAAI0D,MAAKupD,kBACEvpD,KAAKupD,kBAAkBjtD,GAE3BA,GAEXymD,EAAUpoD,UAAUwsD,wBAA0B,SAAU3gD,GACpD,GAAIrJ,EAAkBqJ,GAClB,OAASqM,KAAM,EAAGE,IAAK,EAE3B,IAAIy2C,GAAOhjD,EAAIyL,wBACX5M,EAAQkO,iBAAiB/M,EAC7B,QACIqM,KAAO22C,EAAK32C,KAAO1X,OAAOiuD,YAAexsD,SAASyI,EAAMshD,WAAY,IACpE5zC,IAAMy2C,EAAKz2C,IAAM5X,OAAOguD,YAAevsD,SAASyI,EAAMuhD,UAAW,MAGzE7D,EAAUpoD,UAAU+tD,QAAU,SAAUnE,GACpC,GAAK5nD,EAAY4nD,EAAIqB,iBAAkD,IAA9BrB,EAAIqB,eAAe/pD,OAA5D,CAGImE,KAAKjB,OAASwlD,EAAIqB,gBAAkBj0C,GAAQwvB,UAAYxvB,GAAQuvB,SAChEqjB,EAAIoB,gBAER,IAAI9yC,GACAE,CACJ/S,MAAKonD,SAAWpnD,KAAKqnD,iBAAiB9C,EAAKvkD,KAAKsnD,aAChD,IAAImC,GAAYzpD,KAAK0pD,uBAAuB,SACxCD,GAAYzpD,KAAKonD,SAASr0C,MAC1B/S,KAAKonD,SAASr0C,IAAM02C,EAExB,IAAIE,GAAW3pD,KAAK0pD,uBAAuB,QAI3C,IAHIC,EAAW3pD,KAAKonD,SAASv0C,OACzB7S,KAAKonD,SAASv0C,KAAO82C,GAErB3pD,KAAK4pD,KAAM,CACX,GAAItE,GAAYtlD,KAAK8nD,uBAAuBvD,EAC5CvkD,MAAK2jC,QAAQ,QAAUjoC,MAAO6oD,EAAK/iD,QAASxB,KAAKwB,QAASgN,OAAQ82C,IAEtE,GAAIuE,GAAS7pD,KAAK8pD,mBAAmBvF,EACrC,IAAIsF,EAAOr7C,QAAUq7C,EAAO5lD,SAAU,CAClC,GAAI8C,IAAO,CACP/G,MAAK+pD,cACD/pD,KAAK+pD,YAAY9lD,WAAa4lD,EAAO5lD,SACrCjE,KAAKgqD,mBAAmBzF,EAAKsF,GAG7B9iD,GAAO,GAGXA,IACA8iD,EAAO5lD,SAASgmD,SAASjqD,KAAKikD,OAASjkD,KAAK+jD,WAAW/jD,KAAKikD,OAC5D4F,EAAO5lD,SAASimD,QAAQ3F,EAAKsF,EAAOr7C,QACpCxO,KAAK+pD,YAAcF,OAGlB7pD,MAAK+pD,aACV/pD,KAAKgqD,mBAAmBzF,EAAKsF,EAEjC,IAAInC,GAAgB1nD,KAAK+jD,WAAW/jD,KAAKikD,OAAOltC,MAChD/W,MAAK2nD,iBAAmB3nD,KAAKmnD,wBAAwBnnD,KAAK0nD,cAAcE,aACxE,IAAIuC,GAAQnqD,KAAK2nD,iBAAiB90C,KAC9Bu3C,EAAOpqD,KAAK2nD,iBAAiB50C,IAC7B8yC,EAAW7lD,KAAK8lD,eAAevB,GAC/B8F,EAAQxE,EAAS1zC,MACjBm4C,EAAQzE,EAAStzC,MACjBg4C,EAAQvqD,KAAKonD,SAASv0C,KAAO7S,KAAKqjD,MAClCmH,EAAOxqD,KAAKonD,SAASr0C,IAAM/S,KAAK4jD,MAChCx+C,EAASmO,iBAAiBm0C,EAC9B,IAAI1nD,KAAKkoD,SAAU,CAIf,GAHIloD,KAAKyqD,kBACLzqD,KAAKmoD,cAELnoD,KAAKmS,QAAUk4C,GAASrqD,KAAK0qD,kBAAmB,CAChD,GAAIC,GAAcjD,EAAcngD,aAAemxC,WAAWtzC,EAAOuhD,YAC3DjO,WAAWtzC,EAAOyhD,aAEpBh0C,GADA7S,KAAKgjD,UAAUnwC,KAAO03C,GAASA,EAAQ,EAChCvqD,KAAKgjD,UAAUnwC,KAEjB7S,KAAKgjD,UAAUlwC,MAAQ3X,OAAOiuD,YAAcmB,EAAQI,GAAeJ,EAAQ,EACzEA,GAASA,EAAQvqD,KAAKgjD,UAAUlwC,OAAS3X,OAAOiuD,YAAcuB,EAG9DJ,EAAQ,EAAIvqD,KAAKgjD,UAAUnwC,KAAO03C,EAGjD,GAAIvqD,KAAKuS,QAAU+3C,GAAStqD,KAAK0qD,kBAAmB,CAChD,GAAIE,GAAelD,EAAcwB,cAAgBxQ,WAAWtzC,EAAOwhD,WAC7DlO,WAAWtzC,EAAO0hD,cAEpB/zC,GADA/S,KAAKgjD,UAAUjwC,IAAMy3C,GAAQA,EAAO,EAC9BxqD,KAAKgjD,UAAUjwC,IAEhB/S,KAAKgjD,UAAUhwC,OAAS7X,OAAOguD,YAAcqB,EAAOI,GAAgBJ,EAAO,EAC1EA,GAAQA,EAAOxqD,KAAKgjD,UAAUhwC,QAAU7X,OAAOguD,YAAcyB,EAG7DJ,EAAO,EAAIxqD,KAAKgjD,UAAUjwC,IAAMy3C,OAK9C33C,GAAO03C,EACPx3C,EAAMy3C,CAEV,IAAIK,GAAOT,EAAOpqD,KAAKmjD,YAAYpwC,IAC/B+3C,EAAQX,EAAQnqD,KAAKmjD,YAAYtwC,IACjC7S,MAAKwjD,qBACDrmD,EAAkB4V,KAClBA,EAAM/S,KAAKujD,SAEXpmD,EAAkB0V,KAClBA,EAAO7S,KAAKsjD,UAGpB,IAAIyH,GACAC,CACJ,IAAIhrD,KAAK0nD,cAActhD,UAAUQ,SAAS,cAClC5G,KAAKkoD,UACLloD,KAAKgjD,UAAUjwC,IAAM/S,KAAKjB,MAAQiB,KAAKgjD,UAAUjwC,IAAM,EACvDg4C,EAAah4C,EAAM83C,EAAQ,EAAI7qD,KAAKgjD,UAAUjwC,IAAOA,EAAM/S,KAAKmjD,YAAYpwC,IAC5Ei4C,EAAcn4C,EAAOi4C,EAAS,EAAI9qD,KAAKgjD,UAAUnwC,KAAQA,EAAO7S,KAAKmjD,YAAYtwC,OAGjFk4C,EAAYh4C,EAAM/S,KAAKmjD,YAAYpwC,IACnCi4C,EAAan4C,EAAO7S,KAAKmjD,YAAYtwC,UAIzC,IAAI7S,KAAKkoD,SAAU,CACf,GAAI+C,GAAcjrD,KAAK0nD,cAActhD,UAAUQ,SAAS,WACxD5G,MAAKgjD,UAAUjwC,IAAM/S,KAAKjB,MAAQiB,KAAKgjD,UAAUjwC,IAAM,EACvDg4C,EAAah4C,EAAM83C,EAAQ,EAAI7qD,KAAKgjD,UAAUjwC,IAAOA,EAAM83C,EAC3DG,EAAcn4C,EAAOi4C,EAAS,EAAIG,EAAep4C,GAAQi4C,EAAQ9qD,KAAKmjD,YAAYtwC,MAC9E7S,KAAKwoD,gBAAgB31C,KAAQA,EAAOi4C,MAGxCC,GAAYh4C,EAAM83C,EAClBG,EAAan4C,EAAOi4C,CAG5B,IAAIlE,GAAYlO,WAAWnlC,iBAAiBvT,KAAKwB,SAASolD,UAG1D,IAAIA,EAAY,IACR5mD,KAAKjB,QACLgsD,GAAanE,EACT4D,EAAO,IACF5D,EAAY4D,GAAS,EACtBO,EAAYnE,EAAY4D,EAGxBO,GAAanE,GAGjB5mD,KAAKkoD,WACL6C,EAAa/qD,KAAKgjD,UAAUhwC,OAAS+3C,EAAa/qD,KAAKgjD,UAAUhwC,OAAS+3C,IAG7Eh4C,EAAM83C,EAAQ,GACf,GAAIL,EAAO5D,GAAac,EAAcwB,aAAe2B,IAAS,EAAG,CAC7D,GAAIK,GAAgBlrD,KAAKgjD,UAAUjwC,IAAMy3C,EAAOK,CAC3CK,GAAgBtE,EAAYiE,EAAQ,EACrCE,GAAanE,EAAYiE,EAGzBE,EAAYG,MAIhBH,IAAanE,EAAYiE,CAIjC7qD,MAAKkoD,UAAYloD,KAAK0nD,cAActhD,UAAUQ,SAAS,gBAGvDmkD,EAAaA,GAFTH,EAAelD,EAAcwB,cAAgBxQ,WAAWtzC,EAAOwhD,WAC7DlO,WAAWtzC,EAAO0hD,gBACiB9mD,KAAKgjD,UAAUhwC,OAAUhT,KAAKgjD,UAAUhwC,OAAS43C,EAAgBG,GAM1G/qD,KAAKqoD,sBAAwBroD,KAAKjB,QAClCgsD,GAAa/qD,KAAK8jD,cAClBkH,GAAchrD,KAAK6jD,eAEnB7jD,KAAKkoD,UAAqC,gBAAlBloD,MAAKkoD,UAAyBloD,KAAKkoD,SAAS9hD,UAAUQ,SAAS,qBAAwD,aAAjC5G,KAAKkoD,SAAS7iD,MAAM+hD,WAClI2D,GAAa/qD,KAAKkoD,SAAS11C,UAE/B,IAAI24C,GAAYnrD,KAAKuoD,2BAA4Bx1C,IAAKg4C,EAAY,KAAMl4C,KAAMm4C,EAAa,MACvFhrD,MAAKorD,kBACLD,EAAYnrD,KAAKuoD,2BACbx1C,IAAM/S,KAAKonD,SAASr0C,IAAM/S,KAAK2nD,iBAAiB50C,IAAM,EAAK,KAC3DF,KAAO7S,KAAKonD,SAASv0C,KAAO7S,KAAK2nD,iBAAiB90C,KAAO,EAAK,QAGtEvI,EAAkBo9C,EAAe1nD,KAAKyoD,gBAAgB0C,IACjDnrD,KAAK6oD,kBAAkBnB,KAAkB1nD,KAAKyqD,kBAAqBzqD,KAAK0nD,cAActhD,UAAUQ,SAAS,eAC1G5G,KAAK0nD,cAAc2D,gBAEvB,IAAInlD,GAAWlF,SAASe,iBAAiB,SACzC,IAAI/B,KAAKyqD,kBAAoBzqD,KAAK0nD,cAActhD,UAAUQ,SAAS,cAAe,CACtD,IAApBV,EAASrK,SACTqK,EAAWlG,KAAKsrD,gBAAgB/G,GAEpC,IAAIgH,GAAevrD,KAAKwrD,gBAAgBtlD,GAAU,EAC9ClG,MAAK6oD,kBAAkB7oD,KAAK0nD,eAC5B1nD,KAAKyrD,kBAAkBF,EAAcR,GAE/B/qD,KAAK6oD,kBAAkB7oD,KAAK0nD,iBAEV,KADxBxhD,KAAcrE,MAAMtC,KAAKyB,SAASe,iBAAiB,YACtClG,SACTqK,EAAWlG,KAAKsrD,gBAAgB/G,IAEpCgH,EAAevrD,KAAKwrD,gBAAgBtlD,GAAU,GAC9ClG,KAAKyrD,kBAAkBF,EAAcR,IAG7C/qD,KAAKwjD,oBAAqB,EAC1BxjD,KAAKsjD,SAAWzwC,EAChB7S,KAAKujD,QAAUxwC,EACf/S,KAAKonD,SAASv0C,KAAOA,EACrB7S,KAAKonD,SAASr0C,IAAMA,EACpB/S,KAAKmS,MAAQk4C,EACbrqD,KAAKuS,MAAQ+3C,IAEjBvH,EAAUpoD,UAAU6wD,gBAAkB,SAAUzqD,EAAM2qD,GAGlD,IAAK,GADDC,GADAC,EAASF,EAAU3qD,EAAK2qD,UAAY3qD,EAE/BrE,EAAIkvD,EAAO/vD,OAAS,EAAGa,GAAK,EAAGA,IAEpC,IAAmB,UADnBivD,EAAYxwD,OAAOoY,iBAAiBq4C,EAAOhvD,SAASF,EAAEG,WAAY,MAAM,gBAC7B,WAAd8uD,IACtBC,EAAOhvD,SAASF,EAAEG,WAAY,KAAKqoD,aAAe0G,EAAOhvD,SAASF,EAAEG,WAAY,KAAKgvD,aACxF,MAAOD,GAAOhvD,SAASF,EAAEG,WAAY,IAI7C,IAAkB,aADlB8uD,EAAYxwD,OAAOoY,iBAAiBvS,SAAS8qD,kBAAkB,eAG3D,MADA9qD,UAAS8qD,iBAAiBzmD,MAAM0mD,SAAW,OACpC/qD,SAAS8qD,kBAGxB/I,EAAUpoD,UAAU8wD,kBAAoB,SAAUO,EAASjB,GACvD,GAAIiB,GAAWA,IAAYhrD,SAAS8qD,iBAC3BE,EAAQH,aAAe7qD,SAAS8qD,iBAAiBt5C,UAAYxS,KAAK0nD,cAAcmE,aAAgBd,GAC9FiB,EAAQ/5C,wBAAwBg3C,OAASjpD,KAAK2nD,iBAAiB50C,IAAMg4C,EACxEiB,EAAQx5C,WAAaxS,KAAK0nD,cAAcmE,aAEnCG,EAAQx5C,UAAYu4C,EAAY/qD,KAAK0nD,cAAcmE,eACxDG,EAAQx5C,WAAaxS,KAAK0nD,cAAcmE,kBAG3C,IAAIG,GAAWA,IAAYhrD,SAAS8qD,iBAAkB,CACvD,GAAIG,GAAejrD,SAAS8qD,iBAAiBt5C,UACzC05C,EAAqBlsD,KAAK0nD,cAAcmE,YACvCG,GAAQH,aAAeG,EAAQ/5C,wBAAwBc,IAAMm5C,EAAqBD,EAAgBlB,EACnGiB,EAAQx5C,WAAaxS,KAAK0nD,cAAcmE,aAEnCG,EAAQ/5C,wBAAwBc,IAAOg4C,EAAYmB,EAAqBD,IAC7ED,EAAQx5C,WAAaxS,KAAK0nD,cAAcmE,gBAIpD9I,EAAUpoD,UAAU2wD,gBAAkB,SAAU/G,GAC5C,GAAI4H,GAAa5H,EAAIyB,QAAU,EAAIzB,EAAIyB,QAAU,EAC7CoG,EAAc7H,EAAI0B,QAAU,EAAI1B,EAAI0B,QAAU,CAClD,OAAOjlD,UAASqrD,kBAAkBF,EAAYC,IAElDrJ,EAAUpoD,UAAUqvD,mBAAqB,SAAUzF,EAAKsF,GACpD7pD,KAAK+pD,YAAY9lD,SAASqoD,OAAO/H,EAAKsF,EAAOr7C,QAC7CxO,KAAK+pD,YAAY9lD,SAASgmD,SAASjqD,KAAKikD,OAAS,KACjDjkD,KAAK+pD,YAAc,MAEvBhH,EAAUpoD,UAAU8tD,gBAAkB,SAAU0C,GAC5C,GAAIp6C,GAAO1S,KAAW8sD,EAStB,OARInrD,MAAK4kD,OACa,MAAd5kD,KAAK4kD,WACE7zC,GAAKgC,IAEO,MAAd/S,KAAK4kD,YACH7zC,GAAK8B,MAGb9B,GAEXgyC,EAAUpoD,UAAU+uD,uBAAyB,SAAUvyC,GACnD,GAAIo1C,GAAUvrD,SAASoR,KACnBo6C,EAASxrD,SAASyR,eAEtB,OADkBC,MAAKC,IAAI45C,EAAQ,SAAWp1C,GAAMq1C,EAAO,SAAWr1C,GAAMo1C,EAAQ,SAAWp1C,GAAMq1C,EAAO,SAAWr1C,GAAMq1C,EAAO,SAAWr1C,KAGnJ4rC,EAAUpoD,UAAUguD,YAAc,SAAUpE,GAExC,GADAvkD,KAAKwjD,oBAAqB,EACrB7mD,EAAY4nD,EAAIqB,iBAAkD,IAA9BrB,EAAIqB,eAAe/pD,OAA5D,CAIA,IAAgC,KADpB,WAAY,YAAa,WAC5BqC,QAAQqmD,EAAI54C,MAAc,CAC/B,GAAI3L,KAAKysD,SAAU,CACf,GAAInH,GAAYtlD,KAAK8nD,uBAAuBvD,EAC5CvkD,MAAK2jC,QAAQ,YAAcjoC,MAAO6oD,EAAK/iD,QAASxB,KAAKwB,QAASgN,OAAQ82C,EAAWvuC,OAAQ/W,KAAK0nD,gBAElG1nD,KAAKqmD,WAAW9B,OAGhBvkD,MAAKwB,QAAQmH,aAAa,eAAgB,QAE9C,IAAIkhD,GAAS7pD,KAAK8pD,mBAAmBvF,EACjCsF,GAAOr7C,QAAUq7C,EAAO5lD,WACxB4lD,EAAO5lD,SAASyoD,gBAAiB,EACjC7C,EAAO5lD,SAASgmD,SAASjqD,KAAKikD,OAASjkD,KAAK+jD,WAAW/jD,KAAKikD,OAC5D4F,EAAO5lD,SAAS0oD,QAAQpI,EAAKsF,EAAOr7C,SAExCxO,KAAK4oD,qBAAoB,GACzB5nD,SAASoR,KAAKhM,UAAUgB,OAAO,sBAOnC27C,EAAUpoD,UAAU0rD,WAAa,SAAU9B,GACvCvkD,KAAKwjD,oBAAqB,EAC1BxjD,KAAKgkD,eACLhjD,SAASoR,KAAKhM,UAAUgB,OAAO,oBAC/BpH,KAAKwB,QAAQmH,aAAa,eAAgB,SAC1CH,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,YAAc/vB,GAAQ+wB,eAAgB1iC,KAAKomD,cAC9F59C,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAK2oD,aAC5FngD,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAKqmD,YAC5F79C,GAAapB,OAAOpG,SAAU2Q,GAAQ+vB,WAAa,YAAc/vB,GAAQ+wB,eAAgB1iC,KAAK0oD,SAC1F1oD,KAAKwlD,iBACLxlD,KAAKwlD,eAAc,IAI3BzC,EAAUpoD,UAAUwsC,kBAAoB,SAAUsD,EAASC,KAG3DqY,EAAUpoD,UAAUsQ,cAAgB,WAChC,MAAO,aAEX83C,EAAUpoD,UAAU6qD,cAAgB,SAAUoH,GAI1C,MAHIA,KACAhK,GAAgBC,WAAaD,GAAgBC,WAE1CD,GAAgBC,WAE3BE,EAAUpoD,UAAUwtD,YAAc,WAC9B,GAAI0E,GACAC,EAGAtmD,EAFAuM,EAAM,EACNF,EAAO,CASX,IALIrM,EADS,iBADKxG,MAAKkoD,SAEbt/C,EAAO5I,KAAKkoD,UAGZloD,KAAKkoD,SAEN,CACL,GAAI6E,GAAcvmD,EAAIyL,uBACtB46C,GAAgBrmD,EAAI4+C,YAAc5+C,EAAI4+C,YAAc2H,EAAYj6C,MAAQi6C,EAAYl6C,KACpFi6C,EAAiBtmD,EAAI0+C,aAAgBllD,KAAKkoD,WAAa/qD,EAAkB6C,KAAK0nD,gBAAkB1nD,KAAK0nD,cAActhD,UAAUQ,SAAS,cAAiBJ,EAAIqlD,aAAerlD,EAAI0+C,aAAe6H,EAAY/5C,OAAS+5C,EAAYh6C,GAG9N,KAAK,GAFD/V,IAAQ,MAAO,OAAQ,SAAU,SACjCoI,EAASmO,iBAAiB/M,GACrB9J,EAAI,EAAGA,EAAIM,EAAKnB,OAAQa,IAAK,CAClC,GAAIK,GAAMC,EAAKJ,SAASF,EAAEG,WAAY,KAClCmwD,EAAU5nD,EAAO,SAAWrI,EAAM,SAClCkwD,EAAW7nD,EAAO,UAAYrI,GAC9BmwD,EAAWnwD,EAAI+gC,aACnB99B,MAAKmjD,YAAY,GAAK+J,GAAYpd,MAAM4I,WAAWsU,IAAY,EAAItU,WAAWsU,GAC9EhtD,KAAKojD,QAAQ,GAAK8J,GAAYpd,MAAM4I,WAAWuU,IAAa,EAAIvU,WAAWuU,GAG3El6C,EADA/S,KAAKkoD,WAAa/qD,EAAkB6C,KAAK0nD,gBAAkB1nD,KAAK0nD,cAActhD,UAAUQ,SAAS,cAC3FmmD,EAAYh6C,IAAM/R,SAAS8qD,iBAAiBt5C,UAG5Cu6C,EAAYh6C,IAEtBF,EAAOk6C,EAAYl6C,KACnB7S,KAAKgjD,UAAUnwC,KAAOA,EAAO7S,KAAKmjD,YAAYtwC,KAAO7S,KAAKojD,QAAQvwC,KAClE7S,KAAKgjD,UAAUjwC,IAAMvM,EAAIsiD,UAAY9oD,KAAKmjD,YAAYpwC,IAAM/S,KAAKojD,QAAQrwC,IACzE/S,KAAKgjD,UAAUlwC,MAAQD,EAAOg6C,GAAiB7sD,KAAKmjD,YAAYrwC,MAAQ9S,KAAKojD,QAAQtwC,OACrF9S,KAAKgjD,UAAUhwC,OAASD,EAAM+5C,GAAkB9sD,KAAKmjD,YAAYnwC,OAAShT,KAAKojD,QAAQpwC,UAG/F+vC,EAAUpoD,UAAUmtD,uBAAyB,SAAUvD,GACnD,GACI/9C,GADAq/C,EAAW7lD,KAAK8lD,eAAevB,GAE/B4I,EAAYntD,KAAK0nD,cAAcriD,MAAM+nD,eAAiB,GACtDx7C,GAA6C,IAAjC2yC,EAAI54C,KAAKzN,QAAQ,YAA2C,WAAtByT,GAAQuwB,KAAKrB,MAAqBjkC,SAAS+U,GAAQuwB,KAAKpB,QAAS,IAAM,EAS7H,OARIlgC,GAAqB2jD,EAAI/1C,OAAQxO,KAAK0nD,iBAAiD,IAA/BnD,EAAI54C,KAAKzN,QAAQ,UAAmB0T,GAC5F5R,KAAK0nD,cAAcriD,MAAM+nD,cAAgB,OACzC5mD,EAAMxF,SAASqsD,iBAAiBxH,EAASG,QAASH,EAASI,SAC3DjmD,KAAK0nD,cAAcriD,MAAM+nD,cAAgBD,GAGzC3mD,EAAM+9C,EAAI/1C,OAEPhI,GAGXu8C,EAAUpoD,UAAUusD,kBAAoB,SAAU1gD,EAAK8mD,GAQnD,MANKnwD,GAAkB6C,KAAKulD,qBAAuBvlD,KAAKulD,qBAAuB/+C,EAInErJ,EAAkBmwD,GAAmB9mD,EAAT8mD,EAH7BttD,KAAKulD,oBAOpBxC,EAAUpoD,UAAU0sD,iBAAmB,SAAU9C,EAAKgJ,GAClD,GAEIp7C,GACAI,EAHAi7C,MAA6B/yD,KAAnB8pD,EAAIkJ,WAA2BlJ,EAAIkJ,WAAalJ,EAAI/1C,OAC9Dq3C,EAAW7lD,KAAK8lD,eAAevB,GAG/BmJ,EAAiBvwD,EAAkBqwD,EAAQ5F,aAY/C,IAVI2F,GACAp7C,EAAQnS,KAAKjB,MAAQ8mD,EAAS1zC,MACzB0zC,EAAS1zC,OAASu7C,EAAiB,EAAIF,EAAQ5F,aAAav1C,YAAerS,KAAKkmD,kBACrF3zC,EAAQvS,KAAKjB,MAAQ8mD,EAAStzC,MACzBszC,EAAStzC,OAASm7C,EAAiB,EAAIF,EAAQ5F,aAAap1C,WAAcxS,KAAKmmD,oBAGpFh0C,EAAQnS,KAAKjB,MAAQ8mD,EAAS1zC,MAAS0zC,EAAS1zC,MAAQhX,OAAOiuD,YAAeppD,KAAKkmD,kBACnF3zC,EAAQvS,KAAKjB,MAAQ8mD,EAAStzC,MAASszC,EAAStzC,MAAQpX,OAAOguD,YAAenpD,KAAKmmD,mBAEnFnlD,SAAS8qD,mBAAsByB,IAAiBvtD,KAAKjB,MAAQ,CAC7D,GAAIyH,GAAMxF,SAAS8qD,iBACf6B,EAAmBnnD,EAAI0+C,aAAe,GAAK1+C,EAAI0+C,aAAe1+C,EAAIqlD,cAAgBrlD,EAAIgM,UAAY,CAEtGL,GAD0B3L,EAAI4+C,YAAc,GAAK5+C,EAAI4+C,YAAc5+C,EAAIonD,aAAepnD,EAAI6L,WAAa,EACzEF,EAAQ3L,EAAI6L,WAAaF,EACvDI,EAAQo7C,EAAmBp7C,EAAQ/L,EAAIgM,UAAYD,EAEvD,OACIM,KAAMV,GAASnS,KAAK0mD,OAAO7zC,KAAO7S,KAAK6tD,SAASh7C,MAChDE,IAAKR,GAASvS,KAAK0mD,OAAO3zC,IAAM/S,KAAK6tD,SAAS96C,OAGtDgwC,EAAUpoD,UAAUmrD,eAAiB,SAAUvB,GAC3C,MAAIA,GAAI54C,KAAKzN,QAAQ,UAAY,EACtBqmD,EAAIqB,eAAe,GAEvBrB,GAEXxB,EAAUpoD,UAAU6sD,iBAAmB,SAAUjD,GAC7C,GAAI/iD,EAaJ,OAZIxB,MAAKjB,MACDiB,KAAK+W,OACLvV,EAAUxB,KAAK+W,QAAS+2C,OAAQvJ,EAAK/iD,QAASxB,KAAKwO,OAAQu/C,qBAAsB/tD,KAAKulD,sBAGtF/jD,EAAUG,EAAc,OAASuD,UAAW,8BAA+BzC,UAAW,cACtFzB,SAASoR,KAAK/P,YAAYb,IAI9BA,EAAUxB,KAAKwB,QAEZA,GAEXuhD,EAAUpoD,UAAUiuD,oBAAsB,SAAUoF,EAAOpE,EAAM7yC,GAC7D/W,KAAK+jD,WAAW/jD,KAAKikD,OAAS+J,EAAQ,MAClCC,UAAWrE,EACX7yC,OAAQA,EACRm3C,eAAgBluD,KAAKwB,UAG7BuhD,EAAUpoD,UAAUmvD,mBAAqB,SAAUvF,GAC/C,GAAI/1C,GAASxO,KAAK8nD,uBAAuBvD,GACrC4J,EAAUnuD,KAAKouD,gBAAgB5/C,EACnC,KAAK2/C,GAAW3/C,IAAWrR,EAAkBqR,EAAOvN,YAAa,CAC7D,GAAI+rC,GAAWxjC,EAAQgF,EAAOvN,WAAY,iBAAmBuN,EAAO6/C,aAChErhB,KACAmhB,EAAUnuD,KAAKouD,gBAAgBphB,IAGvC,OAASx+B,OAAQA,EAAQvK,SAAUkqD,IAEvCpL,EAAUpoD,UAAUyzD,gBAAkB,SAAU5nD,GAC5C,GACI8nD,GACAC,EAAU/nD,GAAOA,EAAIwE,aACzB,IAAIujD,EACA,IAAK,GAAIxwD,GAAK,EAAGywD,EAAYD,EAASxwD,EAAKywD,EAAU3yD,OAAQkC,IAAM,CAC/D,GAAIgG,GAAOyqD,EAAUzwD,EACrB,IAA0B,cAAtBgG,EAAc,gBAAqB,CACnCuqD,EAAOvqD,CACP,QAIZ,MAAOuqD,IAEXvL,EAAUpoD,UAAU4Q,QAAU,WAC1BvL,KAAKgkD,cAAa,GAClB1b,EAAO3tC,UAAU4Q,QAAQhM,KAAKS,MAElC,IAAIijD,EA+EJ,OA9EAlb,KACIj5B,MAAYg0C,KACbC,EAAUpoD,UAAW,eAAY,IACpCotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,YAAS,IACjCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,eAAY,IACpCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,mBAAgB,IACxCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,uBAAoB,IAC5CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,sBAAmB,IAC3CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,sBAAmB,IAC3CotC,IACI1oC,MACD0jD,EAAUpoD,UAAW,WAAQ,IAChCotC,IACI1oC,MACD0jD,EAAUpoD,UAAW,gBAAa,IACrCotC,IACI1oC,MACD0jD,EAAUpoD,UAAW,eAAY,IACpCotC,IACIx5B,GAAS,IACVw0C,EAAUpoD,UAAW,eAAY,IACpCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,aAAU,IAClCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,YAAS,IACjCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,aAAU,IAClCotC,IACIx5B,GAAS,YACVw0C,EAAUpoD,UAAW,YAAS,IACjCotC,IACIx5B,GAAS,KACVw0C,EAAUpoD,UAAW,iBAAc,IACtCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,WAAQ,IAChCotC,IACIx5B,MACDw0C,EAAUpoD,UAAW,wBAAqB,IAC7CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,qBAAkB,IAC1CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,wBAAqB,IAC7CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,qBAAkB,IAC1CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,uBAAoB,IAC5CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,oBAAiB,IACzCotC,IACIx5B,GAAS,MACVw0C,EAAUpoD,UAAW,uBAAoB,IAC5CotC,IACIx5B,IAAS,IACVw0C,EAAUpoD,UAAW,0BAAuB,IAC/CooD,EAAYE,EAAclb,IACtBx4B,IACDwzC,IAELjd,ICj6BE4B,GAAwC,WACxC,GAAIC,GAAgB,SAAUze,EAAGyI,GAI7B,OAHAgW,EAAgB1pC,OAAO2pC,iBAChBC,uBAA2B1pC,QAAS,SAAU+qB,EAAGyI,GAAKzI,EAAE2e,UAAYlW,IACvE,SAAUzI,EAAGyI,GAAK,IAAK,GAAIsS,KAAKtS,GAAOA,EAAEryB,eAAe2kC,KAAI/a,EAAE+a,GAAKtS,EAAEsS,MACpD/a,EAAGyI,GAE5B,OAAO,UAAUzI,EAAGyI,GAEhB,QAASmW,KAAO9nC,KAAKzC,YAAc2rB,EADnCye,EAAcze,EAAGyI,GAEjBzI,EAAEvuB,UAAkB,OAANg3B,EAAa1zB,OAAO6S,OAAO6gB,IAAMmW,EAAGntC,UAAYg3B,EAAEh3B,UAAW,GAAImtC,QAGnFC,GAA0C,SAAUC,EAAYx5B,EAAQzR,EAAKkrC,GAC7E,GAA2H/e,GAAvHsK,EAAI70B,UAAU9C,OAAQ6tB,EAAI8J,EAAI,EAAIhlB,EAAkB,OAATy5B,EAAgBA,EAAOhqC,OAAOiqC,yBAAyB15B,EAAQzR,GAAOkrC,CACrH,IAAuB,gBAAZE,UAAoD,kBAArBA,SAAQC,SAAyB1e,EAAIye,QAAQC,SAASJ,EAAYx5B,EAAQzR,EAAKkrC,OACpH,KAAK,GAAIvrC,GAAIsrC,EAAWnsC,OAAS,EAAGa,GAAK,EAAGA,KAASwsB,EAAI8e,EAAWtrC,MAAIgtB,GAAK8J,EAAI,EAAItK,EAAEQ,GAAK8J,EAAI,EAAItK,EAAE1a,EAAQzR,EAAK2sB,GAAKR,EAAE1a,EAAQzR,KAAS2sB,EAChJ,OAAO8J,GAAI,GAAK9J,GAAKzrB,OAAOkP,eAAeqB,EAAQzR,EAAK2sB,GAAIA,GAuB5D+kC,GAA2B,SAAUnmB,GAErC,QAASmmB,GAAUjtD,EAAS6rB,GACxB,GAAIttB,GAAQuoC,EAAO/oC,KAAKS,KAAMqtB,EAAS7rB,IAAYxB,IAKnD,OAJAD,GAAM2uD,WAAY,EAClB3uD,EAAMkqD,YACNlqD,EAAM2sD,gBAAiB,EACvB3sD,EAAMnF,OACCmF,EAwFX,MA/FA2nC,IAAU+mB,EAAWnmB,GASrBmmB,EAAU9zD,UAAUC,KAAO,WACvBoF,KAAK2uD,cAETF,EAAU9zD,UAAUg0D,WAAa,WAC7BnmD,GAAa3B,IAAI7G,KAAKwB,QAASmQ,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAK2sD,QAAS3sD,OAG1GyuD,EAAU9zD,UAAUwsC,kBAAoB,SAAUsD,EAASC,KAG3D+jB,EAAU9zD,UAAUsQ,cAAgB,WAChC,MAAO,aAEXwjD,EAAU9zD,UAAUuvD,QAAU,SAAUxuD,EAAO8F,GAC3C,IAAKxB,KAAK0uD,UAAW,CACjB,GAAI9E,GAAO5pD,KAAKiqD,SAASjqD,KAAKikD,MAC9BjkD,MAAK2jC,QAAQ,QAAUjoC,MAAOA,EAAO8S,OAAQhN,EAASyoD,SAAUL,IAChE5pD,KAAK0uD,WAAY,IAGzBD,EAAU9zD,UAAU2xD,OAAS,SAAU5wD,EAAO8F,GACtCxB,KAAK0uD,YACL1uD,KAAK2jC,QAAQ,OAAS4gB,IAAK7oD,EAAO8S,OAAQhN,IAC1CxB,KAAK0uD,WAAY,IAGzBD,EAAU9zD,UAAUgyD,QAAU,SAAUpI,EAAK/iD,GACzC,GAAKxB,KAAK0sD,eAAV,CAII1sD,KAAK0sD,gBAAiB,CAE1B,IAGIkC,GAHAC,GAAS,EACTjF,EAAO5pD,KAAKiqD,SAASjqD,KAAKikD,OAC1B6K,IAASlF,IAAQA,EAAK7yC,QAAU1P,EAAUuiD,EAAK7yC,QAE/C+3C,KACAF,EAAO5uD,KAAK+uD,WAAWxK,EAAKqF,EAAK7yC,OAAQvV,GACrCxB,KAAK6uD,SACLA,EAASllD,EAAQigD,EAAK7yC,OAAQ/W,KAAK6uD,UAGvCC,GAAU9uD,KAAKsuD,MAAQM,EAAKI,SAAWH,GACvC7uD,KAAK2jC,QAAQ,QAAUjoC,MAAO6oD,EAAK/1C,OAAQogD,EAAKpgD,OAAQygD,eAAgBrF,EAAK7yC,OAAQkzC,SAAUL,IAEnG5pD,KAAK0uD,WAAY,IAErBD,EAAU9zD,UAAUo0D,WAAa,SAAUxK,EAAKxtC,EAAQvV,GACpD,GAAIotD,IAASI,SAAS,EAAMxgD,OAAQhN,GAAW+iD,EAAI/1C,QAC/C0yB,EAAuB,aAAbqjB,EAAI54C,IAClB,IAAIu1B,GAAW0tB,EAAKpgD,SAAWuI,EAAQ,CACnCA,EAAO1R,MAAM6pD,QAAU,MACvB,IAAIC,GAAQjuB,EAAWqjB,EAAIqB,eAAe,GAAMrB,EAC5C/9C,EAAMxF,SAASqsD,iBAAiB8B,EAAMnJ,QAASmJ,EAAMlJ,QACzD2I,GAAKI,SAAU,EACfJ,EAAKI,QAAUpuD,EAAqB4F,EAAKxG,KAAKwB,SAC1CotD,EAAKI,UACLJ,EAAKpgD,OAAShI,GAElBuQ,EAAO1R,MAAM6pD,QAAU,GAE3B,MAAON,IAEXH,EAAU9zD,UAAU4Q,QAAU,WAC1B/C,GAAapB,OAAOpH,KAAKwB,QAASmQ,GAAQ+vB,WAAa,WAAa/vB,GAAQgxB,cAAe3iC,KAAK2sD,SAChGrkB,EAAO3tC,UAAU4Q,QAAQhM,KAAKS,OAElC+nC,IACIx5B,MACDkgD,EAAU9zD,UAAW,aAAU,IAClCotC,IACIx5B,GAAS,YACVkgD,EAAU9zD,UAAW,YAAS,IACjCotC,IACI1oC,MACDovD,EAAU9zD,UAAW,WAAQ,IAChCotC,IACI1oC,MACDovD,EAAU9zD,UAAW,WAAQ,IAChCotC,IACI1oC,MACDovD,EAAU9zD,UAAW,UAAO,IAC/B8zD,EAAY1mB,IACRx4B,IACDk/C,IAEL3oB,ICzIE4B,GAAwC,WACxC,GAAIC,GAAgB,SAAUze,EAAGyI,GAI7B,OAHAgW,EAAgB1pC,OAAO2pC,iBAChBC,uBAA2B1pC,QAAS,SAAU+qB,EAAGyI,GAAKzI,EAAE2e,UAAYlW,IACvE,SAAUzI,EAAGyI,GAAK,IAAK,GAAIsS,KAAKtS,GAAOA,EAAEryB,eAAe2kC,KAAI/a,EAAE+a,GAAKtS,EAAEsS,MACpD/a,EAAGyI,GAE5B,OAAO,UAAUzI,EAAGyI,GAEhB,QAASmW,KAAO9nC,KAAKzC,YAAc2rB,EADnCye,EAAcze,EAAGyI,GAEjBzI,EAAEvuB,UAAkB,OAANg3B,EAAa1zB,OAAO6S,OAAO6gB,IAAMmW,EAAGntC,UAAYg3B,EAAEh3B,UAAW,GAAImtC,QAGnFC,GAA0C,SAAUC,EAAYx5B,EAAQzR,EAAKkrC,GAC7E,GAA2H/e,GAAvHsK,EAAI70B,UAAU9C,OAAQ6tB,EAAI8J,EAAI,EAAIhlB,EAAkB,OAATy5B,EAAgBA,EAAOhqC,OAAOiqC,yBAAyB15B,EAAQzR,GAAOkrC,CACrH,IAAuB,gBAAZE,UAAoD,kBAArBA,SAAQC,SAAyB1e,EAAIye,QAAQC,SAASJ,EAAYx5B,EAAQzR,EAAKkrC,OACpH,KAAK,GAAIvrC,GAAIsrC,EAAWnsC,OAAS,EAAGa,GAAK,EAAGA,KAASwsB,EAAI8e,EAAWtrC,MAAIgtB,GAAK8J,EAAI,EAAItK,EAAEQ,GAAK8J,EAAI,EAAItK,EAAE1a,EAAQzR,EAAK2sB,GAAKR,EAAE1a,EAAQzR,KAAS2sB,EAChJ,OAAO8J,GAAI,GAAK9J,GAAKzrB,OAAOkP,eAAeqB,EAAQzR,EAAK2sB,GAAIA,GAI5D0lC,IACAC,UAAa,EACbC,IAAO,EACPC,MAAS,GACT7rB,MAAS,GACT8rB,QAAW,GACXC,IAAO,GACPC,MAAS,GACTC,SAAY,GACZC,MAAS,GACTC,OAAU,GACVC,OAAU,GACVC,SAAY,GACZ1uB,IAAO,GACP2uB,KAAQ,GACRC,UAAa,GACbC,QAAW,GACXC,WAAc,GACdC,UAAa,GACbC,OAAU,GACVC,OAAU,GACVC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,UAAa,IACbC,KAAQ,IACRC,MAAS,IACTC,MAAS,IACTC,IAAO,IACPC,aAAgB,IAChBC,YAAe,IACfC,YAAe,IACfC,UAAa,IACbC,aAAgB,IAChBC,YAAe,KAkBfC,GAAgC,SAAUxpB,GAQ1C,QAASwpB,GAAetwD,EAAS6rB,GAC7B,GAAIttB,GAAQuoC,EAAO/oC,KAAKS,KAAMqtB,EAAS7rB,IAAYxB,IA8BnD,OAvBAD,GAAMgyD,gBAAkB,SAAU1wD,GAM9B,IAAK,GALD2wD,GAAW3wD,EAAE4wD,OACbC,EAAY7wD,EAAE8wD,QACdC,EAAa/wD,EAAEgxD,SACfC,EAAajxD,EAAEkxD,MAEVx0D,EAAK,EAAGC,EADNC,OAAOjB,KAAK+C,EAAMyyD,YACGz0D,EAAKC,EAAOnC,OAAQkC,IAGhD,IAAK,GAFDhB,GAAMiB,EAAOD,GAER+F,EAAK,EAAG2uD,EADM1yD,EAAMyyD,WAAW,GAAKz1D,GAAKN,MAAM,KACAqH,EAAK2uD,EAAmB52D,OAAQiI,IAAM,CAC1F,GAAI4uD,GAAUD,EAAmB3uD,GAC7B6uD,EAAUC,EAAiBC,iBAAiBH,EAAQ9sD,OACpDosD,KAAaW,EAAQV,QAAUC,IAAcS,EAAQR,SACrDC,IAAeO,EAAQN,UAAYC,IAAeK,EAAQvD,UAC1D/tD,EAAE0rC,OAAShwC,EACPgD,EAAM+yD,WACN/yD,EAAM+yD,UAAUzxD,MAMpCtB,EAAMnF,OACCmF,EAtCX2nC,GAAUoqB,EAAgBxpB,GAwC1BsqB,EAAmBd,EAMnBA,EAAen3D,UAAU4Q,QAAU,WAC/BvL,KAAK+yD,eACLzqB,EAAO3tC,UAAU4Q,QAAQhM,KAAKS,OAUlC8xD,EAAen3D,UAAUwsC,kBAAoB,SAAUsD,EAASC,KAGhEonB,EAAen3D,UAAUC,KAAO,WAC5BoF,KAAK2uD,cAQTmD,EAAen3D,UAAUsQ,cAAgB,WACrC,MAAO,YAQX6mD,EAAen3D,UAAUg0D,WAAa,WAClC3uD,KAAKwB,QAAQ1F,iBAAiBkE,KAAK+iC,UAAW/iC,KAAK+xD,kBAQvDD,EAAen3D,UAAUo4D,aAAe,WACpC/yD,KAAKwB,QAAQtF,oBAAoB8D,KAAK+iC,UAAW/iC,KAAK+xD,kBAQ1DD,EAAee,iBAAmB,SAAUG,GACxC,GAAIA,IAAUhzD,MAAKizD,YACf,MAAOjzD,MAAKizD,YAAY,GAAKD,EAEjC,IAAIh2D,GAAOg2D,EAAOl1B,cAAcrhC,MAAM,KAClCy2D,GACAjB,QAAkC,IAAzBj1D,EAAKkB,QAAQ,OACtBi0D,SAAoC,IAA1Bn1D,EAAKkB,QAAQ,QACvBm0D,UAAsC,IAA3Br1D,EAAKkB,QAAQ,SACxBkxD,QAAS,KASb,OAPIpyD,GAAKA,EAAKnB,OAAS,GAAGA,OAAS,GAAOs3D,OAAOn2D,EAAKA,EAAKnB,OAAS,IAChEq3D,EAAQ9D,QAAU+D,OAAOn2D,EAAKA,EAAKnB,OAAS,IAG5Cq3D,EAAQ9D,QAAUwD,EAAiBQ,WAAWp2D,EAAKA,EAAKnB,OAAS,IAErE+2D,EAAiBK,YAAY,GAAKD,GAAUE,EACrCA,GAGXpB,EAAesB,WAAa,SAAUC,GAClC,MAAOjE,IAAQ,GAAKiE,IAAWA,EAAOxnC,cAAcwxB,WAAW,GAEnE,IAAIuV,EAcJ,OAbAd,GAAemB,eACflrB,IACIx5B,QACDujD,EAAen3D,UAAW,iBAAc,IAC3CotC,IACIx5B,GAAS,UACVujD,EAAen3D,UAAW,gBAAa,IAC1CotC,IACI1oC,MACDyyD,EAAen3D,UAAW,gBAAa,IAC1Cm3D,EAAiBc,EAAmB7qB,IAChCx4B,IACDuiD,IAELhsB,IClMEwtB,GAAsB,WAQtB,QAASA,GAAKC,EAAaC,EAAej/C,GACtCvU,KAAKuzD,YAAcA,EACnBvzD,KAAKwzD,cAAgBA,EACrBxzD,KAAKyzD,UAAUl/C,GAAUH,kBAkD7B,MA1CAk/C,GAAK34D,UAAU84D,UAAY,SAAUl/C,GACjC,GAAIm/C,GAAY1zD,KAAK2zD,sBAAsBL,EAAK/+C,OAAQA,EACxDvU,MAAK4zD,cAAgBF,GAAa1zD,KAAKwzD,eAQ3CF,EAAKO,KAAO,SAAUC,GAClB9zD,KAAKuU,OAASlW,EAAO2B,KAAKuU,OAAQu/C,MAAkB,IAQxDR,EAAK34D,UAAUo5D,YAAc,SAAUpmD,GAEnC,MAAKxQ,GAAkB6C,KAAK4zD,cAAc,GAAKjmD,IAIpC3N,KAAKwzD,cAAc,GAAK7lD,IAAS,GAHjC3N,KAAK4zD,cAAc,GAAKjmD,IAavC2lD,EAAK34D,UAAUg5D,sBAAwB,SAAUjvB,EAAWnwB,GACxD,MAAI,GAAY,GAAKA,GACV,EAAY,GAAKA,GAAQvU,KAAKuzD,aAElC,MAEXD,EAAK/+C,UACE++C,KCtFP5rB,GAAwC,WACxC,GAAIC,GAAgB,SAAUze,EAAGyI,GAI7B,OAHAgW,EAAgB1pC,OAAO2pC,iBAChBC,uBAA2B1pC,QAAS,SAAU+qB,EAAGyI,GAAKzI,EAAE2e,UAAYlW,IACvE,SAAUzI,EAAGyI,GAAK,IAAK,GAAIsS,KAAKtS,GAAOA,EAAEryB,eAAe2kC,KAAI/a,EAAE+a,GAAKtS,EAAEsS,MACpD/a,EAAGyI,GAE5B,OAAO,UAAUzI,EAAGyI,GAEhB,QAASmW,KAAO9nC,KAAKzC,YAAc2rB,EADnCye,EAAcze,EAAGyI,GAEjBzI,EAAEvuB,UAAkB,OAANg3B,EAAa1zB,OAAO6S,OAAO6gB,IAAMmW,EAAGntC,UAAYg3B,EAAEh3B,UAAW,GAAImtC,QAGnFC,GAA0C,SAAUC,EAAYx5B,EAAQzR,EAAKkrC,GAC7E,GAA2H/e,GAAvHsK,EAAI70B,UAAU9C,OAAQ6tB,EAAI8J,EAAI,EAAIhlB,EAAkB,OAATy5B,EAAgBA,EAAOhqC,OAAOiqC,yBAAyB15B,EAAQzR,GAAOkrC,CACrH,IAAuB,gBAAZE,UAAoD,kBAArBA,SAAQC,SAAyB1e,EAAIye,QAAQC,SAASJ,EAAYx5B,EAAQzR,EAAKkrC,OACpH,KAAK,GAAIvrC,GAAIsrC,EAAWnsC,OAAS,EAAGa,GAAK,EAAGA,KAASwsB,EAAI8e,EAAWtrC,MAAIgtB,GAAK8J,EAAI,EAAItK,EAAEQ,GAAK8J,EAAI,EAAItK,EAAE1a,EAAQzR,EAAK2sB,GAAKR,EAAE1a,EAAQzR,KAAS2sB,EAChJ,OAAO8J,GAAI,GAAK9J,GAAKzrB,OAAOkP,eAAeqB,EAAQzR,EAAK2sB,GAAIA,GAY5DsqC,GAA+B,SAAU1rB,GAEzC,QAAS0rB,KACL,MAAkB,QAAX1rB,GAAmBA,EAAOztC,MAAMmF,KAAMrB,YAAcqB,KAK/D,MAPA0nC,IAAUssB,EAAe1rB,GAIzBP,IACIx5B,GAAS,KACVylD,EAAcr5D,UAAW,6BAA0B,IAC/Cq5D,GACT3nB,IAEE4nB,GAAa,YAsBbC,GAAuB,SAAU5rB,GAGjC,QAAS4rB,GAAM1yD,EAAS6rB,GACpB,GAAIttB,GAAQuoC,EAAO/oC,KAAKS,KAAMqtB,EAAS7rB,IAAYxB,IA2InD,OA1IAD,GAAMo0D,aAAc,EACpBp0D,EAAMq0D,SAAW,EAMjBr0D,EAAMs0D,WAAa,SAAU9P,GACzB,IAA0B,IAAtBxkD,EAAMo0D,YAAsB,CAC5B,GAAIG,GAAQv0D,EAAMw0D,oBAAoBhQ,OACX9pD,KAAvB8pD,EAAIqB,iBACJ7lD,EAAMo0D,aAAc,GAExBp0D,EAAMy0D,cAAe,EACrBz0D,EAAM00D,eAAiB,GACvB10D,EAAM20D,WAAa30D,EAAM40D,gBAAmB3O,QAASsO,EAAMtO,QAASC,QAASqO,EAAMrO,SACnFlmD,EAAM60D,eAAiBN,EACvBv0D,EAAM80D,cAAgB90D,EAAM+0D,eAAgB,EAC5C/0D,EAAMg1D,YAAc9kC,KAAK+kC,MACzBj1D,EAAMk1D,eAAiB90D,WAAW,WAAcJ,EAAMm1D,aAAa3Q,IAASxkD,EAAM2kD,kBAClFl8C,GAAa3B,IAAI9G,EAAMyB,QAASmQ,GAAQ+wB,eAAgB3iC,EAAMo1D,UAAWp1D,GACzEyI,GAAa3B,IAAI9G,EAAMyB,QAASmQ,GAAQgxB,cAAe5iC,EAAMq1D,SAAUr1D,GACvEyI,GAAa3B,IAAI9G,EAAMyB,QAASmQ,GAAQixB,iBAAkB7iC,EAAMs1D,YAAat1D,KAQrFA,EAAMo1D,UAAY,SAAU5Q,GACxB,GAAI+P,GAAQv0D,EAAMw0D,oBAAoBhQ,EACtCxkD,GAAMu1D,WAAahB,EACnBv0D,EAAMy0D,eAAiBF,EAAMtO,UAAYjmD,EAAM20D,WAAW1O,SAAWsO,EAAMrO,UAAYlmD,EAAM20D,WAAWzO,QACxG,IAAIsP,KACAx1D,GAAMy0D,eACNt0D,aAAaH,EAAMk1D,gBACnBl1D,EAAMy1D,iBAAiBjR,GAQvBgR,EAAcl3D,EAAOk3D,MANjBE,YAAa11D,EAAM60D,eACnBc,cAAenR,EAAKoR,OAAQ51D,EAAM20D,WAAW1O,QAC7C4P,OAAQ71D,EAAM20D,WAAWzO,QAAS4P,UAAW91D,EAAM81D,UACnDC,UAAW/1D,EAAM+1D,UAAWC,gBAAiBh2D,EAAMg2D,gBACnDC,SAAUj2D,EAAMk2D,YAAY3B,KAGhCv0D,EAAM4jC,QAAQ,SAAU4xB,GACxBx1D,EAAM40D,gBAAmB3O,QAASsO,EAAMtO,QAASC,QAASqO,EAAMrO,WAQxElmD,EAAMs1D,YAAc,SAAU9Q,GAC1BrkD,aAAaH,EAAMk1D,gBACnB/0D,aAAaH,EAAMm2D,YACnBn2D,EAAMq0D,SAAW,EACjBr0D,EAAMo2D,QAAQ5R,GACd/7C,GAAapB,OAAOrH,EAAMyB,QAASmQ,GAAQixB,iBAAkB7iC,EAAMs1D,cAOvEt1D,EAAMq1D,SAAW,SAAU7Q,GACvBxkD,EAAMo2D,QAAQ5R,GACTxkD,EAAMy0D,cACkB,kBAAdz0D,GAAMq2D,MACbr2D,EAAM4jC,QAAQ,OAAS+xB,cAAenR,EAAK6P,WAAYr0D,EAAMq0D,WAC7Dr0D,EAAMm2D,WAAa/1D,WAAW,WAC1BJ,EAAMq0D,SAAW,GAClBr0D,EAAMs2D,eAGjBt2D,EAAMu2D,aAOVv2D,EAAMo2D,QAAU,SAAU5R,GACtBrkD,aAAaH,EAAMk1D,gBACnB/0D,aAAaH,EAAMm2D,WACnB,IAAI5B,GAAQv0D,EAAMw0D,oBAAoBhQ,GAClClB,EAAQiR,EAAMtO,QAAUjmD,EAAM20D,WAAW1O,QACzCpC,EAAQ0Q,EAAMrO,QAAUlmD,EAAM20D,WAAWzO,OAC7C5C,GAAQ3wC,KAAKugB,MAAMowB,EAAQ,GAAK,EAAIA,EAAQA,GAC5CO,EAAQlxC,KAAKugB,MAAM2wB,EAAQ,GAAK,EAAIA,EAAQP,GAC5CtjD,EAAMy0D,aAAenR,EAAQ,GAAKO,EAAQ,EAC1B,UAAY5+C,KAAK2M,GAAQivB,YACN,IAAlB0zB,EAAMtO,SAAmC,IAAlBsO,EAAMrO,SAA8B,YAAb1B,EAAI54C,OAC/D5L,EAAMy0D,cAAe,GAEzBz0D,EAAMw2D,SAAWjC,EACjBv0D,EAAMy2D,WAAWjS,EACjB,IAAIkS,IACAf,cAAenR,EACfkR,YAAa11D,EAAM60D,eACnBe,OAAQ51D,EAAM20D,WAAW1O,QACzB4P,OAAQ71D,EAAM20D,WAAWzO,QACzB4P,UAAW91D,EAAM81D,UAAWC,UAAW/1D,EAAM+1D,UAAWY,eAAgB32D,EAAM00D,eAC9EuB,SAAUj2D,EAAMk2D,YAAY3B,GAEhC,IAAIv0D,EAAMy0D,aAAc,CACpB,GAAImC,GAAY52D,EAAM62D,cAAcC,uBAChCC,EAAaz4D,MAAO5D,GAAWsF,EAAMg3D,YAAaN,GAClDO,GAAa,EACbxwD,EAAMzG,EAAMyB,QACZy1D,EAAal3D,EAAMm3D,aAAa1wD,GAChC2wD,EAAQlD,GAAWjvD,KAAKjF,EAAM00D,iBAC7BkC,EAAY52D,EAAM81D,YAAcsB,GAAWR,EAAY52D,EAAM+1D,WAAaqB,KAKvEH,GAJCC,GAIYl3D,EAAMq3D,WAAW5wD,EAAK2wD,IAGvCH,GACAj3D,EAAM4jC,QAAQ,QAASmzB,GAG/B/2D,EAAMu2D,aAEVv2D,EAAMu2D,UAAY,WACdv2D,EAAMs3D,UAAYl3D,WAAW,WACzBJ,EAAMo0D,aAAc,GACC,kBAAdp0D,GAAMq2D,IAAqB,EAAI,IAC1Cr2D,EAAMu3D,aAAc,GAAIrnC,OAAOiD,UAC/B1qB,GAAapB,OAAOrH,EAAMyB,QAASmQ,GAAQ+wB,eAAgB3iC,EAAMo1D,WACjE3sD,GAAapB,OAAOrH,EAAMyB,QAASmQ,GAAQgxB,cAAe5iC,EAAMq1D,UAChE5sD,GAAapB,OAAOrH,EAAMyB,QAASmQ,GAAQixB,iBAAkB7iC,EAAMs1D,cAEvEt1D,EAAMnF,OACCmF,EAgJX,MA9RA2nC,IAAUwsB,EAAO5rB,GAwJjB4rB,EAAMv5D,UAAUwsC,kBAAoB,SAAUsD,EAASC,KAGvDwpB,EAAMv5D,UAAUC,KAAO,WACnBoF,KAAK2uD,aACDh9C,GAAQ0xB,MACRrjC,KAAKwB,QAAQ4E,UAAUS,IAAI,kBAQnCqtD,EAAMv5D,UAAU4Q,QAAU,WACtBvL,KAAK+yD,eACLzqB,EAAO3tC,UAAU4Q,QAAQhM,KAAKS,OAGlCk0D,EAAMv5D,UAAUg0D,WAAa,WACzBnmD,GAAa3B,IAAI7G,KAAKwB,QAASmQ,GAAQ8wB,gBAAiBziC,KAAKq0D,WAAYr0D,OAE7Ek0D,EAAMv5D,UAAUo4D,aAAe,WAC3BvqD,GAAapB,OAAOpH,KAAKwB,QAASmQ,GAAQ8wB,gBAAiBziC,KAAKq0D,aAQpEH,EAAMv5D,UAAUsQ,cAAgB,WAC5B,MAAO,SAQXipD,EAAMv5D,UAAUu8D,aAAe,SAAU11D,GACrC,GAAI+1D,GAAWhkD,iBAAiB/R,GAC5B6D,EAAQkyD,EAASxL,SAAWwL,EAASC,UAAYD,EAASE,SAC9D,SAAI,gBAAkBzyD,KAAKK,IAU/B6uD,EAAMv5D,UAAUu6D,aAAe,SAAU3Q,GACrCvkD,KAAKo0D,SAAW,EAChBp0D,KAAKm0D,aAAc,EACnB3rD,GAAapB,OAAOpH,KAAKwB,QAASmQ,GAAQ+wB,eAAgB1iC,KAAKm1D,WAC/D3sD,GAAapB,OAAOpH,KAAKwB,QAASmQ,GAAQgxB,cAAe3iC,KAAKo1D,SAC9D,IAAIsC,IAAahC,cAAenR,EAChCvkD,MAAK2jC,QAAQ,UAAW+zB,GACxBlvD,GAAapB,OAAOpH,KAAKwB,QAASmQ,GAAQixB,iBAAkB5iC,KAAKq1D,cAErEnB,EAAMv5D,UAAU67D,WAAa,SAAUjS,GACnC,GAAI+P,GAAQt0D,KAAKu0D,oBAAoBhQ,EACrCvkD,MAAK+2D,aAAgBrB,cAAenR,GACpCvkD,KAAK61D,UAAYnjD,KAAKE,IAAKF,KAAKE,IAAI0hD,EAAMtO,SAAWtzC,KAAKE,IAAI5S,KAAK00D,WAAW1O,UAC9EhmD,KAAK81D,UAAYpjD,KAAKE,IAAKF,KAAKE,IAAI0hD,EAAMrO,SAAWvzC,KAAKE,IAAI5S,KAAK00D,WAAWzO,UAC1EjmD,KAAK61D,UAAY71D,KAAK81D,UACtB91D,KAAKy0D,eAAkBH,EAAMtO,QAAUhmD,KAAK00D,WAAW1O,QAAW,QAAU,OAG5EhmD,KAAKy0D,eAAkBH,EAAMrO,QAAUjmD,KAAK00D,WAAWzO,QAAW,KAAO,QAGjFiO,EAAMv5D,UAAU66D,iBAAmB,SAAUjR,GACzC,GAAI+P,GAAQt0D,KAAKu0D,oBAAoBhQ,EACrCvkD,MAAK+2D,aAAgBrB,cAAenR,GACpCvkD,KAAK61D,UAAYnjD,KAAKE,IAAKF,KAAKE,IAAI0hD,EAAMtO,SAAWtzC,KAAKE,IAAI5S,KAAK20D,eAAe3O,UAClFhmD,KAAK81D,UAAYpjD,KAAKE,IAAKF,KAAKE,IAAI0hD,EAAMrO,SAAWvzC,KAAKE,IAAI5S,KAAK20D,eAAe1O,WAC7EjmD,KAAK61D,UAAY71D,KAAK81D,YAAoC,IAAvB91D,KAAK60D,iBAAkD,IAAvB70D,KAAK80D,eACzE90D,KAAK+1D,gBAAmBzB,EAAMtO,QAAUhmD,KAAK20D,eAAe3O,QAAW,QAAU,OACjFhmD,KAAK60D,eAAgB,IAGrB70D,KAAK+1D,gBAAmBzB,EAAMrO,QAAUjmD,KAAK20D,eAAe1O,QAAW,KAAO,OAC9EjmD,KAAK80D,eAAgB,IAG7BZ,EAAMv5D,UAAUs7D,YAAc,SAAU0B,GACpC,GAAIC,GAAOD,EAAI3R,QACX6R,EAAOF,EAAI1R,QACX6R,EAAO7nC,KAAK+kC,MACZ+C,EAAQH,EAAO53D,KAAK00D,WAAW1O,QAC/BgS,EAAQH,EAAO73D,KAAK00D,WAAW1O,QAC/BpjD,EAAWk1D,EAAO93D,KAAK+0D,WAC3B,OAAOriD,MAAKQ,KAAK6kD,EAAQA,EAAQC,EAAQA,GAASp1D,GAEtDsxD,EAAMv5D,UAAUy8D,WAAa,SAAU5wD,EAAKO,GACxC,GAAI/J,IAAQ,SAAU,UAClB+T,EAAOhK,GAAQ,SAAU,QAAU,QAAS,OAChD,OAAKP,GAAIxJ,EAAK,GAAK+T,EAAK,KAAOvK,EAAIxJ,EAAK,GAAK+T,EAAK,MAGf,IAA3BvK,EAAIxJ,EAAK,GAAK+T,EAAK,KACtBvK,EAAIxJ,EAAK,GAAK+T,EAAK,IAAMvK,EAAIxJ,EAAK,GAAK+T,EAAK,KAAOvK,EAAIxJ,EAAK,GAAK+T,EAAK,MAE/EmjD,EAAMv5D,UAAU45D,oBAAsB,SAAUhQ,GAE5C,MADYA,GAAIqB,gBAAgD,IAA9BrB,EAAIqB,eAAe/pD,OAAe0oD,EAAIqB,eAAe,GAAKrB,GAGhGxc,IACI1oC,MACD60D,EAAMv5D,UAAW,UAAO,IAC3BotC,IACI1oC,MACD60D,EAAMv5D,UAAW,cAAW,IAC/BotC,IACI1oC,MACD60D,EAAMv5D,UAAW,YAAS,IAC7BotC,IACI1oC,MACD60D,EAAMv5D,UAAW,aAAU,IAC9BotC,IACIx5B,GAAS,MACV2lD,EAAMv5D,UAAW,mBAAgB,IACpCotC,IACIx5B,GAAS,MACV2lD,EAAMv5D,UAAW,uBAAoB,IACxCotC,IACIj5B,MAAYklD,KACbE,EAAMv5D,UAAW,oBAAiB,IACrCu5D,EAAQnsB,IACJx4B,IACD2kD,IAELpuB,IlB1VEnuB,GAAQ,GAAIpR,QAAO,kBAAmB,KACtC8R,GAAS,GAAI9R,QAAO,QACpB+R,GAAU,GAAI/R,QAAO,WACrB2R,GAAc,GAAI3R,QAAO,gBACzB6S,GAAY,GAAI7S,QAAO,QACvBmS,GAAW,GAAInS,QAAO,YACtB8S,GAAY,GAAI9S,QAAO,cACvByR,GAAgB,GAAIzR,QAAO,aAAc,IACzCoT,GAAa,GAAIpT,QAAO,WAAY,KACpC4R,GAAO,GAAI5R,QAAO,iBAAkB,KACpCqR,GAAiB,GAAIrR,QAAO,UAAW,KACvCgS,GAAS,GAAIhS,QAAO,qBAAsB,KAC1CiR,GAAM,GAAIjR,QAAO,eAAgB,KAEjC2T,GAAU,UACVZ,GAAe,OACfS,GAAe,SACfZ,GAAW,GAAI5S,QAAO,oBAAqB,KAC3C2S,GAAa,cCfb6B,GAAU,oBACVD,GAAU,2BACHD,MAoKPL,IAAc3D,SAAS,IATC,WACxB,QAASohD,MAMT,MAJAA,GAAOt9D,UAAUkc,QAAU,SAAUyD,EAAgBvD,EAAQC,GAEzD,WADe,KAAXD,IAAqBA,MAClBioC,GAAO1kC,EAAgBvD,IAE3BkhD,OAE6BphD,SkBxKpCqhD,IACA,SACA,QACA,cACA,4BACA,kCACA,wCACA,oCACA,uBACA,0BACA,0BACA,2CAEAC,KACEC,UAAW,OAAQvvD,SAAU,0BAC7BuvD,UAAW,OAAQvvD,SAAU,YAC7BuvD,UAAW,aAAcvvD,SAAU,gCACnCuvD,UAAW,QAASvvD,SAAU,2BAC9BuvD,UAAW,QAASvvD,SAAU,2BAC9BuvD,UAAW,OAAQvvD,SAAU,qCAE/BwvD,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,MAuFT,MArFAA,GAAmBC,eAAiB,WAChC,OACIC,WACIC,KAAMP,GACN1yD,WAAY2yD,MAIxBG,EAAmBI,SAAW,SAAUp8D,GACpC,GAAIa,EAAkBb,GAClB,MAAOA,EAEX,IAAIq8D,GAAO34D,KAAKu4D,gBAEhB,OADav4D,MAAK44D,eAAeD,EAAMr8D,IAG3Cg8D,EAAmBM,eAAiB,SAAUD,EAAMr8D,GAChD0D,KAAKm4D,YAAcQ,EAAKH,UAAUhzD,WAClCxF,KAAKk4D,WAAaS,EAAKH,UAAUC,KACjCz4D,KAAK64D,YAAc73D,SAASW,cAAc,OAC1C3B,KAAK64D,YAAYp2D,UAAYnG,EAC7B0D,KAAK84D,gBACL94D,KAAK+4D,iBACL/4D,KAAKg5D,gBACL,IAAIC,GAAej5D,KAAK64D,YAAYp2D,SAGpC,OAFAzC,MAAKk5D,gBACLl5D,KAAK64D,YAAc,KACZI,EAAaz8D,QAAQ,SAAU,MAE1C87D,EAAmBY,cAAgB,WAG/B,IAAK,GADDC,GAAQn5D,KAAK64D,YAAYO,SACpB/vD,EAAI,EAAGA,EAAI8vD,EAAMt9D,OAAQwN,IAE9B,IAAK,GADD+uD,GAAYe,EAAMv8D,SAASyM,EAAExM,WAAY,KAAK2I,WACzC9I,EAAI,EAAGA,EAAI07D,EAAUv8D,OAAQa,IAClCsD,KAAK64D,YAAYO,SAASx8D,SAASyM,EAAExM,WAAY,KAAKgV,gBAAgBumD,EAAUx7D,SAASF,EAAEG,WAAY,KAAKw8D,YAIxHf,EAAmBQ,cAAgB,WAC/B,GAAI5yD,GAAWlG,KAAK64D,YAAY92D,iBAAiB/B,KAAKk4D,WAAWz3D,KAAK,KAClEyF,GAASrK,OAAS,GAClBqK,EAASpH,QAAQ,SAAU0C,GACvB8G,EAAO9G,MAOnB82D,EAAmBS,eAAiB,WAChC,GAAI7yD,GAAWlG,KAAK64D,YAAY92D,iBAAiB,IAAMs2D,GAAS53D,KAAK,OAAS,IAC1EyF,GAASrK,OAAS,GAClBqK,EAASpH,QAAQ,SAAU0C,GACvB62D,GAASv5D,QAAQ,SAAUw6D,GACnB93D,EAAQ+3D,aAAaD,IACrB93D,EAAQqQ,gBAAgBynD,QAS5ChB,EAAmBU,eAAiB,WAChC,GAAIj5D,GAAQC,IACZA,MAAKm4D,YAAYr5D,QAAQ,SAAU65D,EAAMzxD,GACrC,GAAIhB,GAAWnG,EAAM84D,YAAY92D,iBAAiB42D,EAAK9vD,SACnD3C,GAASrK,OAAS,IACI,YAAlB88D,EAAK9vD,SACL3C,EAASpH,QAAQ,SAAU0C,IAC4E,IAA9FA,EAAQ6I,aAAasuD,EAAKP,WAAY57D,QAAQ,UAAW,IAAI0B,QAAQ,qBACtEsD,EAAQqQ,gBAAgB8mD,EAAKP,aAKrClyD,EAASpH,QAAQ,SAAU0C,GACvBA,EAAQqQ,gBAAgB8mD,EAAKP,iBAM1CE"}
|
|
1
|
+
{"version":3,"file":"ej2-base.min.js","sources":["../../src/util.js","../../src/intl/parser-base.js","../../src/intl/intl-base.js","../../src/dom.js","../../src/base.js","../../src/notify-property-change.js","../../src/animation.js","../../src/internationalization.js","../../src/validate-lic.js","../../src/component.js","../../src/template.js","../../src/template-engine.js","../../src/ajax.js","../../src/fetch.js","../../src/browser.js","../../src/event-handler.js","../../src/observer.js","../../src/module-loader.js","../../src/child-property.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/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 */\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 var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, window.location.origin);\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 */\nexport function getValue(nameSpace, obj) {\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 */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[parseInt(i.toString(), 10)];\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue;\n }\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 */\nexport function deleteObject(obj, key) {\n delete obj[\"\" + key];\n}\n/**\n *@private\n */\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 */\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 */\nexport function getEnumValue(enumObject, enumValue) {\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 var args = [copied, first, second, deep];\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!args[parseInt(i.toString(), 10)]) {\n return \"continue\";\n }\n var obj1 = args[parseInt(i.toString(), 10)];\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 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 if (Array.isArray(clone) && Object.prototype.hasOwnProperty.call(clone, '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 result[\"\" + key] = extend([], clone, copy, (clone && clone.length) || (copy && copy.length));\n }\n }\n else {\n result[\"\" + key] = copy;\n }\n });\n };\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 {any} 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 {any} 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 var out;\n return function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\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 */\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 throw new Error(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 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 */\nexport function getInstance(element, component) {\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 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 */\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 if (!Object.prototype.hasOwnProperty.call(res, prop[\"\" + key])) {\n res[prop[\"\" + key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n *\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 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 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 ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[parseInt(i.toString(), 10)] = digits[parseInt(i.toString(), 10)];\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 { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { isUndefined } from '../util';\n/**\n * Specifies default currency code to be considered\n *\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar NumberFormat = null;\nvar DateFormat = null;\nexport function setDefaultCurrencyCode(value) { defaultCurrencyCode = value; }\nexport function setNumberFormat(value) { NumberFormat = value; }\nexport function setDateFormat(value) { DateFormat = value; }\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 @typescript-eslint/no-namespace\nexport var IntlBase;\n(function (IntlBase) {\n // eslint-disable-next-line security/detect-unsafe-regex\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n // eslint-disable-next-line security/detect-unsafe-regex\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 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 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 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 val = val.replace(IntlBase.defaultCurrency, sym);\n return (sym === '') ? val.trim() : val;\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 * @param {string} ignoreCurrency ?\n * @returns {string} ?\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol, ignoreCurrency) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = ignoreCurrency ? '$' : 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 options[\"\" + data[parseInt(i.toString(), 10)]] = customNumberFormat(formatSplit[parseInt(i.toString(), 10)], 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 integerPart = (/\\s$/.test(integerPart)) ? integerPart.replace(/ /g, '') : integerPart;\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 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 options[\"\" + typeMapper[parseInt(i.toString(), 10)]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[\"\" + typeMapper[\"\" + actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n *\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 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 function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\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 IntlBase.processSymbol = processSymbol;\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 * @param {number} firstDayOfWeek ?\n * @returns {number} ?\n */\n function getWeekOfYear(date, firstDayOfWeek) {\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 - firstDayOfWeek - 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 - firstDayOfWeek - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\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.style.cssText = properties.styles;\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * Updates the CSS text of an element by merging new styles with existing styles.\n *\n * @param {HTMLElement} element - The element whose styles need to be updated.\n * @param {string} cssText - The new CSS styles to be added or updated.\n * @returns {void}\n */\nexport function updateCSSText(element, cssText) {\n var existingStyles = element.style.cssText.split(';').reduce(function (styles, style) {\n var _a = style.split(':'), key = _a[0], value = _a[1];\n if (key && value) {\n styles[key.trim()] = value.trim();\n }\n return styles;\n }, {});\n var newStyles = cssText.split(';').reduce(function (styles, style) {\n var _a = style.split(':'), key = _a[0], value = _a[1];\n if (key && value) {\n styles[key.trim()] = value.trim();\n }\n return styles;\n }, {});\n var styleElement = document.createElement('div');\n // Use safe iteration over keys using Object.keys\n Object.keys(__assign({}, existingStyles, newStyles)).forEach(function (key) {\n styleElement.style.setProperty(key, newStyles[key] || existingStyles[key]);\n });\n element.style.cssText = styleElement.style.cssText;\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 */\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 */\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 */\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 */\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 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 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 */\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n var regExp = RegExp;\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 */\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\n * @returns {void} ?\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 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 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 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 Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\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 camelcase\n this.element.ej2_instances =\n this.element.ej2_instances ?\n this.element.ej2_instances.filter(function (i) {\n if (proxyToRaw) {\n return proxyToRaw(i) !== proxyToRaw(_this);\n }\n return i !== _this;\n })\n : [];\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 */\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n if (ele && ele.ej2_instances) {\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 if (instance instanceof comp) {\n return instance;\n }\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @returns {void} ?\n * @private\n */\nexport function removeChildInstance(element) {\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 var compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\nexport var proxyToRaw;\nexport var setProxyToRaw = function (toRaw) { proxyToRaw = toRaw; };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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 */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!Object.prototype.hasOwnProperty.call(instance.properties, 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 */\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 if (!Object.prototype.hasOwnProperty.call(this.properties, 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 var oldVal = Object.prototype.hasOwnProperty.call(this.properties, 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 */\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 */\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (Object.prototype.hasOwnProperty.call(this.properties, 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 if (!Object.prototype.hasOwnProperty.call(this.properties, 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 if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], '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 if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], '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 var oldValueCollection = Object.prototype.hasOwnProperty.call(this.properties, 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 if (!Object.prototype.hasOwnProperty.call(this.properties, 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 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 var newValueParse = newValue[parseInt(i.toString(), 10)];\n Array.prototype[\"\" + dFunc].apply(prop, [newValueParse]);\n var model = getArrayModel(keyString + (prop.length - 1), newValueParse, !this.controlParent, dFunc);\n this.serverDataBind(model, newValue[parseInt(i.toString(), 10)], false, dFunc);\n }\n break;\n case 'pop': {\n Array.prototype[\"\" + dFunc].apply(prop);\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\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/**\n * Method used to create property. General syntax below.\n *\n * @param {Object} defaultValue - Specifies the default value of property.\n * @returns {PropertyDecorator} ?\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 * @private\n */\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 target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\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 if (!Object.prototype.hasOwnProperty.call(builderFunction, '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 if (Object.prototype.hasOwnProperty.call(context, '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 * @returns {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' || animationMode === GlobalAnimationMode.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 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 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 * This method is used to enable or disable the animation for all components.\n *\n * @param {string|GlobalAnimationMode} value - Specifies the value to enable or disable the animation for all components. When set to 'enable', it enables the animation for all components, regardless of the individual component's animation settings. When set to 'disable', it disables the animation for all components, regardless of the individual component's animation settings.\n * @returns {void}\n */\nexport function setGlobalAnimation(value) {\n animationMode = value;\n}\n/**\n * Defines the global animation modes for all components.\n */\nexport var GlobalAnimationMode;\n(function (GlobalAnimationMode) {\n /**\n * Defines the global animation mode as Default. Animation is enabled or disabled based on the component's animation settings.\n */\n GlobalAnimationMode[\"Default\"] = \"Default\";\n /**\n * Defines the global animation mode as Enable. Enables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Enable\"] = \"Enable\";\n /**\n * Defines the global animation mode as Disable. Disables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Disable\"] = \"Disable\";\n})(GlobalAnimationMode || (GlobalAnimationMode = {}));\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, defaultCurrencyCode, setDefaultCurrencyCode } 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';\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 setDefaultCurrencyCode(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 var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = 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 var numObject = IntlBase.getDependables(cldrData, locale, '', true);\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 return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","import { createElement } from './dom';\nimport { getValue, containerObject, 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'];\nexport var pdfViewerSDKComponents = ['grid', 'chart', 'maps', 'schedule', 'gantt', 'richtexteditor', 'kanban', 'treegrid', 'filemanager', 'pivotview', 'diagram', 'blockeditor', 'spreadsheet', 'DocumentEditor'];\nexport var spreadsheetEditorSDKComponents = ['maps', 'schedule', 'gantt', 'richtexteditor', 'kanban', 'treegrid', 'filemanager', 'pivotview', 'diagram', 'blockeditor', 'PdfViewer', 'DocumentEditor'];\nexport var wordEditorSDKComponents = ['grid', 'chart', 'maps', 'schedule', 'gantt', 'richtexteditor', 'kanban', 'treegrid', 'filemanager', 'pivotview', 'diagram', 'blockeditor', 'PdfViewer', 'spreadsheet'];\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;\nvar banner = true;\n/**\n * License validation module\n *\n * @private\n */\nvar LicenseValidator = /** @class */ (function () {\n function LicenseValidator(key) {\n this.isLicensed = true;\n this.version = '31';\n this.platform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats|essentialstudio/i;\n this.prefixRegex = /essentialui|pdfviewersdk|spreadsheeteditorsdk|docxeditorsdk/i;\n this.incorrectPlatform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats/i;\n this.errors = {\n noLicense: '<span>This application was built using a trial version of Syncfusion<sup>®</sup> Essential Studio<sup>®</sup>.' +\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<sup>®</sup> Essential Studio<sup>®</sup>.' +\n ' To remove the license validation message permanently, a valid license key must be included.</span>',\n versionMismatched: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>',\n platformMismatched: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>',\n invalidKey: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>',\n componentRestricted: '<span>The included Syncfusion<sup>®</sup> license key is invalid.</span>'\n };\n this.validatedPlatforms = [];\n this.minVersion = null;\n this.allowedComponentsMap = {\n 'pdfviewersdk': pdfViewerSDKComponents,\n 'spreadsheeteditorsdk': spreadsheetEditorSDKComponents,\n 'docxeditorsdk': wordEditorSDKComponents\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 * @param {string} component - The name of the component to validate.\n * @returns {boolean} ?\n */\n LicenseValidator.prototype.validate = function (component) {\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 ((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 var componentRestrictedMsg = void 0;\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n var hasError = false;\n if ((!this.platform.test(res.platform) && !this.prefixRegex.test(res.platform)) || res.invalidPlatform) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (this.incorrectPlatform.test(res.platform) && parseInt(res.version.split('.')[0], 10) > 30) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (this.prefixRegex.test(res.platform) && parseInt(res.version.split('.')[0], 10) > 30) {\n var restrictionMsg = this.restrictComponent(component, res.platform);\n if (restrictionMsg) {\n componentRestrictedMsg = restrictionMsg;\n hasError = true;\n }\n else {\n componentRestrictedMsg = null;\n }\n if (((res.minVersion >= res.lastValue) && (res.minVersion !== res.lastValue)) ||\n (res.lastValue < parseInt(this.version, 10))) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else {\n if (res.lastValue == null || isNaN(res.lastValue)) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n }\n 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 hasError = true;\n }\n }\n if (!validateMsg && !componentRestrictedMsg) {\n break;\n }\n }\n else {\n if (((res.minVersion >= res.lastValue) && (res.minVersion !== res.lastValue)) ||\n (res.lastValue < parseInt(this.version, 10))) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else {\n if (res.lastValue == null || isNaN(res.lastValue)) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n }\n 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 if (!hasError && this.prefixRegex.test(res.platform)) {\n this.validatedPlatforms.push(res.platform);\n }\n }\n if (!this.validatedPlatforms.length || componentRestrictedMsg) {\n validateMsg = validateMsg || componentRestrictedMsg;\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 if (banner) {\n accountURL = (validateURL && validateURL !== '') ? validateURL : 'https://www.syncfusion.com/account/claim-license-key?pl=SmF2YVNjcmlwdA==&vs=MzE=&utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information';\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 banner = false;\n }\n this.isLicensed = false;\n }\n }\n return this.isLicensed;\n };\n LicenseValidator.prototype.restrictComponent = function (component, platform) {\n var ignoreList = ['DocumentEditor', 'spreadsheet', 'PdfViewer'];\n if (platform === 'essentialui') {\n return ignoreList.indexOf(component) === -1 ? null : this.errors.componentRestricted;\n }\n else {\n // eslint-disable-next-line security/detect-object-injection\n var allowedList = this.allowedComponentsMap[platform] || [];\n return allowedList.indexOf(component) === -1 ? null : this.errors.componentRestricted;\n }\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)\n - 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) || this.prefixRegex.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 var minVersion = parseInt(decryptedStr[1].split('.')[0], 10);\n var lastValue = parseInt(decryptedStr[4], 10);\n resultArray.push({\n platform: decryptedStr[0],\n version: decryptedStr[1],\n expiryDate: decryptedStr[2],\n lastValue: lastValue,\n minVersion: minVersion\n });\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 (component, key) {\n if (key) {\n registerLicense(key);\n }\n return licenseValidator.validate(component);\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?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">support tickets</a>, <a href=\\\"https://www.syncfusion.com/forums?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">forum</a>, <a href=\\\"https://www.syncfusion.com/feedback?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\n \\\" 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?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" 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 7500 flat and wireframe icons for free with Syncfusion<sup>\\u00AE</sup> <a href=\\\"https://www.syncfusion.com/downloads/metrostudio?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\n \\\" 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<sup>\\u00AE</sup> technical <a href=\\\"https://www.syncfusion.com/blogs/?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\n \\\" style=\\\"text-decoration: none;\\n color: #0D6EFD;\\n font-weight: 500;\\\">blogs</a> and <a href=\\\"https://www.syncfusion.com/resources/techportal/whitepapers?utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information\\\" 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,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjIyMzAiIGhlaWdodD0iMTU2Ij4KPHBhdGggZD0iTTAgMCBDMTAuMjAxNTE3OTEgOC44MjE1MTgwNSAxNi4yMjU4NjAxNyAxOS4zODQ1MTIyMiAxNy4yODEyNSAzMi45NzI2NTYyNSBDMTcuNDE3OTUwMTYgNDUuOTc2MjU4NTUgMTMuMTkyNTE4MDQgNTcuNjM2ODk1NzMgNC4yNDYwOTM3NSA2Ny4xMzI4MTI1IEMtNS44MzQzNzk4NyA3Ni42NDQzNzA1IC0xNi43MjM2MTUyMyA4MC40NzU4MTc3IC0zMC40MTAxNTYyNSA4MC4yMjI2NTYyNSBDLTQzLjEyNjA0NDAyIDc5LjI2MTgzMzU2IC01NC4yMDMwOTQ1MyA3My40MDM0NzMyNCAtNjIuNzE4NzUgNjMuOTcyNjU2MjUgQy03MS4xNDgwNjkyNSA1MS44OTg2NTk5MiAtNzMuMTk0NzM3MSA0MC4zOTM3NzYxNCAtNzEuNzE4NzUgMjUuOTcyNjU2MjUgQy02OS4wOTkxNjQzNyAxNC41NTg3NDc0NCAtNjIuMzc0NTczNzggNC42NDI1NDI1NiAtNTIuNzE4NzUgLTIuMDI3MzQzNzUgQy0zNS45MDE4NDE2MSAtMTEuOTUyMDc2NTcgLTE1Ljg5MjUyMDU5IC0xMi4xNTE1ODYzNiAwIDAgWiAiIGZpbGw9IiMwODY4NDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzODguNzE4NzUsNDIuMDI3MzQzNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzcuMzY3MjM5MTYgNC4wNDIzMjQxMSAxMS4xMDI1Mzc1MyAxMS4zOTA0MDEzMyAxNCAxOSBDMTQuMzg5NjU4MjYgMjAuOTg5NzkzMzQgMTQuNzQwMDUyODkgMjIuOTg5MTQ0ODEgMTUgMjUgQzE1LjY2IDI1IDE2LjMyIDI1IDE3IDI1IEMxNy4xMDA1NDY4NyAyNC4xNDQwNjI1IDE3LjIwMTA5Mzc1IDIzLjI4ODEyNSAxNy4zMDQ2ODc1IDIyLjQwNjI1IEMxOC45MTc0Mjc1NSAxNC41MDU2MzU4IDIzLjYwODM5NDI3IDUuNzcxNDMyNzMgMzAuMTc5Njg3NSAwLjg5NDUzMTI1IEMzMy43MzEzMzY1NCAtMC44NTA4MDcwMSAzNi4wNzI1NTM3NiAtMC42MjM0MDQxNyA0MCAwIEM0Ny43ODg2NDkxMyAzLjU4Mjc3ODYgNTEuMzQ3MDc2MTEgMTAuOTI1MDE3NDYgNTQuMzUyNzgzMiAxOC41ODg4NjcxOSBDNjAuNjYxMjYyNjMgMzUuNzMzMjUxOTkgNjMuMjM3ODY0ODggNTQuNDE0MDMxNTkgNjMuMDYyNSA3Mi42MjUgQzYzLjA1Nzk4ODI4IDczLjUzMzc4OTA2IDYzLjA1MzQ3NjU2IDc0LjQ0MjU3ODEyIDYzLjA0ODgyODEyIDc1LjM3ODkwNjI1IEM2My4wMzcyMTIwMiA3Ny41ODU5NjY5NSA2My4wMTkyODQ1MyA3OS43OTI5OTI5OSA2MyA4MiBDNTkuMDQgODIgNTUuMDggODIgNTEgODIgQzUwLjkzMDA2ODM2IDgwLjkwMzQ5MTIxIDUwLjg2MDEzNjcyIDc5LjgwNjk4MjQyIDUwLjc4ODA4NTk0IDc4LjY3NzI0NjA5IEM1MC4zMzA4MzIxNSA0MS45ODYzMDU3MyA1MC4zMzA4MzIxNSA0MS45ODYzMDU3MyAzOSA4IEMzOC4wMSA3LjY3IDM3LjAyIDcuMzQgMzYgNyBDMjUuMTQyMTkxNjggMTYuMjQ0MTIxMzEgMjQuODI2NDcwMzkgMzguNDA3NTg2NzUgMjMuNjgzNTkzNzUgNTEuNjcyMzYzMjggQzIzLjA0MTM0NzcxIDU5Ljc3NjY1NDY5IDIyLjUwMDE0OTM2IDY3Ljg4NTgxMjE3IDIyIDc2IEMxOC4wNCA3NiAxNC4wOCA3NiAxMCA3NiBDOS44OTUxMDI1NCA3NC40NzU4NDQ3MyA5Ljg5NTEwMjU0IDc0LjQ3NTg0NDczIDkuNzg4MDg1OTQgNzIuOTIwODk4NDQgQzkuMjg4Njk2MTIgMzkuNjQwNjkzMTMgOS4yODg2OTYxMiAzOS42NDA2OTMxMyAtMSA5IEMtMy4wMzU2NDA0IDcuNzQxNDM2NTkgLTMuMDM1NjQwNCA3Ljc0MTQzNjU5IC01IDcgQy0xNS44NDgzODY5NyAxNi40OTIzMzg2IC0xNi4wNTg3MjYyNSA0MC4yNTk3NTY0MSAtMTcgNTQgQy0xNy40NzQyMTEwMiA2My4zMjgyOTc4NCAtMTcuNzQ3NjYxNTkgNzIuNjYzNDc4NzQgLTE4IDgyIEMtMjIuMjkgODIgLTI2LjU4IDgyIC0zMSA4MiBDLTMxLjg5MjU5MjA1IDU1LjgxNzI5OTc3IC0yOS45NTA2NDQ2MiAyMi44Mzc1NTI0MSAtMTIgMiBDLTguNDczMzg5NDMgLTAuNjQ0OTU3OTMgLTQuMjE5NTgzOTggLTAuOTU4OTk2MzYgMCAwIFogIiBmaWxsPSIjRkZDQzAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4MjgsMzcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzUuODg3MjkwNzMgMS40NDk4NTUxOCA5LjE2NjM4NTEzIDEuMjgxNTYyNTYgMTQuNzUgLTAuODM5ODQzNzUgQzIwLjM1Nzc0OTYyIC0yLjU0NjE0OTE0IDI1LjU0MDY3MjkyIC0xLjM4Mjk1NTEgMzAuNjI1IDEuMjUgQzMyLjkzNzM1MDYzIDMuMjczMzA2OCAzNC4xMDM0MzU0MiA0LjU3NzExOTE4IDM1LjEyNSA3LjQzNzUgQzM0LjM0MTI1IDguMTggMzMuNTU3NSA4LjkyMjUgMzIuNzUgOS42ODc1IEMyOS4xMTkwMTcwMyAxMy40OTEzODY5MiAyOC4yMzgzODk0NyAxNS4wMzE0NzA1OCAyNy44MTI1IDIwLjMxMjUgQzI3Ljk2MDg4MjA0IDI1LjAxNzA4MzQ0IDI5LjE5MzUzOTM2IDI4LjU3NDg0NDU4IDMyLjY2MDE1NjI1IDMxLjkxNzk2ODc1IEMzNC4xMDgzOTEwMSAzMy4xNDAyMzc4IDM1LjYxMjk3ODE1IDM0LjI5NTA4MzQ5IDM3LjEyNSAzNS40Mzc1IEMzNi4wNzAxOTM1MiA0Mi40Njk1NDMyIDMyLjAzNjA5MDQ5IDQ3Ljk3MzE5OTEgMjcuNzUgNTMuNSBDMjQuMjczODU5MzcgNTYuMDY1NzIyODUgMjEuNDA5Njc2NTkgNTYuNjI0MTU5MTggMTcuMTI1IDU2LjQzNzUgQzE1LjExMjc3OTUzIDU1LjgwODY4MTEgMTMuMTEyMjMyNjggNTUuMTQxMzExNTcgMTEuMTI1IDU0LjQzNzUgQzcuMTMyMjAwNjEgNTQuMDEwODUwMDcgMy44Njk5NzIwNCA1NC4xNzkwNDAzMSAwLjA2MjUgNTUuNSBDLTMuNzQ1OTgyNzYgNTYuNzE1NDczMjIgLTYuMDIwMDcxMDYgNTYuNDcwMDcwMjUgLTkuODc1IDU1LjQzNzUgQy0xNy44OTY4MjA0OCA1MC4zNjI0NzA3MiAtMjMuMjI0ODkxNjcgNDAuMjQ1NjM5MjYgLTI1LjQzMzU5Mzc1IDMxLjEzMjgxMjUgQy0yNi42OTE4Nzk2IDIzLjQ0OTQ3NDE1IC0yNy4zMTA4Njc4MiAxNC4yMDI1NjkzMiAtMjIuODc1IDcuNDM3NSBDLTE5LjE4NzExNTEzIDMuMTY0NjQwMjkgLTE0Ljk1ODc1MDk1IC0wLjQ2NDczMTYxIC05LjI2NTYyNSAtMS41NzQyMTg3NSBDLTYuMDIyMDAxNTYgLTEuNTU4MzE4NjQgLTMuMTQ1MDkxMDYgLTAuNzc5NDY1MjEgMCAwIFogIiBmaWxsPSIjMDAwMDAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjIuODc1LDU1LjU2MjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzYuOTk4NjY1NzYgNi41NjU2MTQ1OCAxMy4yMzU0MjQ3IDEzLjIxNDc1OTU1IDE0LjE3OTY4NzUgMjMuMTg3NSBDMTMuOTYxMTk2MzQgMjguMjczOTc0MSAxMi4yNTY2NDk1NCAzMi4wNjY5ODMyNiA5LjAzNTE1NjI1IDM1Ljk3NjU2MjUgQzAuNTMzMzg4MDQgNDMuNTgzNDA3NzQgLTguOTc3NTY4MjUgNDUuMDAzODkwNjcgLTE5Ljg1NTQ2ODc1IDQ0Ljg5ODQzNzUgQy0yMS4xODA5NDcyNyA0NC44OTE2Njk5MiAtMjEuMTgwOTQ3MjcgNDQuODkxNjY5OTIgLTIyLjUzMzIwMzEyIDQ0Ljg4NDc2NTYyIEMtMjQuNzAzMTU0MzQgNDQuODczMDM2MTYgLTI2Ljg3MzA3MDQ3IDQ0Ljg1NTEwMjQ1IC0yOS4wNDI5Njg3NSA0NC44MzU5Mzc1IEMtMjkuMzcyOTY4NzUgNDUuNDk1OTM3NSAtMjkuNzAyOTY4NzUgNDYuMTU1OTM3NSAtMzAuMDQyOTY4NzUgNDYuODM1OTM3NSBDLTMyLjQxNzk2ODc1IDQ2Ljk2MDkzNzUgLTMyLjQxNzk2ODc1IDQ2Ljk2MDkzNzUgLTM1LjA0Mjk2ODc1IDQ2LjgzNTkzNzUgQy0zNy4wNDI5Njg3NSA0NC44MzU5Mzc1IC0zNy4wNDI5Njg3NSA0NC44MzU5Mzc1IC0zNy40MTQwNjI1IDQyLjM1NTQ2ODc1IEMtMzcuNzgyMzI5OTcgMzkuNzMzNjQ1MzEgLTM3Ljc4MjMyOTk3IDM5LjczMzY0NTMxIC0zOS44MjgxMjUgMzguNTM1MTU2MjUgQy00MC41Nzk2NDg0NCAzOC4yMDEyODkwNiAtNDEuMzMxMTcxODcgMzcuODY3NDIxODcgLTQyLjEwNTQ2ODc1IDM3LjUyMzQzNzUgQy00Ny4zNTI0NjU4MyAzNC44NTM3NjUzOCAtNTEuNDU1NzUyNzEgMzEuNTMwNDMxOTUgLTU1LjA0Mjk2ODc1IDI2LjgzNTkzNzUgQy01Ni4wNDI5Njg3NSAyMy4zMzU5Mzc1IC01Ni4wNDI5Njg3NSAyMy4zMzU5Mzc1IC01Ni4wNDI5Njg3NSAyMC44MzU5Mzc1IEMtNTEuMzM2NTk3OTUgMTYuMTI5NTY2NyAtNDUuMzAzOTE4MTcgMTQuNTc0NTc2MzMgLTM5LjA0Mjk2ODc1IDEyLjgzNTkzNzUgQy0zOC4zODI5Njg3NSAxMi44MzU5Mzc1IC0zNy43MjI5Njg3NSAxMi44MzU5Mzc1IC0zNy4wNDI5Njg3NSAxMi44MzU5Mzc1IEMtMzYuOTIxNzk2ODggMTEuOTA5MTAxNTYgLTM2LjgwMDYyNSAxMC45ODIyNjU2MiAtMzYuNjc1NzgxMjUgMTAuMDI3MzQzNzUgQy0zNi41MDgyMDMxMyA4LjgyOTgwNDY5IC0zNi4zNDA2MjUgNy42MzIyNjU2MyAtMzYuMTY3OTY4NzUgNi4zOTg0Mzc1IEMtMzYuMDA1NTQ2ODggNS4yMDM0NzY1NiAtMzUuODQzMTI1IDQuMDA4NTE1NjMgLTM1LjY3NTc4MTI1IDIuNzc3MzQzNzUgQy0zNS40NjY5NTMxMyAxLjgwNjY3OTY5IC0zNS4yNTgxMjUgMC44MzYwMTU2MyAtMzUuMDQyOTY4NzUgLTAuMTY0MDYyNSBDLTM0LjM4Mjk2ODc1IC0wLjQ5NDA2MjUgLTMzLjcyMjk2ODc1IC0wLjgyNDA2MjUgLTMzLjA0Mjk2ODc1IC0xLjE2NDA2MjUgQy0zMC4wNzc2OTExNyAxLjI4MTI3NiAtMjkuNDg3MTQ2NjEgMy4yODE5NjA5NyAtMjguODU1NDY4NzUgNy4wMjM0Mzc1IEMtMjguNjk2OTE0MDYgNy45MjQ0OTIxOSAtMjguNTM4MzU5MzggOC44MjU1NDY4OCAtMjguMzc1IDkuNzUzOTA2MjUgQy0yOC4yNjU0Mjk2OSAxMC40NDA5NzY1NiAtMjguMTU1ODU5MzcgMTEuMTI4MDQ2ODcgLTI4LjA0Mjk2ODc1IDExLjgzNTkzNzUgQy0yNy4xMjUxNTYyNSAxMS45MzM5MDYyNSAtMjYuMjA3MzQzNzUgMTIuMDMxODc1IC0yNS4yNjE3MTg3NSAxMi4xMzI4MTI1IEMtMTguMDQ1MDgyNTkgMTMuMDEyMTUwNTIgLTEyLjIzNzYzMDI1IDEzLjk0OTA5MTA3IC02LjA0Mjk2ODc1IDE3LjgzNTkzNzUgQy00LjY2MTcxODU3IDIwLjU5ODQzNzg2IC00Ljg1MjE3NTY5IDIyLjc4MzI0ODQ5IC01LjA0Mjk2ODc1IDI1LjgzNTkzNzUgQy03LjA0Mjk2ODc1IDI3LjgzNTkzNzUgLTcuMDQyOTY4NzUgMjcuODM1OTM3NSAtMTAuNjY3OTY4NzUgMjcuOTYwOTM3NSBDLTExLjc4MTcxODc1IDI3LjkxOTY4NzUgLTEyLjg5NTQ2ODc1IDI3Ljg3ODQzNzUgLTE0LjA0Mjk2ODc1IDI3LjgzNTkzNzUgQy0xMy4zODI5Njg3NSAyNi41MTU5Mzc1IC0xMi43MjI5Njg3NSAyNS4xOTU5Mzc1IC0xMi4wNDI5Njg3NSAyMy44MzU5Mzc1IEMtMTUuNzk1MjI3MTUgMjIuMTc5MDk2MTMgLTE5LjMwNjQ5OTM2IDIxLjMzMzg1NTg3IC0yMy4zNTU0Njg3NSAyMC43MTA5Mzc1IEMtMjUuMjMyMzQzNzUgMjAuNDIyMTg3NSAtMjcuMTA5MjE4NzUgMjAuMTMzNDM3NSAtMjkuMDQyOTY4NzUgMTkuODM1OTM3NSBDLTI4LjU0Nzk2ODc1IDI4LjI1MDkzNzUgLTI4LjU0Nzk2ODc1IDI4LjI1MDkzNzUgLTI4LjA0Mjk2ODc1IDM2LjgzNTkzNzUgQy0xMi4wNjE3Nzk5MSAzNy4zODI2NDE3MiAtMTIuMDYxNzc5OTEgMzcuMzgyNjQxNzIgMi4wODIwMzEyNSAzMC42NDg0Mzc1IEM0Ljc2MDcwNTQxIDI2LjYzMDQyNjI2IDQuNzc1MjY3NDcgMjMuNTI1MDYwNDMgMy45NTcwMzEyNSAxOC44MzU5Mzc1IEMxLjAxMTM1NTYzIDguNTI2MDcyODEgLTguODY3NTEyMiAyLjM4NDg3MDU4IC0xNy43MzQzNzUgLTIuNTYyNSBDLTMxLjY3NjMzMzk0IC05LjMxMTI2NDA3IC00NS42NDMxNzQyMiAtMTEuNTY4NzI4NjMgLTYxLjA0Mjk2ODc1IC0xMS4xNjQwNjI1IEMtNjEuMDQyOTY4NzUgLTEwLjE3NDA2MjUgLTYxLjA0Mjk2ODc1IC05LjE4NDA2MjUgLTYxLjA0Mjk2ODc1IC04LjE2NDA2MjUgQy02My4wMjI5Njg3NSAtOC4xNjQwNjI1IC02NS4wMDI5Njg3NSAtOC4xNjQwNjI1IC02Ny4wNDI5Njg3NSAtOC4xNjQwNjI1IEMtNjcuNzkyOTY4NzUgLTkuOTE0MDYyNSAtNjcuNzkyOTY4NzUgLTkuOTE0MDYyNSAtNjguMDQyOTY4NzUgLTEyLjE2NDA2MjUgQy02NS45Njg1NDMxOCAtMTUuNTIyNjU2MjggLTYzLjQ3ODY1NTM5IC0xNi41NTA0NzkzNSAtNTkuNzkyOTY4NzUgLTE3LjQ3NjU2MjUgQy0zOS4xODA0NTMyNSAtMjAuODM2MzExNzIgLTE1Ljg1MjQ2NDU2IC0xMy4zOTczMDI3NCAwIDAgWiBNLTQ3LjM1NTQ2ODc1IDIwLjgzNTkzNzUgQy00OC4yMzg0NzY1NiAyMS4wMjE1NjI1IC00OS4xMjE0ODQzOCAyMS4yMDcxODc1IC01MC4wMzEyNSAyMS4zOTg0Mzc1IEMtNTAuNjk1MTE3MTkgMjEuNTQyODEyNSAtNTEuMzU4OTg0MzcgMjEuNjg3MTg3NSAtNTIuMDQyOTY4NzUgMjEuODM1OTM3NSBDLTUyLjUwMDI0MDQ0IDI1LjcyNDc4Mzk5IC01Mi41MDAyNDA0NCAyNS43MjQ3ODM5OSAtNTAuNTAzOTA2MjUgMjcuNDY4NzUgQy00Ni40NjI2MDg1IDMwLjM1OTcxNTgxIC00Mi45NDE1MjEwNyAzMi42MTEyOTk0MiAtMzguMDQyOTY4NzUgMzMuODM1OTM3NSBDLTM2LjcwMzk1MDgzIDMyLjcyNDY3MDkxIC0zNi43MDM5NTA4MyAzMi43MjQ2NzA5MSAtMzYuOTQ1MzEyNSAyOS44OTQ1MzEyNSBDLTM2Ljk1NjkxNDA2IDI4LjY5OTU3MDMxIC0zNi45Njg1MTU2MyAyNy41MDQ2MDkzOCAtMzYuOTgwNDY4NzUgMjYuMjczNDM3NSBDLTM2Ljk4OTQ5MjE5IDI1LjA3NTg5ODQ0IC0zNi45OTg1MTU2MiAyMy44NzgzNTkzOCAtMzcuMDA3ODEyNSAyMi42NDQ1MzEyNSBDLTM3LjAxOTQxNDA2IDIxLjcxNzY5NTMxIC0zNy4wMzEwMTU2MyAyMC43OTA4NTkzNyAtMzcuMDQyOTY4NzUgMTkuODM1OTM3NSBDLTQwLjYzODE2MTY3IDE5LjczMjI5MjMgLTQzLjg0MDg2MTA3IDIwLjA4NjE1NDUzIC00Ny4zNTU0Njg3NSAyMC44MzU5Mzc1IFogIiBmaWxsPSIjMjIxRTIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NTEuMDQyOTY4NzUsNTguMTY0MDYyNSkiLz4KPHBhdGggZD0iTTAgMCBDMy4zIDAgNi42IDAgMTAgMCBDMTMuOTk1NTQ4MTcgOC40NTIxMjExMyAxNi45NDE0Njg4MSAxNy4xNzE5NjY3OSAyMCAyNiBDMjAuMzMgMTcuNDIgMjAuNjYgOC44NCAyMSAwIEMyNC42MyAwIDI4LjI2IDAgMzIgMCBDMzIgMTguNDggMzIgMzYuOTYgMzIgNTYgQzI4IDU3IDI4IDU3IDIwIDU3IEMxNy4zNiA0OS40MSAxNC43MiA0MS44MiAxMiAzNCBDMTEuNjcgNDIuMjUgMTEuMzQgNTAuNSAxMSA1OSBDNS41NTUgNTkuNDk1IDUuNTU1IDU5LjQ5NSAwIDYwIEMwIDQwLjIgMCAyMC40IDAgMCBaICIgZmlsbD0iI0Q4MUYyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTk1LDUyKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjE3MDQ2ODc1IDAuMDI3MDcwMzEgMi4zNDA5Mzc1IDAuMDU0MTQwNjMgMy41NDY4NzUgMC4wODIwMzEyNSBDNC40Mzg5MDYyNSAwLjExNjgzNTk0IDUuMzMwOTM3NSAwLjE1MTY0MDYyIDYuMjUgMC4xODc1IEM3LjUzODE4NzMxIDYuMjE4NDU0OTcgOC44MTk3NDQ4OSAxMi4yNTA3NjY0NyAxMC4wOTUyMTQ4NCAxOC4yODQ0MjM4MyBDMTAuNTI5OTIzMzUgMjAuMzM2MjQxNDggMTAuOTY2NDMxOTEgMjIuMzg3Njc4NjMgMTEuNDA0Nzg1MTYgMjQuNDM4NzIwNyBDMTIuMDM1MDI5NTggMjcuMzg5MTUwNjYgMTIuNjU4NzU5NzQgMzAuMzQwODk0MzcgMTMuMjgxMjUgMzMuMjkyOTY4NzUgQzEzLjQ3ODExNDAxIDM0LjIwNzczNDgzIDEzLjY3NDk3ODAzIDM1LjEyMjUwMDkyIDEzLjg3NzgwNzYyIDM2LjA2NDk4NzE4IEMxNC4wNTc5OTQzOCAzNi45MjU1MDE4NiAxNC4yMzgxODExNSAzNy43ODYwMTY1NCAxNC40MjM4MjgxMiAzOC42NzI2MDc0MiBDMTQuNTgzNzEyMTYgMzkuNDI1Mzk0NzQgMTQuNzQzNTk2MTkgNDAuMTc4MTgyMDcgMTQuOTA4MzI1MiA0MC45NTM3ODExMyBDMTUuMjUgNDMuMTg3NSAxNS4yNSA0My4xODc1IDE1LjI1IDQ4LjE4NzUgQzExLjI5IDQ4LjE4NzUgNy4zMyA0OC4xODc1IDMuMjUgNDguMTg3NSBDMi45MiA0NS44Nzc1IDIuNTkgNDMuNTY3NSAyLjI1IDQxLjE4NzUgQy0yLjcgNDEuNTE3NSAtNy42NSA0MS44NDc1IC0xMi43NSA0Mi4xODc1IEMtMTMuNDEgNDQuMTY3NSAtMTQuMDcgNDYuMTQ3NSAtMTQuNzUgNDguMTg3NSBDLTE5LjM3IDQ4LjE4NzUgLTIzLjk5IDQ4LjE4NzUgLTI4Ljc1IDQ4LjE4NzUgQy0yNi44MDgzMTEyNiA0Mi4yMDY0MzQ4NSAtMjQuNzAyMzE0NTggMzYuMzU1OTk3NzMgLTIyLjMxNjQwNjI1IDMwLjUzOTA2MjUgQy0yMS45OTcxOTcxMSAyOS43NTk4NTQ0MyAtMjEuNjc3OTg3OTggMjguOTgwNjQ2MzYgLTIxLjM0OTEwNTgzIDI4LjE3NzgyNTkzIEMtMjAuNjc5NDY4MTMgMjYuNTQ4NjI2IC0yMC4wMDc5ODYzNCAyNC45MjAxODI4OSAtMTkuMzM0NzE2OCAyMy4yOTI0ODA0NyBDLTE4LjY0OTcxMDY3IDIxLjYzMDYwMDMgLTE3Ljk3MDA3MDg4IDE5Ljk2NjQ5ODY1IC0xNy4yOTU2NTQzIDE4LjMwMDI5Mjk3IEMtMTYuMzEzOTk1MTggMTUuODc1MDE3NSAtMTUuMzE3MDg2OTUgMTMuNDU2NTQxMzggLTE0LjMxNjQwNjI1IDExLjAzOTA2MjUgQy0xNC4wMTgzNTU4NyAxMC4yOTUzMjM3OSAtMTMuNzIwMzA1NDggOS41NTE1ODUwOCAtMTMuNDEzMjIzMjcgOC43ODUzMDg4NCBDLTEwLjMyNjYxNzczIDEuNDMzOTIzMTMgLTcuOTE5NDc2MjUgLTAuMjM3NTg0MjkgMCAwIFogTS0zLjc1IDE1LjE4NzUgQy01LjQgMjAuMTM3NSAtNy4wNSAyNS4wODc1IC04Ljc1IDMwLjE4NzUgQy02LjExIDMwLjE4NzUgLTMuNDcgMzAuMTg3NSAtMC43NSAzMC4xODc1IEMtMS40MDM0OTYzMyAyMi42MzcxMTU3OCAtMS40MDM0OTYzMyAyMi42MzcxMTU3OCAtMi43NSAxNS4xODc1IEMtMy4wOCAxNS4xODc1IC0zLjQxIDE1LjE4NzUgLTMuNzUgMTUuMTg3NSBaICIgZmlsbD0iIzIzNDM5QSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTcwLjc1LDUzLjgxMjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuNzg5Mjg3NzggMi4zMDgzNzYwOSAzLjc1MTc2ODg4IDQuMjY1OTI4MzQgNC4yNzM0Mzc1IDcuOTEwMTU2MjUgQzQuNjM2ODE4NzQgMTUuNjExMDQzMzQgMS45NDAyMDM5IDIxLjI4NjM5NDY0IC0yLjc5Njg3NSAyNy4yNjk1MzEyNSBDLTkuMDAxNDUwMzQgMzMuOTU4MDYzNDcgLTE1LjA5NjEwOTIxIDM3LjE0MTAyMzg5IC0yNC4yNSAzNy41IEMtMjguMDQyMTE1NTYgMzcuMzY0OTExOTEgLTI5Ljc2NDgxODA0IDM3LjEzMTcwMTkgLTMzLjEyNSAzNS4yNSBDLTM2LjYxNDUyNjY5IDMxLjA2MjU2Nzk3IC0zNy40NTgyNTE2IDI3Ljc5OTc2MzM3IC0zNy4zMDg1OTM3NSAyMi40Mjk2ODc1IEMtMzYuMzE4MDI0MjMgMTQuNjMwNTE5ODYgLTMxLjc1MTQwMDU4IDguMTU2MDQwNzUgLTI2IDMgQy0xNy42OTY1MDc2NiAtMi42NTI1NDYzMSAtOS4yMjAwNTQ5MyAtNS42NTc3NjA5OCAwIDAgWiAiIGZpbGw9IiMwNjg4MkYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNDUsNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNzQ5ODUzMjUgLTAuMDg3MTc0NyA3LjQ5OTQ0NTU1IC0wLjE0MDQ1MDAzIDExLjI1IC0wLjE4NzUgQzEyLjMxMzQ3NjU2IC0wLjIxMjYzNjcyIDEzLjM3Njk1MzEyIC0wLjIzNzc3MzQ0IDE0LjQ3MjY1NjI1IC0wLjI2MzY3MTg4IEMxNS40OTc0NjA5NCAtMC4yNzMzMzk4NCAxNi41MjIyNjU2MyAtMC4yODMwMDc4MSAxNy41NzgxMjUgLTAuMjkyOTY4NzUgQzE4LjUyMDc1MTk1IC0wLjMwODY3OTIgMTkuNDYzMzc4OTEgLTAuMzI0Mzg5NjUgMjAuNDM0NTcwMzEgLTAuMzQwNTc2MTcgQzIzLjU2MjEwMzM5IDAuMDc0NjIyNTkgMjQuODI1NjM1MDMgMC43MTY2NzQ2NSAyNyAzIEMyNy45MTMwODU5NCA1LjYzNTQ5ODA1IDI3LjkxMzA4NTk0IDUuNjM1NDk4MDUgMjguNDg0Mzc1IDguNzYxNzE4NzUgQzI4LjgwMzQxNzk3IDEwLjQzOTExMTMzIDI4LjgwMzQxNzk3IDEwLjQzOTExMTMzIDI5LjEyODkwNjI1IDEyLjE1MDM5MDYyIEMyOS4zMzM4NjcxOSAxMy4zMTc2MzY3MiAyOS41Mzg4MjgxMiAxNC40ODQ4ODI4MSAyOS43NSAxNS42ODc1IEMyOS45NzA0Mjk2OSAxNi44NjYzNDc2NiAzMC4xOTA4NTkzOCAxOC4wNDUxOTUzMSAzMC40MTc5Njg3NSAxOS4yNTk3NjU2MiBDMzAuOTYwMTAyNjQgMjIuMTcwNzg4OTEgMzEuNDg2NzY4MjIgMjUuMDgzNzY2MzEgMzIgMjggQzM1LjA3NTc1MDg3IDIxLjMyMzQ4NDU3IDM4LjA0NTYyMTcyIDE0LjYyMjgwNzQ2IDQwLjgxMjUgNy44MTI1IEM0MS4xMjM4MDg1OSA3LjA1MTMwODU5IDQxLjQzNTExNzE5IDYuMjkwMTE3MTkgNDEuNzU1ODU5MzggNS41MDU4NTkzOCBDNDIuNTA1ODE1MTcgMy42NzEzNTIxMyA0My4yNTMxOTk4MiAxLjgzNTc5NDExIDQ0IDAgQzQ4LjI5IDAgNTIuNTggMCA1NyAwIEM1NS44NzQ5NzQ1OCA2Ljc1MDE1MjU0IDU1Ljg3NDk3NDU4IDYuNzUwMTUyNTQgNTQuMzQxNzk2ODggMTAuMzIxMjg5MDYgQzU0LjAwNDc0NzMxIDExLjExNTIxMDU3IDUzLjY2NzY5Nzc1IDExLjkwOTEzMjA4IDUzLjMyMDQzNDU3IDEyLjcyNzExMTgyIEM1Mi45NTY4Nzg2NiAxMy41NjQ4MjExNyA1Mi41OTMzMjI3NSAxNC40MDI1MzA1MiA1Mi4yMTg3NSAxNS4yNjU2MjUgQzUxLjg0NTIwMzg2IDE2LjE0MDIzMzc2IDUxLjQ3MTY1NzcxIDE3LjAxNDg0MjUzIDUxLjA4Njc5MTk5IDE3LjkxNTk1NDU5IEM0OS44OTczNDQ2IDIwLjY5NjY1Mjc4IDQ4LjY5ODc0NTQ1IDIzLjQ3MzI5OTM5IDQ3LjUgMjYuMjUgQzQ2LjY5MzQyMDAxIDI4LjEzMjU1OTY1IDQ1Ljg4NzQyNDAyIDMwLjAxNTM2OTYzIDQ1LjA4MjAzMTI1IDMxLjg5ODQzNzUgQzQzLjYxMDkxMDIyIDM1LjMzMjU2NDA1IDQyLjEzODAzMjE4IDM4Ljc2NTkwNDg3IDQwLjY1ODIwMzEyIDQyLjE5NjI4OTA2IEM0MC4zNjE0MzY3NyA0Mi44ODQzNDYzMSA0MC4wNjQ2NzA0MSA0My41NzI0MDM1NiAzOS43NTg5MTExMyA0NC4yODEzMTEwNCBDMzkuMjA1MDIxMiA0NS41MzU2OTMxMSAzOC42MTMyMzIxNyA0Ni43NzM1MzU2NyAzOCA0OCBDMzMuMzggNDggMjguNzYgNDggMjQgNDggQzIzLjcxODAxNzU4IDQ2Ljg2OTgxNDQ1IDIzLjQzNjAzNTE2IDQ1LjczOTYyODkxIDIzLjE0NTUwNzgxIDQ0LjU3NTE5NTMxIEMyMi4wOTM1MjM1MyA0MC4zNzQ2MTE1MyAyMS4wMjMxNzA3NiAzNi4xNzg4ODk2NSAxOS45NDcyNjU2MiAzMS45ODQzNzUgQzE5LjQ4NDU3MjAzIDMwLjE2OTg5MDMxIDE5LjAyNjgzOTQ1IDI4LjM1NDEzMjkyIDE4LjU3NDIxODc1IDI2LjUzNzEwOTM4IEMxNy45MjE5MzU4OSAyMy45MjIyNTYxNiAxNy4yNTE4MjE4MSAyMS4zMTI1MzE3MyAxNi41NzgxMjUgMTguNzAzMTI1IEMxNi4yODA5ODYwMiAxNy40ODcyODcyOSAxNi4yODA5ODYwMiAxNy40ODcyODcyOSAxNS45Nzc4NDQyNCAxNi4yNDY4ODcyMSBDMTQuODEwMjA5MzQgMTEuODA0OTMzNDYgMTMuNzk5Njc2MzYgOC44OTA1NzQxMSAxMCA2IEM3LjQ0MzcyNDc1IDQuODk3OTA2NjcgNy40NDM3MjQ3NSA0Ljg5NzkwNjY3IDQuNzUgNC4yNSBDMy44NTc5Njg3NSA0LjAwNzY1NjI1IDIuOTY1OTM3NSAzLjc2NTMxMjUgMi4wNDY4NzUgMy41MTU2MjUgQzEuMzcxNDA2MjUgMy4zNDU0Njg3NSAwLjY5NTkzNzUgMy4xNzUzMTI1IDAgMyBDMCAyLjAxIDAgMS4wMiAwIDAgWiAiIGZpbGw9IiMyMTI5NjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2LDU0KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjYzIDAgNy4yNiAwIDExIDAgQzE1IDkuNjI1IDE1IDkuNjI1IDE1IDEzIEMxNS42NiAxMyAxNi4zMiAxMyAxNyAxMyBDMTcuMTkzMzU5MzggMTIuMzk2NzE4NzUgMTcuMzg2NzE4NzUgMTEuNzkzNDM3NSAxNy41ODU5Mzc1IDExLjE3MTg3NSBDMTcuODQ2MzI4MTIgMTAuMzcyNjU2MjUgMTguMTA2NzE4NzUgOS41NzM0Mzc1IDE4LjM3NSA4Ljc1IEMxOC43NTc4NTE1NiA3LjU2NjY0MDYyIDE4Ljc1Nzg1MTU2IDcuNTY2NjQwNjIgMTkuMTQ4NDM3NSA2LjM1OTM3NSBDMjAgNCAyMCA0IDIyIDAgQzI1LjYzIDAgMjkuMjYgMCAzMyAwIEMzMS42MTIzNzc3OCA0LjQ4OTM2NjAxIDMwLjA5OTAyNzU4IDguODM1MTMyMDUgMjguMjA3MDMxMjUgMTMuMTM2NzE4NzUgQzI3LjcyNjY1NDA1IDE0LjI0Mjg1NTIyIDI3LjcyNjY1NDA1IDE0LjI0Mjg1NTIyIDI3LjIzNjU3MjI3IDE1LjM3MTMzNzg5IEMyNi41ODgzNzkzNiAxNi44NTIwMjc5OSAyNS45MjY0NjI4MyAxOC4zMjY4MDAwNiAyNS4yNDk3NTU4NiAxOS43OTQ2Nzc3MyBDMjEuMjM0Nzg2MTQgMjkuMDI3NTEyNzMgMjUuMDc1MDY3NzkgMzYuMzYzMTg5NTkgMjguNTYyNSA0NS4yNSBDMjkuNDAxNTk1MTQgNDcuMzk5MzA1OTEgMzAuMjM2NDQwNzggNDkuNTUwMjc3MTYgMzEuMDY2NDA2MjUgNTEuNzAzMTI1IEMzMS40MzcwOTIyOSA1Mi42NDgzMzAwOCAzMS44MDc3NzgzMiA1My41OTM1MzUxNiAzMi4xODk2OTcyNyA1NC41NjczODI4MSBDMzMgNTcgMzMgNTcgMzMgNjAgQzMxLjU2MTYzMjQ5IDU5Ljg4NTQxMzA3IDMwLjEyNDI5MDM0IDU5Ljc1NzkwODg0IDI4LjY4NzUgNTkuNjI1IEMyNy44ODY5OTIxOSA1OS41NTUzOTA2MyAyNy4wODY0ODQzOCA1OS40ODU3ODEyNSAyNi4yNjE3MTg3NSA1OS40MTQwNjI1IEMyNCA1OSAyNCA1OSAyMSA1NyBDMTkuNjEzMjgxMjUgNTMuOTYwOTM3NSAxOS42MTMyODEyNSA1My45NjA5Mzc1IDE4LjMxMjUgNTAuMzc1IEMxNy44NzU1MDc4MSA0OS4xODY0ODQzNyAxNy40Mzg1MTU2MyA0Ny45OTc5Njg3NSAxNi45ODgyODEyNSA0Ni43NzM0Mzc1IEMxNi42NjIxNDg0NCA0NS44NTgyMDMxMyAxNi4zMzYwMTU2MyA0NC45NDI5Njg3NSAxNiA0NCBDMTQuMjExNzgyMjYgNDYuNjgyMzI2NjEgMTIuNzk4NTczOTYgNDkuMzAyODg5NjEgMTEuMzc1IDUyLjE4NzUgQzEwLjkyODk4NDM4IDUzLjA4ODU1NDY5IDEwLjQ4Mjk2ODc1IDUzLjk4OTYwOTM4IDEwLjAyMzQzNzUgNTQuOTE3OTY4NzUgQzkuNjg1NzAzMTIgNTUuNjA1MDM5MDYgOS4zNDc5Njg3NSA1Ni4yOTIxMDkzNyA5IDU3IEM1LjcgNTYuNjcgMi40IDU2LjM0IC0xIDU2IEMtMC4zOTQ5ODQ5MyA0OS4xNzY3NzQ1NCAyLjkyNjY1MjAyIDQzLjQ2Njc3Nzg3IDUuOTM3NSAzNy40MzE2NDA2MiBDOC40NDU2MTQ0IDMyLjE0NzgyNjM3IDkuNzA2Nzk0NDIgMjguODM0MjUxNjYgOCAyMyBDNi43NTQ5MDE0NiAxOS41MzQxMTc5NSA1LjM3Mjc0NjExIDE2LjE0MTA0NzgxIDMuOTM3NSAxMi43NSBDMy4xOTE5Mjc4NyAxMC45NzU5MjA2OSAyLjQ1MDgyOTQ5IDkuMTk5OTUyNjcgMS43MTQ4NDM3NSA3LjQyMTg3NSBDMS4zODYwNTIyNSA2LjY0NDI0ODA1IDEuMDU3MjYwNzQgNS44NjY2MjEwOSAwLjcxODUwNTg2IDUuMDY1NDI5NjkgQzAgMyAwIDMgMCAwIFogIiBmaWxsPSIjRDgxRTI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMTgzLDUyKSIvPgo8cGF0aCBkPSJNMCAwIEMtMC42NiAzLjYzIC0xLjMyIDcuMjYgLTIgMTEgQy0yLjgyNSAxMC44MzUgLTMuNjUgMTAuNjcgLTQuNSAxMC41IEMtMTEuNDA5NDk0MjQgOS40MzI1NTU0MyAtMTEuNDA5NDk0MjQgOS40MzI1NTU0MyAtMTggMTEgQy0xNy45MDQ4MDU0NiAxMi44OTU3NjM2NiAtMTcuOTA0ODA1NDYgMTIuODk1NzYzNjYgLTE3IDE1IEMtMTQuNTcyODYxMyAxNi44NzM4MTgyMSAtMTQuNTcyODYxMyAxNi44NzM4MTgyMSAtMTEuNjI1IDE4LjUgQy03LjkzODczNzE5IDIwLjYzOTc4MzE2IC01LjIyOTM2OTIyIDIyLjMxNTc1MDIyIC0zIDI2IEMtMS41MDg4MTc1MSAzMS42NDUxOTA4NSAtMi4xNzg0MTgzNiAzNC45MjExNTMwNiAtNSA0MCBDLTkuMzQ2NDcyNTcgNDUuMTQ3MTM4NTcgLTEzLjQ5MjA4MjkgNDcuMDc2ODA4NDEgLTIwLjEyNSA0Ny43NSBDLTI1Ljk4NTQzMDQyIDQ4LjIyMDQyOTExIC0zMS4zMDM1NDk3NiA0Ny4zMzMyMTE3NiAtMzcgNDYgQy0zOC4wOTg5ODcwMiA0Mi43MDMwMzg5NSAtMzcuODcxMjQ0NDQgNDEuNTk1MDUwOTcgLTM3LjA2MjUgMzguMzEyNSBDLTM2Ljg2Nzg1MTU2IDM3LjUwNDI1NzgxIC0zNi42NzMyMDMxMyAzNi42OTYwMTU2MyAtMzYuNDcyNjU2MjUgMzUuODYzMjgxMjUgQy0zNi4zMTY2Nzk2OSAzNS4yNDgzOTg0NCAtMzYuMTYwNzAzMTIgMzQuNjMzNTE1NjMgLTM2IDM0IEMtMzQuODQ1IDM0LjMzIC0zMy42OSAzNC42NiAtMzIuNSAzNSBDLTI4LjE4MjA3NzU3IDM2LjA3MzcyODQ5IC0yNC40NDM3NDM0NCAzNi4zMDEyNzA3NCAtMjAgMzYgQy0xOS4wMSAzNS4zNCAtMTguMDIgMzQuNjggLTE3IDM0IEMtMTcuMTc4MjU1OTkgMzIuMDY3MDg1MjEgLTE3LjE3ODI1NTk5IDMyLjA2NzA4NTIxIC0xOCAzMCBDLTE5LjkwMzM3ODEzIDI4LjYwODcxNTU2IC0xOS45MDMzNzgxMyAyOC42MDg3MTU1NiAtMjIuMjUgMjcuNTYyNSBDLTMxLjA3MTA4MzE3IDIyLjkxMzE3MTEzIC0zMS4wNzEwODMxNyAyMi45MTMxNzExMyAtMzIuNjYwMTU2MjUgMTcuOTI5Njg3NSBDLTMzLjUwOTcyNjg3IDEzLjA2MzIxNTAxIC0zMy4wODExMzgwMSA5LjYxMDg4NDM3IC0zMC4yOTI5Njg3NSA1LjUgQy0yMi4zNjg4Mzc3IC0zLjY5Mjk0OTYyIC0xMC42NjIyMzUzMyAtMi42NjU1NTg4MyAwIDAgWiAiIGZpbGw9IiMyMjM5ODUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0Niw1NSkiLz4KPHBhdGggZD0iTTAgMCBDNC4yNTM4MDEzOCAxLjUxOTIxNDc4IDUuODUwNjA1NjkgNC4xMzEwOTAyNCA4IDggQzEwLjIxNjIxNjM0IDE0LjEzODE3MjIyIDExLjE3ODUwNDM3IDIwLjIzMzA3NjcgOC41NjI1IDI2LjM3NSBDNyAyOSA3IDI5IDYgMzAgQzMuNjM2NzE4NzUgMzAuMjk2ODc1IDMuNjM2NzE4NzUgMzAuMjk2ODc1IDEgMzAgQy0wLjczMDQ2ODc1IDI4LjM5MDYyNSAtMC43MzA0Njg3NSAyOC4zOTA2MjUgLTIuMTg3NSAyNi4yNSBDLTIuOTIwMzMyMDMgMjUuMjA1ODU5MzggLTIuOTIwMzMyMDMgMjUuMjA1ODU5MzggLTMuNjY3OTY4NzUgMjQuMTQwNjI1IEMtNC45MTMwODMwNCAyMi4xMzk2Nzg4OCAtNS45ODkwNDQ2MiAyMC4xMjczMTg0MyAtNyAxOCBDLTcuMTk5MTYwMTYgMTkuMjY0NTcwMzEgLTcuMTk5MTYwMTYgMTkuMjY0NTcwMzEgLTcuNDAyMzQzNzUgMjAuNTU0Njg3NSBDLTcuNTc4OTQ1MzEgMjEuNjUwMzkwNjIgLTcuNzU1NTQ2ODggMjIuNzQ2MDkzNzUgLTcuOTM3NSAyMy44NzUgQy04LjExMTUyMzQ0IDI0Ljk2NTU0Njg4IC04LjI4NTU0Njg4IDI2LjA1NjA5Mzc1IC04LjQ2NDg0Mzc1IDI3LjE3OTY4NzUgQy05IDMwIC05IDMwIC0xMCAzMiBDLTExLjg3NSAzMS43NSAtMTEuODc1IDMxLjc1IC0xNCAzMSBDLTE1LjI1IDI4LjkzNzUgLTE1LjI1IDI4LjkzNzUgLTE2IDI3IEMtMTYuNDMzMTI1IDI3LjQ3NDM3NSAtMTYuODY2MjUgMjcuOTQ4NzUgLTE3LjMxMjUgMjguNDM3NSBDLTIxLjI2ODUzMTg1IDMyLjEwMDQ5MjQ1IC0yNi43NTQ4NDI1IDMxLjMyNjM3NjY4IC0zMS44MjAzMTI1IDMxLjI4MTI1IEMtMzYuMjA3MDY0MDkgMzAuODkzMjMyNjYgLTM3LjkwMzMwOTI4IDMwLjA5NjY5MDcyIC00MSAyNyBDLTQyLjU2MjUgMjQuNSAtNDIuNTYyNSAyNC41IC00MyAyMiBDLTQxLjYyNSAxOS42ODc1IC00MS42MjUgMTkuNjg3NSAtNDAgMTggQy00MS4zMiAxNy4wMSAtNDIuNjQgMTYuMDIgLTQ0IDE1IEMtNDQgMTEuNzUgLTQ0IDExLjc1IC00MyA4IEMtMzcuODIzNzMwOTQgMy44MDUyMDc0OSAtMzIuMDE2MTEwNTQgMy40NTA1OTcyMiAtMjUuNjI1IDMuNjg3NSBDLTI0LjgxOTMzNTk0IDMuNjk3MTY3OTcgLTI0LjAxMzY3MTg4IDMuNzA2ODM1OTQgLTIzLjE4MzU5Mzc1IDMuNzE2Nzk2ODggQy0xNy4zNDEzMjczMSAzLjgyOTMzNjM1IC0xNy4zNDEzMjczMSAzLjgyOTMzNjM1IC0xNSA1IEMtMTUuMzEyNSA2LjkzNzUgLTE1LjMxMjUgNi45Mzc1IC0xNiA5IEMtMjAuMjg5NzAxMzQgMTAuNDI5OTAwNDUgLTI0LjU3MTM0MzI0IDEwLjQzODEyMTc2IC0yOS4wNjY0MDYyNSAxMC43MTg3NSBDLTMxLjkzMTY1NzQ2IDEwLjgxNTkwNjYxIC0zMS45MzE2NTc0NiAxMC44MTU5MDY2MSAtMzQgMTIgQy0zMy4wMzU3ODEyNSAxMi4xMDk1NzAzMSAtMzIuMDcxNTYyNSAxMi4yMTkxNDA2MiAtMzEuMDc4MTI1IDEyLjMzMjAzMTI1IEMtMjkuODE0ODQzNzUgMTIuNDkwNTg1OTQgLTI4LjU1MTU2MjUgMTIuNjQ5MTQwNjMgLTI3LjI1IDEyLjgxMjUgQy0yNS4zNzA1NDY4NyAxMy4wMzg3MzA0NyAtMjUuMzcwNTQ2ODcgMTMuMDM4NzMwNDcgLTIzLjQ1MzEyNSAxMy4yNjk1MzEyNSBDLTIwLjA1NDQ1OTUzIDEzLjk4ODQ3OTcxIC0xOC40MjUxMDM5MSAxNC41NjkwMDk5MSAtMTYgMTcgQy0xNS42NyAxNy45OSAtMTUuMzQgMTguOTggLTE1IDIwIEMtMTQuODc4ODI4MTMgMTkuMzI0NTMxMjUgLTE0Ljc1NzY1NjI1IDE4LjY0OTA2MjUgLTE0LjYzMjgxMjUgMTcuOTUzMTI1IEMtMTQuNDY1MjM0MzggMTcuMDYxMDkzNzUgLTE0LjI5NzY1NjI1IDE2LjE2OTA2MjUgLTE0LjEyNSAxNS4yNSBDLTEzLjk2MjU3ODEzIDE0LjM2ODI4MTI1IC0xMy44MDAxNTYyNSAxMy40ODY1NjI1IC0xMy42MzI4MTI1IDEyLjU3ODEyNSBDLTEzLjAzMjAzNzM2IDEwLjEzMDUyMjU2IC0xMi4yMjAwMjg4MyA4LjE5NDAwMTQzIC0xMSA2IEMtOC43Njk1MzEyNSA2LjEyMTA5Mzc1IC04Ljc2OTUzMTI1IDYuMTIxMDkzNzUgLTYgNyBDLTMuNzYxNzE4NzUgOS43MjI2NTYyNSAtMy43NjE3MTg3NSA5LjcyMjY1NjI1IC0xLjY4NzUgMTMuMDYyNSBDLTAuOTkwMTE3MTkgMTQuMTY3MjI2NTYgLTAuMjkyNzM0MzggMTUuMjcxOTUzMTIgMC40MjU3ODEyNSAxNi40MTAxNTYyNSBDMS4yMDUwMTk1MyAxNy42OTIxMjg5MSAxLjIwNTAxOTUzIDE3LjY5MjEyODkxIDIgMTkgQzEuODAwODM5ODQgMTcuODA1MDM5MDYgMS44MDA4Mzk4NCAxNy44MDUwMzkwNiAxLjU5NzY1NjI1IDE2LjU4NTkzNzUgQzEuMDY1MTA0MTcgMTMuMzkwNjI1IDAuNTMyNTUyMDggMTAuMTk1MzEyNSAwIDcgQy0wLjIwNzUzOTA2IDUuODk5MTQwNjMgLTAuNDE1MDc4MTMgNC43OTgyODEyNSAtMC42Mjg5MDYyNSAzLjY2NDA2MjUgQy0wLjc1MTM2NzE5IDIuNzg0OTIxODcgLTAuODczODI4MTMgMS45MDU3ODEyNSAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogTS0yOCAxOCBDLTI2LjE4Nzc3NDY2IDIwLjA2MjQ5OTQgLTI2LjE4Nzc3NDY2IDIwLjA2MjQ5OTQgLTI0IDIyIEMtMjMuMDEgMjIgLTIyLjAyIDIyIC0yMSAyMiBDLTIxLjMzIDIxLjAxIC0yMS42NiAyMC4wMiAtMjIgMTkgQy0yNC45NyAxOC41MDUgLTI0Ljk3IDE4LjUwNSAtMjggMTggWiBNLTM5IDIyIEMtMzkgMjIuNjYgLTM5IDIzLjMyIC0zOSAyNCBDLTM2LjAzIDI0LjMzIC0zMy4wNiAyNC42NiAtMzAgMjUgQy0zMi4zNTk2ODc0NCAyMi45MDI1MDAwNSAtMzMuNTQ2MTY5OTQgMjIuMDMwOTQyOTYgLTM2Ljc1IDIxLjgxMjUgQy0zNy40OTI1IDIxLjg3NDM3NSAtMzguMjM1IDIxLjkzNjI1IC0zOSAyMiBaICIgZmlsbD0iIzIyMUUyMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjIwLDY3KSIvPgo8cGF0aCBkPSJNMCAwIEMyLjA1NDY4NzUgLTAuMTk5MjE4NzUgMi4wNTQ2ODc1IC0wLjE5OTIxODc1IDUuODY3MTg3NSAwLjM2MzI4MTI1IEM4LjI4Mjg5NDcyIDIuNDI4NzM2NjggMTAuMDk2NDE2NDkgNC43MzM5NTQ2IDExLjg2NzE4NzUgNy4zNjMyODEyNSBDMTIuMTQ5NDkyMTkgNi44NDYzNjcxOSAxMi40MzE3OTY4NyA2LjMyOTQ1MzEzIDEyLjcyMjY1NjI1IDUuNzk2ODc1IEMxNC4yNzE2ODgxMyAzLjQ3NTU5ODQ4IDE1LjU3MTg3NDIgMS45NzEyNTAyOCAxNy44NjcxODc1IDAuMzYzMjgxMjUgQzI2LjQ3NDM3MzUgLTAuNzg0MzQzNTUgMzQuOTQxNzAyNzcgMi4yOTMwNDg0MyA0Mi44NjcxODc1IDUuMzYzMjgxMjUgQzQxLjE2MTc1MzAxIDkuMTA0MjM0MzIgMzkuMjkzODYwOCAxMS4wMjMxMTQxMiAzNS44NjcxODc1IDEzLjM2MzI4MTI1IEMzNC44NzcxODc1IDEzLjM2MzI4MTI1IDMzLjg4NzE4NzUgMTMuMzYzMjgxMjUgMzIuODY3MTg3NSAxMy4zNjMyODEyNSBDMzIuMjA3MTg3NSAxMi4zNzMyODEyNSAzMS41NDcxODc1IDExLjM4MzI4MTI1IDMwLjg2NzE4NzUgMTAuMzYzMjgxMjUgQzI4LjY3MjY0MDY5IDkuNzgzMzQ0MjYgMjguNjcyNjQwNjkgOS43ODMzNDQyNiAyNi4yNDIxODc1IDkuNjc1NzgxMjUgQzI1LjQyNDkyMTg4IDkuNjEwMDM5MDYgMjQuNjA3NjU2MjUgOS41NDQyOTY4OCAyMy43NjU2MjUgOS40NzY1NjI1IEMyMi44MjU4OTg0NCA5LjQyMDQ4ODI4IDIyLjgyNTg5ODQ0IDkuNDIwNDg4MjggMjEuODY3MTg3NSA5LjM2MzI4MTI1IEMyMS43NTg4NzYwNCA5Ljk5OTk5MjUyIDIxLjY1MDU2NDU4IDEwLjYzNjcwMzggMjEuNTM4OTcwOTUgMTEuMjkyNzA5MzUgQzIwLjQxMzg1NTQzIDE3Ljg5NjI5MTI1IDE5LjI3NjQ4MDM1IDI0LjQ5NzY3NjE0IDE4LjEzMTgzNTk0IDMxLjA5NzkwMDM5IEMxNy43MDU4MDczNiAzMy41NjQxNTA1NiAxNy4yODI5NDkwNyAzNi4wMzA5NTA1MSAxNi44NjMyODEyNSAzOC40OTgyOTEwMiBDMTYuMjYwODYwODcgNDIuMDM2ODAwMzYgMTUuNjQ3MjEwNTMgNDUuNTczMjAwOSAxNS4wMzEyNSA0OS4xMDkzNzUgQzE0Ljg0NDcwODU2IDUwLjIxOTc3NjQ2IDE0LjY1ODE2NzExIDUxLjMzMDE3NzkyIDE0LjQ2NTk3MjkgNTIuNDc0MjI3OTEgQzE0LjI4NTkzNzE5IDUzLjQ5NTIxMDcyIDE0LjEwNTkwMTQ5IDU0LjUxNjE5MzU0IDEzLjkyMDQxMDE2IDU1LjU2ODExNTIzIEMxMy42ODcyNDU5NCA1Ni45MjM3OTg2IDEzLjY4NzI0NTk0IDU2LjkyMzc5ODYgMTMuNDQ5MzcxMzQgNTguMzA2ODY5NTEgQzEzLjI1NzI1MDY3IDU4Ljk4NTQ4NTM4IDEzLjA2NTEzIDU5LjY2NDEwMTI2IDEyLjg2NzE4NzUgNjAuMzYzMjgxMjUgQzExLjg3NzE4NzUgNjAuODU4MjgxMjUgMTEuODc3MTg3NSA2MC44NTgyODEyNSAxMC44NjcxODc1IDYxLjM2MzI4MTI1IEM5LjU4MDQ1Mjg0IDU0LjQ1OTA5MjQzIDguMjk5Mjc3MDIgNDcuNTUzODg4ODYgNy4wMjE5NzI2NiA0MC42NDc5NDkyMiBDNi41ODY3MzE3NyAzOC4yOTg0Mjc0MSA2LjE1MDIxNTc5IDM1Ljk0OTE0MTQ1IDUuNzEyNDAyMzQgMzMuNjAwMDk3NjYgQzUuMDgzNTYyMzcgMzAuMjI0ODk1MzcgNC40NTkzMDI5NCAyNi44NDg4NzMzNSAzLjgzNTkzNzUgMjMuNDcyNjU2MjUgQzMuNTQwNjQxNDggMjEuODk1OTAxMTggMy41NDA2NDE0OCAyMS44OTU5MDExOCAzLjIzOTM3OTg4IDIwLjI4NzI5MjQ4IEMzLjA1OTE5MzEyIDE5LjMwNjU3Nzc2IDIuODc5MDA2MzUgMTguMzI1ODYzMDQgMi42OTMzNTkzOCAxNy4zMTU0Mjk2OSBDMi41MzM0NzUzNCAxNi40NTM4MzI0IDIuMzczNTkxMzEgMTUuNTkyMjM1MTEgMi4yMDg4NjIzIDE0LjcwNDUyODgxIEMxLjg2NzE4NzUgMTIuMzYzMjgxMjUgMS44NjcxODc1IDEyLjM2MzI4MTI1IDEuODY3MTg3NSA4LjM2MzI4MTI1IEMtMS43NjI4MTI1IDkuMDIzMjgxMjUgLTUuMzkyODEyNSA5LjY4MzI4MTI1IC05LjEzMjgxMjUgMTAuMzYzMjgxMjUgQy05LjQ2MjgxMjUgMTEuMzUzMjgxMjUgLTkuNzkyODEyNSAxMi4zNDMyODEyNSAtMTAuMTMyODEyNSAxMy4zNjMyODEyNSBDLTE1LjA4OTc3ODMxIDEyLjEyNDAzOTggLTE3LjI0OTM5NzE2IDEwLjU3NzUwMzY3IC0yMC4xMzI4MTI1IDYuMzYzMjgxMjUgQy0xMy40NzU0Nzc3IDMuMTIxMTc0OTQgLTcuMjY2ODA3MzkgMS4yMzc3NTI5MSAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3NzUuMTMyODEyNSwzNS42MzY3MTg3NSkiLz4KPHBhdGggZD0iTTAgMCBDOC41OCAwIDE3LjE2IDAgMjYgMCBDMjYgMy4zIDI2IDYuNiAyNiAxMCBDMjAuNzIgMTAgMTUuNDQgMTAgMTAgMTAgQzEwIDEzLjYzIDEwIDE3LjI2IDEwIDIxIEMxMy45NiAyMSAxNy45MiAyMSAyMiAyMSBDMjIgMjQuMyAyMiAyNy42IDIyIDMxIEMxOC4wNCAzMSAxNC4wOCAzMSAxMCAzMSBDMTAgMzUuMjkgMTAgMzkuNTggMTAgNDQgQzE3LjkyIDQzLjUwNSAxNy45MiA0My41MDUgMjYgNDMgQzI2IDQ2LjMgMjYgNDkuNiAyNiA1MyBDMjIuODY0NjI0MDIgNTQuMDQ1MTI1MzMgMjAuMjI4NTQ5MDIgNTQuMzE1Mzc3MTMgMTYuOTM3NSA1NC41NjI1IEMxNS44NzQwMjM0NCA1NC42NDYyODkwNiAxNC44MTA1NDY4OCA1NC43MzAwNzgxMyAxMy43MTQ4NDM3NSA1NC44MTY0MDYyNSBDOS4xNDgzOTI5NSA1NS4wNDIwODc4NCA0LjU3MjAyNDE4IDU1IDAgNTUgQzAgMzYuODUgMCAxOC43IDAgMCBaICIgZmlsbD0iI0Q4MUUyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAzNSw1MikiLz4KPHBhdGggZD0iTTAgMCBDMS45MTAxNTYyNSAwLjgyMDMxMjUgMS45MTAxNTYyNSAwLjgyMDMxMjUgNC41MzUxNTYyNSAyLjMyMDMxMjUgQzQuNTM1MTU2MjUgNC45NjAzMTI1IDQuNTM1MTU2MjUgNy42MDAzMTI1IDQuNTM1MTU2MjUgMTAuMzIwMzEyNSBDMS43NzIzOTQ0OCA5Ljc5NzYyNzg0IC0wLjc5MDkzMTM1IDkuMjExNjE2NjMgLTMuNDY0ODQzNzUgOC4zMjAzMTI1IEMtNS4wMjYwMjgwMyA4LjI1MjkwMzg1IC02LjU4OTg2ODk1IDguMjM1MTY3OTQgLTguMTUyMzQzNzUgOC4yNTc4MTI1IEMtOC45NjA1ODU5NCA4LjI2NjgzNTk0IC05Ljc2ODgyODEzIDguMjc1ODU5MzcgLTEwLjYwMTU2MjUgOC4yODUxNTYyNSBDLTExLjIxNjQ0NTMxIDguMjk2NzU3ODEgLTExLjgzMTMyODEzIDguMzA4MzU5MzggLTEyLjQ2NDg0Mzc1IDguMzIwMzEyNSBDLTEyLjc5NDg0Mzc1IDkuMzEwMzEyNSAtMTMuMTI0ODQzNzUgMTAuMzAwMzEyNSAtMTMuNDY0ODQzNzUgMTEuMzIwMzEyNSBDLTEyLjU4NDQxNDA2IDExLjcwNzAzMTI1IC0xMS43MDM5ODQzNyAxMi4wOTM3NSAtMTAuNzk2ODc1IDEyLjQ5MjE4NzUgQy05LjYzNTQyOTY5IDEzLjAxMjk2ODc1IC04LjQ3Mzk4NDM4IDEzLjUzMzc1IC03LjI3NzM0Mzc1IDE0LjA3MDMxMjUgQy01LjU1NDUxMTcyIDE0LjgzNjAxNTYzIC01LjU1NDUxMTcyIDE0LjgzNjAxNTYzIC0zLjc5Njg3NSAxNS42MTcxODc1IEMwLjI0MTM3MzEyIDE3LjY4MTI4NjE5IDMuNTY0NTg1NyAxOS42ODc5ODkzIDUuOTEwMTU2MjUgMjMuNjMyODEyNSBDNi45OTYzOTk0NiAyOC4zMDM2NTgzIDYuMzE4NTczOSAzMS44ODQwNDY4MSA0LjAzNTE1NjI1IDM2LjA3MDMxMjUgQy0wLjE5NDIwMDc5IDM5Ljg3NjczMzg0IC00LjYxMjE4MDA4IDQxLjI1NzA5NTU4IC0xMC4yODUxNTYyNSA0MS4zODI4MTI1IEMtMTUuNjc4ODQ0MzEgNDEuMDMwMDkxNzUgLTE5Ljg2NjQ0MTQ4IDQwLjE3ODc3ODc4IC0yNC40NjQ4NDM3NSAzNy4zMjAzMTI1IEMtMjQuNDY0ODQzNzUgMzQuMDIwMzEyNSAtMjQuNDY0ODQzNzUgMzAuNzIwMzEyNSAtMjQuNDY0ODQzNzUgMjcuMzIwMzEyNSBDLTIzLjE2NTQ2ODc1IDI3Ljk4MDMxMjUgLTIxLjg2NjA5Mzc1IDI4LjY0MDMxMjUgLTIwLjUyNzM0Mzc1IDI5LjMyMDMxMjUgQy0xNS41OTQwNTE2OSAzMS41NDQyMDkyNCAtMTEuODI1MTI2MDMgMzEuNjYwNjQ3ODggLTYuNDY0ODQzNzUgMzEuMzIwMzEyNSBDLTYuNDY0ODQzNzUgMzAuMDAwMzEyNSAtNi40NjQ4NDM3NSAyOC42ODAzMTI1IC02LjQ2NDg0Mzc1IDI3LjMyMDMxMjUgQy03LjQxNzQ2MDk0IDI2Ljk1Njc5Njg3IC04LjM3MDA3ODEyIDI2LjU5MzI4MTI1IC05LjM1MTU2MjUgMjYuMjE4NzUgQy0yMi40OTU3MTQwNSAyMS4wMzAxNzczIC0yMi40OTU3MTQwNSAyMS4wMzAxNzczIC0yNS40NjQ4NDM3NSAxNS4zMjAzMTI1IEMtMjYuMjE3MDIwNTkgMTEuNDI4OTQ4NjQgLTI1LjgyMjM5NTM5IDguMjE0MTkxNTkgLTI0LjMzOTg0Mzc1IDQuNTA3ODEyNSBDLTE4LjQ5MTUxODczIC0yLjMxNTIzMzM1IC04LjEzNzk4MzIgLTIuMjQ0MDcxNDQgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTY5LjQ2NDg0Mzc1LDQwLjY3OTY4NzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzguOTEgMCAxNy44MiAwIDI3IDAgQzI3IDMuMyAyNyA2LjYgMjcgMTAgQzIxLjM5IDEwIDE1Ljc4IDEwIDEwIDEwIEMxMCAxMy42MyAxMCAxNy4yNiAxMCAyMSBDMTQuMjkgMjEgMTguNTggMjEgMjMgMjEgQzIzIDI0LjMgMjMgMjcuNiAyMyAzMSBDMTguNzEgMzEgMTQuNDIgMzEgMTAgMzEgQzEwIDM3LjkzIDEwIDQ0Ljg2IDEwIDUyIEM2LjcgNTIgMy40IDUyIDAgNTIgQzAgMzQuODQgMCAxNy42OCAwIDAgWiAiIGZpbGw9IiNEODFFMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMDEsNTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuOTcgMCA1Ljk0IDAgOSAwIEM5IDEzLjUzIDkgMjcuMDYgOSA0MSBDNS4zNyA0MSAxLjc0IDQxIC0yIDQxIEMtMy4yMTY4NzUgNDEuMjQ3NSAtNC40MzM3NSA0MS40OTUgLTUuNjg3NSA0MS43NSBDLTEwLjMxMDAyNjQxIDQyLjA5ODg2OTkyIC0xMy4zMDg5OTE4NSA0MC43MzUwMDM3OSAtMTcgMzggQy0yMC42ODY4MTg5NSAzMy4xNjEwNTAxMyAtMjAuNjk0NzYzNjEgMjcuODUzMTQ1NTEgLTIwIDIyIEMtMTguNzI2MDcyMzggMTguMzEyMzE0NzcgLTE3Ljc0NDY5MDYyIDE2LjU4MzY3NjQzIC0xNC42ODc1IDE0LjE4NzUgQy05LjYzMTE5NDU5IDExLjk1MzMxODU0IC02LjQ1NjIyNjA3IDExLjkwODc1NDc5IC0xIDEzIEMtMC42NyA4LjcxIC0wLjM0IDQuNDIgMCAwIFogTS05LjQzNzUgMjEuMDYyNSBDLTExLjI1OTI1OTU5IDI0LjQ4NzQwODAyIC0xMS42MzY3NDE4MyAyNi4xNzk1NDkgLTExIDMwIEMtOS40NTY2NDk3MSAzMi45NTA0NzU1MyAtOS40NTY2NDk3MSAzMi45NTA0NzU1MyAtNyAzNSBDLTQuNDE0MTc4NzIgMzUuNTg0MDIxMzMgLTQuNDE0MTc4NzIgMzUuNTg0MDIxMzMgLTIgMzUgQzAuMzI4NjYyMjkgMzMuMTExNTM4MTcgMC4zMjg2NjIyOSAzMy4xMTE1MzgxNyAwLjE5NTMxMjUgMjkuOTYwOTM3NSBDMC4xNzIxMDkzOCAyOC43Nzc1NzgxMiAwLjE0ODkwNjI1IDI3LjU5NDIxODc1IDAuMTI1IDI2LjM3NSBDMC4xMDY5NTMxMyAyNS4xODY0ODQzNyAwLjA4ODkwNjI1IDIzLjk5Nzk2ODc1IDAuMDcwMzEyNSAyMi43NzM0Mzc1IEMwLjA0NzEwOTM4IDIxLjg1ODIwMzEzIDAuMDIzOTA2MjUgMjAuOTQyOTY4NzUgMCAyMCBDLTUuMTAxNDUzNyAxOC41Nzg2MzU2MiAtNS4xMDE0NTM3IDE4LjU3ODYzNTYyIC05LjQzNzUgMjEuMDYyNSBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjEzMSw0MCkiLz4KPHBhdGggZD0iTTAgMCBDOS45IDAgMTkuOCAwIDMwIDAgQzMwIDMuMyAzMCA2LjYgMzAgMTAgQzI2LjcgMTAgMjMuNCAxMCAyMCAxMCBDMjAgMjMuODYgMjAgMzcuNzIgMjAgNTIgQzE1LjA1IDUyLjQ5NSAxNS4wNSA1Mi40OTUgMTAgNTMgQzEwIDM4LjgxIDEwIDI0LjYyIDEwIDEwIEM2LjcgMTAgMy40IDEwIDAgMTAgQzAgNi43IDAgMy40IDAgMCBaICIgZmlsbD0iI0Q4MUUyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA2Niw1MikiLz4KPHBhdGggZD0iTTAgMCBDLTAuNDgxMTQ5MSA1Ljc3Mzc4OTI1IC0yLjE4NDY3MTgxIDkuOTU4NTk4MzYgLTUgMTUgQy00LjMxOTM3NSAxNC4yOTg3NSAtMy42Mzg3NSAxMy41OTc1IC0yLjkzNzUgMTIuODc1IEMtMS45NjMyMDUxNCAxMS45MTE3MTQxMyAtMC45ODM1MTk0NiAxMC45NTM4NjU2MSAwIDEwIEMwLjU1NDI5Njg3IDkuNDYxMTcxODggMS4xMDg1OTM3NSA4LjkyMjM0Mzc1IDEuNjc5Njg3NSA4LjM2NzE4NzUgQzUuMjUwOTM2OCA1LjA4MTYzODE0IDcuODk2NjgzMzIgMi44ODQwMTU1MyAxMyAzIEMxNS4wMDY0OTYwNyA0LjUzNjM3NTAxIDE1Ljg3Mzg5MDQ5IDUuNTg4MTQ4NyAxNi42MTcxODc1IDguMDE1NjI1IEMxNy4yNTE1NjExIDEzLjUxMzUyOTUzIDE2Ljg0OTMwMTA3IDE3LjA2MTIxMTQ3IDE0IDIyIEMxMS4wNTUwNzk0MyAyNS40MDk5MDgwMyA4LjEyMTcwMjE1IDI4LjEzNTQyMDQ2IDQgMzAgQzEuNjY3MTQ1MiAzMC4wNDcyNTM5OSAtMC42NjcyNDM5MyAzMC4wNTE4OTk3MyAtMyAzMCBDLTMuMjY1NTQ2ODggMzEuMDczNzg5MDYgLTMuNTMxMDkzNzUgMzIuMTQ3NTc4MTIgLTMuODA0Njg3NSAzMy4yNTM5MDYyNSBDLTQuMTYxMzk0MjEgMzQuNjkwMTIwMSAtNC41MTgxNjg2NiAzNi4xMjYzMTcxMiAtNC44NzUgMzcuNTYyNSBDLTUuMDQ5MDIzNDQgMzguMjY2OTcyNjYgLTUuMjIzMDQ2ODggMzguOTcxNDQ1MzEgLTUuNDAyMzQzNzUgMzkuNjk3MjY1NjIgQy02LjUxMjk0ODE1IDQ0LjE2MDI0OTk4IC03LjcxMjAxMjE2IDQ4LjU4NDg3MDUyIC05IDUzIEMtMTMuODc1IDUxLjI1IC0xMy44NzUgNTEuMjUgLTE1IDQ5IEMtMTUuODA3NzM2NjkgNDEuNjExMTk1NTcgLTE0LjQ0MzM4Mzc0IDM1LjkyMzE3NjkzIC0xMS44NzEwOTM3NSAyOS4wNDI5Njg3NSBDLTEwLjkzNjk5MDk5IDI1Ljc3OTg5MjMxIC0xMC44OTM4OTA4MiAyMy4yNTE1MDY5MSAtMTEuMDYyNSAxOS44NzUgQy0xMS4zNDcwMDEzMyAxMi4zOTk0ODI0MiAtOC41MjkxMDMxNSA3LjAzNDkyMzc4IC0zLjgxMjUgMS4zNzUgQy0yIDAgLTIgMCAwIDAgWiBNMTAgMTAgQzcuOTU1NDM5NDEgMTIuMTcyNjQ2NTUgNy45NTU0Mzk0MSAxMi4xNzI2NDY1NSA1Ljg3NSAxNC44NzUgQzUuMTUwNTQ2ODggMTUuNzc5OTIxODcgNC40MjYwOTM3NSAxNi42ODQ4NDM3NSAzLjY3OTY4NzUgMTcuNjE3MTg3NSBDMS44MDc5NDc2NiAxOS43ODY1NTgxMSAxLjgwNzk0NzY2IDE5Ljc4NjU1ODExIDIgMjIgQzYuMDE1MzA1MDUgMjEuMDg3NDMwNjcgNy43MTEyODI3NSAyMC4zNDk0OTk4MyAxMC4zNzUgMTcuMTI1IEMxMi4zMDc1Njg0OSAxMy45OTU1NjM5MiAxMi4zMDc1Njg0OSAxMy45OTU1NjM5MiAxMiAxMCBDMTEuMzQgMTAgMTAuNjggMTAgMTAgMTAgWiAiIGZpbGw9IiMyMjFFMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2NSw3MCkiLz4KPHBhdGggZD0iTTAgMCBDMy4zIDAgNi42IDAgMTAgMCBDMTAgMTQuMTkgMTAgMjguMzggMTAgNDMgQzEzLjk2IDQzIDE3LjkyIDQzIDIyIDQzIEMyMy4zMiA0My4zMyAyNC42NCA0My42NiAyNiA0NCBDMjYgNDcuMyAyNiA1MC42IDI2IDU0IEMxMy4xMyA1My41MDUgMTMuMTMgNTMuNTA1IDAgNTMgQzAgMzUuNTEgMCAxOC4wMiAwIDAgWiAiIGZpbGw9IiNEODFFMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMzMsNTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMyAwIDYuNiAwIDEwIDAgQzEwLjMzIDQuNjIgMTAuNjYgOS4yNCAxMSAxNCBDMTIuNTQ2ODc1IDEzLjQ0MzEyNSAxMi41NDY4NzUgMTMuNDQzMTI1IDE0LjEyNSAxMi44NzUgQzE4LjM5OTA1MzgzIDExLjkwOTg5MTA3IDIwLjEwMjI4MDU4IDEyLjEzOTcyNDgyIDI0IDE0IEMyNS45NTA0Njk0MiAxNS42MTQxODE1OSAyNi44NzAxODY5MyAxNi43NDAzNzM4NiAyOCAxOSBDMjguMDcxODE4MjEgMjEuNzE3NjAxMDggMjguMDkyOTk1MDYgMjQuNDA4NTkzODggMjguMDYyNSAyNy4xMjUgQzI4LjA1Nzk4ODI4IDI3Ljg3OTEwMTU2IDI4LjA1MzQ3NjU2IDI4LjYzMzIwMzEyIDI4LjA0ODgyODEyIDI5LjQxMDE1NjI1IEMyOC4wMzcwMzQ5OSAzMS4yNzM0NzEyNyAyOC4wMTkwOTk0MiAzMy4xMzY3NDU1NSAyOCAzNSBDMjMuNTQ1IDM1LjQ5NSAyMy41NDUgMzUuNDk1IDE5IDM2IEMxOC45Mzk0MTQwNiAzNS4wODQ3NjU2MyAxOC44Nzg4MjgxMiAzNC4xNjk1MzEyNSAxOC44MTY0MDYyNSAzMy4yMjY1NjI1IEMxOC43MzI2MTcxOSAzMi4wMzgwNDY4NyAxOC42NDg4MjgxMiAzMC44NDk1MzEyNSAxOC41NjI1IDI5LjYyNSBDMTguNDgxMjg5MDYgMjguNDQxNjQwNjMgMTguNDAwMDc4MTIgMjcuMjU4MjgxMjUgMTguMzE2NDA2MjUgMjYuMDM5MDYyNSBDMTguMTg5MTUwNjQgMjMuMDg0ODEwOTkgMTguMTg5MTUwNjQgMjMuMDg0ODEwOTkgMTcgMjEgQzE1LjMzMzg4MDk1IDIwLjk1NzI3OSAxMy42NjYxNzExNSAyMC45NTkzNjE2OCAxMiAyMSBDMTAuNDUwNDk3MzIgMjIuNTQ5NTAyNjggMTAuNzgzNDQ4MDcgMjQuMDk5OTA1OTQgMTAuNjgzNTkzNzUgMjYuMjUzOTA2MjUgQzEwLjY0MTY5OTIyIDI3LjEwNzkxMDE2IDEwLjU5OTgwNDY5IDI3Ljk2MTkxNDA2IDEwLjU1NjY0MDYyIDI4Ljg0MTc5Njg4IEMxMC41MTczMjQyMiAyOS43Mzk2Mjg5MSAxMC40NzgwMDc4MSAzMC42Mzc0NjA5NCAxMC40Mzc1IDMxLjU2MjUgQzEwLjM5NDMxNjQxIDMyLjQ2NDE5OTIyIDEwLjM1MTEzMjgxIDMzLjM2NTg5ODQ0IDEwLjMwNjY0MDYyIDM0LjI5NDkyMTg4IEMxMC4yMDAyMjAxNiAzNi41Mjk3NTE1NiAxMC4wOTk1NzUxOSAzOC43NjQ4NTQ4NiAxMCA0MSBDNi43IDQxIDMuNCA0MSAwIDQxIEMwIDI3LjQ3IDAgMTMuOTQgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDA1LDQwKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzkuOTk1NDE0NiAxNi4wODQxMjA5OCA2Ljc1MDQyOTQ2IDMyLjA3MjY0NDI3IDMgNDggQy0xLjI5IDQ4IC01LjU4IDQ4IC0xMCA0OCBDLTkuMzUyMDc5OTYgNDIuMjQzMTY0OTggLTguMzkyNDE1OTEgMzYuNjQxMDIxMyAtNy4xODc1IDMwLjk3NjU2MjUgQy03LjAxMzcxODI2IDMwLjE0OTE3NTcyIC02LjgzOTkzNjUyIDI5LjMyMTc4ODk0IC02LjY2MDg4ODY3IDI4LjQ2OTMyOTgzIEMtNi4yOTYwMjY4NiAyNi43MzYyMTU3NCAtNS45Mjk1NTA3IDI1LjAwMzQ0MDc3IC01LjU2MTUyMzQ0IDIzLjI3MDk5NjA5IEMtNC45OTczNjgxOSAyMC42MTI1OTg0NyAtNC40Mzk3NTU1NCAxNy45NTI4ODU2NSAtMy44ODI4MTI1IDE1LjI5Mjk2ODc1IEMtMy41MjY0Mjg0MSAxMy42MDQwODUwMSAtMy4xNjk2NzA5OSAxMS45MTUyOCAtMi44MTI1IDEwLjIyNjU2MjUgQy0yLjY0NTgwODExIDkuNDMwNzc3ODkgLTIuNDc5MTE2MjEgOC42MzQ5OTMyOSAtMi4zMDczNzMwNSA3LjgxNTA5Mzk5IEMtMS4xMTUxOTMxMyAyLjIzMDM4NjI2IC0xLjExNTE5MzEzIDIuMjMwMzg2MjYgMCAwIFogIiBmaWxsPSIjMjIzMTc1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5OCw1NCkiLz4KPHBhdGggZD0iTTAgMCBDMCAzIDAgMyAtMSA1IEMtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAwIDE2IEMwLjc1NDE0MjM1IDIyLjQ5MDU2OTM3IC0wLjI2NzY1MDE5IDI1LjU4MjA3Mjg1IC00IDMxIEMtMy45Mjc0OTIxNCAzNC41NTI4ODQ5NCAtMy4zMTc3NDE2NCAzNi40OTE2MTMzNyAtMS40Mzc1IDM5LjUgQzAuNDMyMjMyNTQgNDIuNzUxNzA4NzYgMC40OTI4MjA0OCA0NC4yNjg2NDQ5NCAwIDQ4IEMtMS4xNzkwNDA1IDUxLjQwNDQxNTYzIC0yLjU0MTk2MzU0IDU0LjcwNjM5OTc4IC00IDU4IEMtMTMuMDQyMzMyOTIgNTUuOTEzMzA3NzkgLTE5LjIzMTExMzk5IDQ5LjIyNDI2NTc5IC0yNC42ODc1IDQyLjExMzI4MTI1IEMtMjUuOTc2NzY1MDIgNDAuMDM3NDExMDkgLTI2LjU2ODUwMjU3IDM4LjM4OTQxNzA0IC0yNyAzNiBDLTIyLjM3NSAzMyAtMjIuMzc1IDMzIC0xOSAzMyBDLTE5IDMzLjk5IC0xOSAzNC45OCAtMTkgMzYgQy0xNi4wMjk4MjMwNiAzNS4zNzE4OTgyNyAtMTYuMDI5ODIzMDYgMzUuMzcxODk4MjcgLTEzIDM0IEMtMTEuODAxNjE3OTEgMzEuNjcxNDU1MzcgLTExLjgwMTYxNzkxIDMxLjY3MTQ1NTM3IC0xMSAyOSBDLTEwLjMyMzI0MjE5IDI4LjI5NDg4MjgxIC05LjY0NjQ4NDM4IDI3LjU4OTc2NTYyIC04Ljk0OTIxODc1IDI2Ljg2MzI4MTI1IEMtNi4yODY2NTkzNyAyMi45NTIxNDY5MyAtNi42NDc5NDA5OCAyMC4wOTMyNzg3OCAtNi45Mzc1IDE1LjUgQy03LjQ2Nzc4NzQgNi4zMzQ3MzQyNSAtNy40Njc3ODc0IDYuMzM0NzM0MjUgLTQgMiBDLTEuODEyNSAwLjY4NzUgLTEuODEyNSAwLjY4NzUgMCAwIFogIiBmaWxsPSIjMTg3MjRFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ4LDYwKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjIyNzM1OTE0IDUuMDI2MTMzNCA0LjM0Mzc1IDYuNjc1NjQ0OTEgNC4zNDM3NSAxMy41OTc2NTYyNSBDLTEuOTI2MjUgMTMuNTk3NjU2MjUgLTguMTk2MjUgMTMuNTk3NjU2MjUgLTE0LjY1NjI1IDEzLjU5NzY1NjI1IEMtMTIuMzAwNDg3NzkgMTguNzcwMzg3NjYgLTEyLjMwMDQ4Nzc5IDE4Ljc3MDM4NzY2IC04LjUzMTI1IDE5LjU5NzY1NjI1IEMtMy43NTI5OTc1NyAxOS41OTc2NTYyNSAtMC4wNTEzNDIxNSAxOC4zNjE2NzI4MyA0LjM0Mzc1IDE2LjU5NzY1NjI1IEM0LjY1NjI1IDE5LjQxMDE1NjI1IDQuNjU2MjUgMTkuNDEwMTU2MjUgNC4zNDM3NSAyMi41OTc2NTYyNSBDMC45MDEyMjIwNSAyNS45MjU0MzMyNyAtMy40MTQ1NjU0OCAyNi4zMjk5Njg0IC04LjAyMzQzNzUgMjYuNjYwMTU2MjUgQy0xMy42ODcyNjY0IDI2LjUyNTcwMzM0IC0xOC4xMzQxNTE4MiAyNS4xMTk3NTQ0MyAtMjIuMTU2MjUgMjEuMDk3NjU2MjUgQy0yNC43NzM1ODM1MyAxNi43MzU0MzM3IC0yNS4zMTY1NTAzOCAxMi41OTU3NjMyOCAtMjQuNjU2MjUgNy41OTc2NTYyNSBDLTIzLjI5NDg1NjcgMy44NjEyMjM1NSAtMjEuNDAxMzMxNDIgMS4xNzA3OTU4IC0xOC4yMTg3NSAtMS4yNzczNDM3NSBDLTEyLjMxODQ0Njg5IC0zLjg2NzcyMDcyIC01LjI1NTA1Mjk0IC00LjQ0OTQ0MzQxIDAgMCBaIE0tMTMuNjU2MjUgNC41OTc2NTYyNSBDLTEzLjk4NjI1IDUuOTE3NjU2MjUgLTE0LjMxNjI1IDcuMjM3NjU2MjUgLTE0LjY1NjI1IDguNTk3NjU2MjUgQy0xMS4wMjYyNSA4LjU5NzY1NjI1IC03LjM5NjI1IDguNTk3NjU2MjUgLTMuNjU2MjUgOC41OTc2NTYyNSBDLTQuOTgzMjM1NTkgMy42NzQ2NDYzMyAtNC45ODMyMzU1OSAzLjY3NDY0NjMzIC03LjUzMTI1IDIuNjYwMTU2MjUgQy0xMC4yMTA5NzMzNSAyLjU4MTM0MDg2IC0xMS40ODU2NTkxNSAzLjAyNTg0OTA4IC0xMy42NTYyNSA0LjU5NzY1NjI1IFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDkxLjY1NjI1LDU1LjQwMjM0Mzc1KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjUyMDkwNTk1IDQuNTExMTYwNzUgMyA2LjQxMTcwNDg5IDMgMTIuNTYyNSBDLTMuMjcgMTIuNTYyNSAtOS41NCAxMi41NjI1IC0xNiAxMi41NjI1IEMtMTMuNjQ0MjM3NzkgMTcuNzM1MjMxNDEgLTEzLjY0NDIzNzc5IDE3LjczNTIzMTQxIC05Ljg3NSAxOC41NjI1IEMtNS4wOTY3NDc1NyAxOC41NjI1IC0xLjM5NTA5MjE1IDE3LjMyNjUxNjU4IDMgMTUuNTYyNSBDMy4zMTI1IDE4LjM3NSAzLjMxMjUgMTguMzc1IDMgMjEuNTYyNSBDLTAuNDQyNTI3OTUgMjQuODkwMjc3MDIgLTQuNzU4MzE1NDggMjUuMjk0ODEyMTUgLTkuMzY3MTg3NSAyNS42MjUgQy0xNS4wMzEwMTY0IDI1LjQ5MDU0NzA5IC0xOS40Nzc5MDE4MiAyNC4wODQ1OTgxOCAtMjMuNSAyMC4wNjI1IEMtMjYuMTE3MzMzNTMgMTUuNzAwMjc3NDUgLTI2LjY2MDMwMDM4IDExLjU2MDYwNzAzIC0yNiA2LjU2MjUgQy0yNC42Mzg2MDY3IDIuODI2MDY3MyAtMjIuNzQ1MDgxNDIgMC4xMzU2Mzk1NSAtMTkuNTYyNSAtMi4zMTI1IEMtMTIuNjA1NTU1NjYgLTUuMzY2NzY4MjUgLTUuOTgyNDU3MiAtNC44NjA3NDY0OCAwIDAgWiBNLTE1IDMuNTYyNSBDLTE1LjMzIDQuODgyNSAtMTUuNjYgNi4yMDI1IC0xNiA3LjU2MjUgQy0xMi4zNyA3LjU2MjUgLTguNzQgNy41NjI1IC01IDcuNTYyNSBDLTYuMzI2OTg1NTkgMi42Mzk0OTAwOCAtNi4zMjY5ODU1OSAyLjYzOTQ5MDA4IC04Ljg3NSAxLjYyNSBDLTExLjU1NDcyMzM1IDEuNTQ2MTg0NjEgLTEyLjgyOTQwOTE1IDEuOTkwNjkyODMgLTE1IDMuNTYyNSBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE2OSw1Ni40Mzc1KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjMgMCA2LjYgMCAxMCAwIEMxMCAxOC4xNSAxMCAzNi4zIDEwIDU1IEM3LjAzIDU1IDQuMDYgNTUgMSA1NSBDMCA1NCAwIDU0IC0wLjEyMDI1NDUyIDUxLjgyOTY5NjY2IEMtMC4xMTgwMzM5MSA1MC44NzI2MTMwNyAtMC4xMTU4MTMyOSA0OS45MTU1Mjk0OCAtMC4xMTM1MjUzOSA0OC45Mjk0NDMzNiBDLTAuMTEzNDQ5ODYgNDcuODQ4Mzk4MjggLTAuMTEzMzc0MzMgNDYuNzY3MzUzMjEgLTAuMTEzMjk2NTEgNDUuNjUzNTQ5MTkgQy0wLjEwODEzNTIyIDQ0LjQ3NzUyNjQgLTAuMTAyOTczOTQgNDMuMzAxNTAzNiAtMC4wOTc2NTYyNSA0Mi4wODk4NDM3NSBDLTAuMDk2MjQxMyA0MC44OTI2NzIyNyAtMC4wOTQ4MjYzNSAzOS42OTU1MDA3OSAtMC4wOTMzNjg1MyAzOC40NjIwNTEzOSBDLTAuMDg3NzQ5NzkgMzQuNjIwNTA5MzQgLTAuMDc1MTk0MTEgMzAuNzc5MDI0NTcgLTAuMDYyNSAyNi45Mzc1IEMtMC4wNTc0ODc0MSAyNC4zNDA0OTU2MyAtMC4wNTI5MjQwOSAyMS43NDM0OTAzNSAtMC4wNDg4MjgxMiAxOS4xNDY0ODQzOCBDLTAuMDM3Nzc0MjcgMTIuNzY0MzAwNjggLTAuMDIwNDk3MDggNi4zODIxNjAwNyAwIDAgWiAiIGZpbGw9IiNEODFGMjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExNjYsNTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMyAwIDYuNiAwIDEwIDAgQzEwIDAuNjYgMTAgMS4zMiAxMCAyIEMxMC45OSAxLjM0IDExLjk4IDAuNjggMTMgMCBDMTYuMzkyMTAyODcgLTAuNTQ2MTg2MDYgMTkuNjA2NTQzNSAtMC41MzU4MDg5MiAyMyAwIEMyNi42MTk5NTgyMSAyLjY1OTU2MTEzIDI4LjIwNjgzODE3IDQuNjQ4NDIzNTEgMjkgOSBDMjkuMDc4MTg2MzYgMTAuNTEzOTU2OTYgMjkuMTA3ODk5MDkgMTIuMDMwOTM1MDcgMjkuMDk3NjU2MjUgMTMuNTQ2ODc1IEMyOS4wOTQ0MzM1OSAxNC4zOTEyMTA5NCAyOS4wOTEyMTA5NCAxNS4yMzU1NDY4NyAyOS4wODc4OTA2MiAxNi4xMDU0Njg3NSBDMjkuMDc5NTExNzIgMTYuOTc4MTY0MDYgMjkuMDcxMTMyODEgMTcuODUwODU5MzcgMjkuMDYyNSAxOC43NSBDMjkuMDU3OTg4MjggMTkuNjM4MTY0MDYgMjkuMDUzNDc2NTYgMjAuNTI2MzI4MTIgMjkuMDQ4ODI4MTIgMjEuNDQxNDA2MjUgQzI5LjAzNzA3NDIyIDIzLjYyNzYzMzE2IDI5LjAxOTEzOTY2IDI1LjgxMzgyNTI4IDI5IDI4IEMyNS43IDI4IDIyLjQgMjggMTkgMjggQzE4LjUwNSAxOC4xIDE4LjUwNSAxOC4xIDE4IDggQzE2LjY4IDcuNjcgMTUuMzYgNy4zNCAxNCA3IEMxMy4wMSA3LjY2IDEyLjAyIDguMzIgMTEgOSBDMTAuNDE0MDczNjYgMTIuMTE2MTA1NTQgMTAuNDE0MDczNjYgMTIuMTE2MTA1NTQgMTAuMzEyNSAxNS42MjUgQzEwLjI0Njc1NzgxIDE2LjgxMzUxNTYzIDEwLjE4MTAxNTYzIDE4LjAwMjAzMTI1IDEwLjExMzI4MTI1IDE5LjIyNjU2MjUgQzEwLjA3NTg5ODQ0IDIwLjE0MTc5Njg3IDEwLjAzODUxNTYyIDIxLjA1NzAzMTI1IDEwIDIyIEM2LjcgMjEuNjcgMy40IDIxLjM0IDAgMjEgQzAgMTQuMDcgMCA3LjE0IDAgMCBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjAzNiw1MykiLz4KPHBhdGggZD0iTTAgMCBDNy44MjQzNDA1OCAtMC4xMTcwMzA3NCA3LjgyNDM0MDU4IC0wLjExNzAzMDc0IDEwLjQ4ODI4MTI1IDIuNDE0MDYyNSBDMTIuNzg3NDM3MTMgNi4yMDk3NTk4NSAxMy43NDA2OTg2IDkuNTU1ODA4MzkgMTMgMTQgQzExLjk1MTAwNjYgMTUuNzE2NTM0NjYgMTAuOTAxMjc3MjcgMTcuNDMyNzI1OTggOS44MzIwMzEyNSAxOS4xMzY3MTg3NSBDOC4yODEzNDc3OCAyMi42MDkzNzYxMSA5LjE2NDUxNTkyIDI1LjM1OTY3NjUzIDEwIDI5IEMxMC4zNTA2MjUgMjkuNzAxMjUgMTAuNzAxMjUgMzAuNDAyNSAxMS4wNjI1IDMxLjEyNSBDMTIuMzk2NjM0OTIgMzMuNzkzMjY5ODUgMTIuMTk1NTczOTMgMzYuMDY2MzkwOTggMTIgMzkgQzExIDQwIDExIDQwIDguMTI4OTA2MjUgNDAuMTMyODEyNSBDNi45NTE5OTIxOSA0MC4xMzAyMzQzOCA1Ljc3NTA3ODEyIDQwLjEyNzY1NjI1IDQuNTYyNSA0MC4xMjUgQzMuMzg4MTY0MDYgNDAuMTI3NTc4MTIgMi4yMTM4MjgxMiA0MC4xMzAxNTYyNSAxLjAwMzkwNjI1IDQwLjEzMjgxMjUgQy0yIDQwIC0yIDQwIC00IDM5IEMtMy4yNDgxNzUxOCAzMS40ODE3NTE4MiAtMy4yNDgxNzUxOCAzMS40ODE3NTE4MiAtMS45Mzc1IDI4LjkzNzUgQy0wLjQzNzQ4NjY0IDI1LjgzNzQ3MjM5IC0wLjY0OTM5MDYgMjMuMzg5MjI0MiAtMSAyMCBDLTIuMzE0MzE2OTUgMTcuOTg3NDUyMTggLTMuNjQ3MjE4ODUgMTUuOTg2ODk3MzEgLTUgMTQgQy01Ljg1NTE0NzQgOS42MjkyNDY2MSAtNC43NjA4MzQzNiA3LjI4MzU1ODE3IC0yLjUgMy42MjUgQy0xLjY3OTQ5NTggMi40MDc5MTg3NiAtMC44NTAyODE2NCAxLjE5NjQ2NzczIDAgMCBaICIgZmlsbD0iI0ZBRkJGQiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1Nyw4MikiLz4KPHBhdGggZD0iTTAgMCBDMy45MDkzODcwMyAzLjczOTQxMzY4IDMuOTA5Mzg3MDMgMy43Mzk0MTM2OCA0LjEzMjgxMjUgNi44NDc2NTYyNSBDNC4xMzAyMzQzOCA3LjU3ODU1NDY5IDQuMTI3NjU2MjUgOC4zMDk0NTMxMyA0LjEyNSA5LjA2MjUgQzQuMTIzNzEwOTQgOS44NjU1ODU5NCA0LjEyMjQyMTg4IDEwLjY2ODY3MTg4IDQuMTIxMDkzNzUgMTEuNDk2MDkzNzUgQzQuMDAyNzk5MjggMTMuOTQyMTE4MSAzLjYyMDk4NDQgMTYuMjE4MTI5NDkgMy4xODc1IDE4LjYyNSBDMi43MDMyNTg3MiAyMi4yNzU5MjQ0MiAzLjIxMzk4MTIzIDIzLjg4MzIwMTQgNS40Mzc1IDI2LjgxMjUgQzUuOTEwNTg1OTQgMjcuMzM0NTcwMzEgNi4zODM2NzE4NyAyNy44NTY2NDA2MiA2Ljg3MTA5Mzc1IDI4LjM5NDUzMTI1IEM4IDMwIDggMzAgOCAzNCBDOC42NiAzNCA5LjMyIDM0IDEwIDM0IEM3Ljk4MzAzMjM0IDI5LjA1NjczNDA2IDcuOTgzMDMyMzQgMjkuMDU2NzM0MDYgNS4yNSAyNC41IEMzLjUwMjExMTMyIDIxLjAwNDIyMjYzIDQuMzAxODA1ODYgMTguODA4MzMxNjUgNSAxNSBDNS4yMjA5MzE1MSAxMC40OTc1NjgxMyA1LjIzOTU1NzQ5IDYuMzU4MTI2NzUgNCAyIEM3LjQ0NTAwNjYgNC45MzU2NjQyMyA3LjU3NDgyNDY0IDcuMjU3NDQyOTQgNy45Njg3NSAxMS41OTc2NTYyNSBDNy45OTg4MzUyIDEzLjkxMDQ1NTggNy43MDc4ODYzOCAxNS44NjYzODczNSA3LjI1IDE4LjEyNSBDNi45ODQxMjA2MSAyMi4yNDYxMzA1MyA3LjEwOTg0MDQyIDIyLjY4NTU3NDIyIDkuNDM3NSAyNS43NSBDOS45MTA1ODU5NCAyNi4yODEwOTM3NSAxMC4zODM2NzE4NyAyNi44MTIxODc1IDEwLjg3MTA5Mzc1IDI3LjM1OTM3NSBDMTIgMjkgMTIgMjkgMTIgMzMgQzE0LjMxIDMzLjY2IDE2LjYyIDM0LjMyIDE5IDM1IEMxOSAzNS45OSAxOSAzNi45OCAxOSAzOCBDMTkuNjM5Mzc1IDM4LjI4ODc1IDIwLjI3ODc1IDM4LjU3NzUgMjAuOTM3NSAzOC44NzUgQzIzIDQwIDIzIDQwIDI0IDQyIEMxOS4yNDAwNTc5OSA0OC4wNjgxMzc5OSAxMy45MjU3ODgzNiA1My40MjgxMzM2MyA3IDU3IEM0IDU2IDQgNTYgMi43OTY4NzUgNTMuOTI1NzgxMjUgQy0wLjc2MDI4NTczIDQ1LjA0NjE1MjQyIC0wLjc2MDI4NTczIDQ1LjA0NjE1MjQyIDEgNDAgQzEuNTE1NjI1IDM5LjE3NSAyLjAzMTI1IDM4LjM1IDIuNTYyNSAzNy41IEM0LjM4NzAyNzU2IDM0LjMyNjkwODU4IDQuNTE2NDQxMTggMzIuNjE1MDg4MjUgNCAyOSBDMy4zNCAyOC4wMzA2MjUgMi42OCAyNy4wNjEyNSAyIDI2LjA2MjUgQy0wLjQxMDU3NzgyIDIyLjM3MTMwMjcyIC0wLjQwODMyNzU1IDIwLjMyODI3MTk5IDAgMTYgQzAuMzMgMTUuMDEgMC42NiAxNC4wMiAxIDEzIEMxLjA5MjQ3MzgxIDExLjUyMzEzODg5IDEuMTI5OTkwNzEgMTAuMDQyMjQ0OTkgMS4xMjUgOC41NjI1IEMxLjEyODg2NzE5IDcuNDE5NzQ2MDkgMS4xMjg4NjcxOSA3LjQxOTc0NjA5IDEuMTMyODEyNSA2LjI1MzkwNjI1IEMxLjAwMjc2MDE1IDQuMDQ2ODQxNDEgMC42MDg1NjE5OSAyLjEyMDMwNzI0IDAgMCBaICIgZmlsbD0iIzI5N0Q1QiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3NCw2MSkiLz4KPHBhdGggZD0iTTAgMCBDMCAyLjY0IDAgNS4yOCAwIDggQy0wLjk5IDcuNjcgLTEuOTggNy4zNCAtMyA3IEMtNi41NTg4MDA1MSA2LjYyNjg5OTk1IC05LjgyNzU4NTIyIDYuMzQwNTE2NjkgLTEzIDguMTI1IEMtMTQuNDYyMjEyMTcgMTAuODY2NjQ3ODEgLTE0LjMxODMzNzMzIDEyLjk0Mzk2MTYyIC0xNCAxNiBDLTEyLjMyMDg1NTg1IDE5LjIyNTQwMTU2IC0xMi4zMjA4NTU4NSAxOS4yMjU0MDE1NiAtOS4zMTI1IDE5Ljc1IEMtNS43MDcwOTgyNCAyMC4wMjIxMDU3OSAtMi41NTAxMDA2NiAxOS42MzkwMTgxMiAxIDE5IEMxIDIxLjMxIDEgMjMuNjIgMSAyNiBDLTYuMzQ1MjM2NzIgMjguMjcwMzQ1ODkgLTEyLjM4MTY4ODY4IDI4Ljg3NjE2MTQyIC0xOS4zNzUgMjUuMjUgQy0yMi44MjkzNDgyMSAyMi4yODkxMzAxIC0yNC42OTA4NzcyNCAyMC4yNzgzNDkyMiAtMjUuMzE2NDA2MjUgMTUuNjY3OTY4NzUgQy0yNS41ODIxMzY1MiA5Ljk1MDQ4MTkxIC0yNC45Njg0NzE1MiA2LjM5NzQ5NTQ3IC0yMSAyIEMtMTQuMTcwMDE0MTEgLTMuMjEyMzU3NjUgLTcuODE4OTkzNjcgLTEuODY5NzU5MzYgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDAyLDU0KSIvPgo8cGF0aCBkPSJNMCAwIEMzIDMuMTkwMzcxOTkgMyAzLjE5MDM3MTk5IDMgNiBDLTAuMDkyNjI3NjcgNy41NDYzMTM4NCAtMy4zNjcwODkxIDcuMzkwNjA3MTYgLTYuNzg1MTU2MjUgNy42MjEwOTM3NSBDLTcuODgxNTAzOTEgNy44MDg2NTIzNCAtNy44ODE1MDM5MSA3LjgwODY1MjM0IC05IDggQy05LjMzIDguNjYgLTkuNjYgOS4zMiAtMTAgMTAgQy03LjY5IDEwLjMzIC01LjM4IDEwLjY2IC0zIDExIEMtMi40Mzc1IDEyLjkzNzUgLTIuNDM3NSAxMi45Mzc1IC0yIDE1IEMtMyAxNiAtMyAxNiAtNS4yODUxNTYyNSAxNi4wOTc2NTYyNSBDLTYuNjU5OTQxNDEgMTYuMDgwMjUzOTEgLTYuNjU5OTQxNDEgMTYuMDgwMjUzOTEgLTguMDYyNSAxNi4wNjI1IEMtOC45ODE2MDE1NiAxNi4wNTM0NzY1NiAtOS45MDA3MDMxMiAxNi4wNDQ0NTMxMyAtMTAuODQ3NjU2MjUgMTYuMDM1MTU2MjUgQy0xMS41NTc5Mjk2OSAxNi4wMjM1NTQ2OSAtMTIuMjY4MjAzMTMgMTYuMDExOTUzMTMgLTEzIDE2IEMtMTMuMzMgMTcuNjUgLTEzLjY2IDE5LjMgLTE0IDIxIEMtMTIuNzYyNSAyMC42NDkzNzUgLTExLjUyNSAyMC4yOTg3NSAtMTAuMjUgMTkuOTM3NSBDLTcuMDk2NzA4IDE5LjA0NDA2NzI3IC01LjEzMjI1ODM2IDE4Ljk5MTE4NzA2IC0yIDIwIEMtMS42NyAyMS4zMiAtMS4zNCAyMi42NCAtMSAyNCBDLTcuMDgzMDUwMzggMjguMTkwNTQ1ODIgLTExLjYyMjE1Nzc3IDI5Ljk3NTQ2ODkgLTE5IDI5IEMtMjEuMDYyNSAyNy4zNzUgLTIxLjA2MjUgMjcuMzc1IC0yMiAyNSBDLTIyLjU2NDA4OTkgMjAuMDM2MDA4OTIgLTIxLjQ2ODAwNjg0IDE1LjcxMzA3NDU4IC0yMCAxMSBDLTE4LjM3NSA5IC0xOC4zNzUgOSAtMTcgOCBDLTE3LjQ5NSA3LjU2Njg3NSAtMTcuOTkgNy4xMzM3NSAtMTguNSA2LjY4NzUgQy0yMCA1IC0yMCA1IC0yMCAyIEMtNi4wODE1NDUwNiAtMS4zMTY3MzgyIC02LjA4MTU0NTA2IC0xLjMxNjczODIgMCAwIFogIiBmaWxsPSIjMjIxRTIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NTIsNzEpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMiAyIDIgMi4zMTI1IDUuMTg3NSBDMS45Njk4MjgxOCA5LjM2ODA5NjIyIDAuNjY2NjA4NjQgMTIuMTgwNjg4NTMgLTEgMTYgQy0xLjU4NzYzMjQ0IDIwLjExMzQyNzEgLTEuMzMwNDM1NTggMjEuNTA0MzQ2NjQgMSAyNSBDMy4zMzQ1ODYzNSAyOC41MDE4Nzk1MyAzLjY3MjYwNzI3IDI5Ljg4MDI4MDQ3IDMgMzQgQzEuOTUxMDA2NiAzNS43MTY1MzQ2NiAwLjkwMTI3NzI3IDM3LjQzMjcyNTk4IC0wLjE2Nzk2ODc1IDM5LjEzNjcxODc1IEMtMS43MTg2NTIyMiA0Mi42MDkzNzYxMSAtMC44MzU0ODQwOCA0NS4zNTk2NzY1MyAwIDQ5IEMwLjM1MDYyNSA0OS43MDEyNSAwLjcwMTI1IDUwLjQwMjUgMS4wNjI1IDUxLjEyNSBDMi4zODM4NTAwOCA1My43Njc3MDAxNyAyLjEzMjA5ODM3IDU2LjA5MzgzNTkxIDIgNTkgQzEuMDEgNTkgMC4wMiA1OSAtMSA1OSBDLTEuMjg4NzUgNTcuNzgzMTI1IC0xLjU3NzUgNTYuNTY2MjUgLTEuODc1IDU1LjMxMjUgQy0yLjQ4MDE5MTExIDUyLjgzMDc4MTA3IC0zLjEwNzk3MDM0IDUwLjc2NzAxMTM3IC00LjE4NzUgNDguNDM3NSBDLTUuMzQyMzE4NDQgNDQuOTczMDQ0NjggLTQuODE4NjU2ODYgNDIuNTI2NTIxODcgLTQgMzkgQy0zLjIyNjU2MjUgMzcuNzMxNTYyNSAtMy4yMjY1NjI1IDM3LjczMTU2MjUgLTIuNDM3NSAzNi40Mzc1IEMtMC42MTEwNTMyMSAzMy4zNDA0ODE1MiAtMC41NTY2MDA4MSAzMS41NDcxOTM1MyAtMSAyOCBDLTIuNDI2MjE2ODQgMjUuMjg4NzM2MTYgLTIuNDI2MjE2ODQgMjUuMjg4NzM2MTYgLTQgMjMgQy00IDIyLjM0IC00IDIxLjY4IC00IDIxIEMtNi45NyAyMSAtOS45NCAyMSAtMTMgMjEgQy0xNi44OTY3Nzg1MSAyNy4wMDIyMTQ0NSAtMTYuODk2Nzc4NTEgMjcuMDAyMjE0NDUgLTE3IDM0IEMtMTYuMzQgMzQuOTY5Mzc1IC0xNS42OCAzNS45Mzg3NSAtMTUgMzYuOTM3NSBDLTEyLjUzNTY0NjkzIDQwLjcxMTA0MDY0IC0xMi40NTUwODUxNiA0Mi41NjI4MzYyOCAtMTMgNDcgQy0xMy45MzU3ODk5NSA0OS4zNTk4MTgxMyAtMTQuOTMzNDc4MDggNTEuNjk2MzEyNjQgLTE2IDU0IEMtMTYuNjkxNDA1MjIgNTYuNzc4ODg2MTMgLTE2LjY5MTQwNTIyIDU2Ljc3ODg4NjEzIC0xNyA1OSBDLTE3Ljk5IDU5IC0xOC45OCA1OSAtMjAgNTkgQy0yMC4yNTgxMzMwMiA1NS4zODYxMzc3NCAtMjAuMTY4MTU2NjcgNTMuMzI5MzA2OCAtMTguNSA1MC4wNjI1IEMtMTYuNjczNDE0OTMgNDYuMzMzMjIyMTUgLTE2LjQ4NjE3MTMzIDQ0LjExMDYyOTM5IC0xNyA0MCBDLTE4LjMxNDMxNjk1IDM3Ljk4NzQ1MjE4IC0xOS42NDcyMTg4NSAzNS45ODY4OTczMSAtMjEgMzQgQy0yMS41IDMxIC0yMS41IDMxIC0yMSAyOCBDLTIwLjMxOTM3NSAyNy4wNzE4NzUgLTE5LjYzODc1IDI2LjE0Mzc1IC0xOC45Mzc1IDI1LjE4NzUgQy0xNi4yOTQzMTIzNCAyMC44MzkwMjk5NyAtMTYuODYxMjA4MTUgMTcuODI0MTczMzMgLTE4IDEzIEMtMTguNjU5OTY3OSAxMS4zMzA2Njk0MiAtMTkuMzI1NTg4NjkgOS42NjM1NDc5IC0yMCA4IEMtMjAuMTI1IDQuNjg3NSAtMjAuMTI1IDQuNjg3NSAtMjAgMiBDLTE5LjM0IDIgLTE4LjY4IDIgLTE4IDIgQy0xOCAyLjY2IC0xOCAzLjMyIC0xOCA0IEMtMTYuNjggNCAtMTUuMzYgNCAtMTQgNCBDLTE0IDQuNjYgLTE0IDUuMzIgLTE0IDYgQy0xNC45OSA2IC0xNS45OCA2IC0xNyA2IEMtMTUuOTcwMjgxNCAxMS4yMzU1MDE3NyAtMTUuOTcwMjgxNCAxMS4yMzU1MDE3NyAtMTMuNzUgMTYgQy0xMC45NzQxNDAxOSAxNy41ODYyMDU2MSAtOS4xMjcxMzUyNSAxNy41MTA1NTI2OSAtNiAxNyBDLTIuMzk2ODM5NzggMTMuNjg4OTg3OTEgLTEuNDQ3Mjk0NzYgMTAuODA4NDE4NyAtMSA2IEMtMy4zMSA2LjMzIC01LjYyIDYuNjYgLTggNyBDLTguMDQyNzIxIDUuMzMzODgwOTUgLTguMDQwNjM4MzIgMy42NjYxNzExNSAtOCAyIEMtNS45NTQ0Nzk1OCAtMC4wNDU1MjA0MiAtMi43Mjk0MTkxNCAwLjIzOTQyMjczIDAgMCBaICIgZmlsbD0iIzIyNzg1NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3MCw2MikiLz4KPHBhdGggZD0iTTAgMCBDMC45NDg3NSAwLjY2IDEuODk3NSAxLjMyIDIuODc1IDIgQzMuMzAxNTM3MjcgNi4zNTA2ODAxOCAzLjQ1MjcyODcyIDguMjkzODg3MTIgMC42MjUgMTEuNzUgQy0wLjI4MjUgMTIuNDkyNSAtMS4xOSAxMy4yMzUgLTIuMTI1IDE0IEMtMi43MDYzNjcxOSAxNC41MTY5MTQwNiAtMy4yODc3MzQzOCAxNS4wMzM4MjgxMiAtMy44ODY3MTg3NSAxNS41NjY0MDYyNSBDLTYuNzk2MjA2MzYgMTcuNDI5OTAwMDYgLTkuMjc0ODQ0NzUgMTcuNzMzMjU1NzkgLTEyLjY4NzUgMTguMTg3NSBDLTEzLjgyMzE2NDA2IDE4LjM0NjA1NDY5IC0xNC45NTg4MjgxMiAxOC41MDQ2MDkzOCAtMTYuMTI4OTA2MjUgMTguNjY3OTY4NzUgQy0xOS4xMjUgMTkgLTE5LjEyNSAxOSAtMjIuMTI1IDE5IEMtMjMuOTMxNDYxMTggMTUuMzg3MDc3NjQgLTI1LjEyNSAxMi45OTMwMDYgLTI1LjEyNSA4LjkzNzUgQy0yMy41NjkwNzIyNyA0LjM2Njk2MjI5IC0yMS4wMzM3Mjg5IDEuMTk5NzcyNDUgLTE2LjkzNzUgLTEuMzc1IEMtMTEuMDE1MDAyNTMgLTIuNjkxMTEwNTUgLTUuMzkzODE5MTMgLTMuMDkxNTc5MjYgMCAwIFogTS0xOC4xMjUgNSBDLTE4Ljc4NSA2LjMyIC0xOS40NDUgNy42NCAtMjAuMTI1IDkgQy0xOC44MDUgNy42OCAtMTcuNDg1IDYuMzYgLTE2LjEyNSA1IEMtMTYuNzg1IDUgLTE3LjQ0NSA1IC0xOC4xMjUgNSBaIE0tMTIuMTI1IDkgQy0xMy45NTgwMDkwOSAxMS4xMDU3NTY0MyAtMTMuOTU4MDA5MDkgMTEuMTA1NzU2NDMgLTE1LjEyNSAxMyBDLTkuMzI4NzM4OTMgMTIuNjAwMjU3ODYgLTUuNzEwMjc1MzcgMTEuODk3NDg0MDcgLTEuMTI1IDggQy0xLjEyNSA3LjAxIC0xLjEyNSA2LjAyIC0xLjEyNSA1IEMtNS45NTc3NzI2OCA0LjQzMTQzODUxIC04LjM2ODA4Njg2IDYuMDU5ODA3MTEgLTEyLjEyNSA5IFogIiBmaWxsPSIjMjIxRTIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1ODUuMTI1LDQ5KSIvPgo8cGF0aCBkPSJNMCAwIEMyLjk3IDAgNS45NCAwIDkgMCBDOS4zMyAxLjMyIDkuNjYgMi42NCAxMCA0IEMxMC41MTU2MjUgMy4zNCAxMS4wMzEyNSAyLjY4IDExLjU2MjUgMiBDMTQuODI2NDEzMTkgLTAuNjc4MDgyNjIgMTYuODgzOTk1MjUgLTAuMzgxMTExNTUgMjEgMCBDMjEuNjYgMC4zMyAyMi4zMiAwLjY2IDIzIDEgQzIyLjY3IDMuNjQgMjIuMzQgNi4yOCAyMiA5IEMxOSAxMCAxOSAxMCAxNy4wNjI1IDkuMzEyNSBDMTYuMzgxODc1IDkuMjA5Mzc1IDE1LjcwMTI1IDkuMTA2MjUgMTUgOSBDMTEuNjQ5OTE3OTUgMTEuNzc1NzgyMjcgMTAuMTM2Mzk1ODYgMTMuNjg5OTI2MiA5LjY4MzU5Mzc1IDE4LjAzOTA2MjUgQzkuNjAyMzgyODEgMTkuMjIyNDIxODcgOS41MjExNzE4OCAyMC40MDU3ODEyNSA5LjQzNzUgMjEuNjI1IEM5LjM1MzcxMDk0IDIyLjgxMzUxNTYzIDkuMjY5OTIxODcgMjQuMDAyMDMxMjUgOS4xODM1OTM3NSAyNS4yMjY1NjI1IEM5LjEyMzAwNzgxIDI2LjE0MTc5Njg3IDkuMDYyNDIxODcgMjcuMDU3MDMxMjUgOSAyOCBDNi4wMyAyOCAzLjA2IDI4IDAgMjggQzAgMTguNzYgMCA5LjUyIDAgMCBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE3Niw1MykiLz4KPHBhdGggZD0iTTAgMCBDMC40OTUgMS40ODUgMC40OTUgMS40ODUgMSAzIEMwLjAxIDMuOTkgLTAuOTggNC45OCAtMiA2IEMtMi43MjcwMzEyNSA1LjczNDQ1MzEzIC0zLjQ1NDA2MjUgNS40Njg5MDYyNSAtNC4yMDMxMjUgNS4xOTUzMTI1IEMtMjUuMTQ4Njk1MTMgLTIuMTYyNDkwMzQgLTQ1LjE2MzM2MjQ5IC0xLjA2MjQxOCAtNjYgNiBDLTY2LjMzIDQuMzUgLTY2LjY2IDIuNyAtNjcgMSBDLTQ4Ljc3Mzk1ODUzIC05LjkzNTYyNDg4IC0xOC43MTE0Nzg5MyAtOC4zODU4NDYyMiAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4MjAsMzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyLjMzIDEuNjUgMi42NiAzLjMgMyA1IEM0LjY1IDUgNi4zIDUgOCA1IEM3LjAxIDYuNDg1IDcuMDEgNi40ODUgNiA4IEM1LjgzMjg2NDMxIDEwLjYyNTMxNTI0IDUuODMyODY0MzEgMTAuNjI1MzE1MjQgNiAxMyBDNi45MDc1IDEyLjQ4NDM3NSA3LjgxNSAxMS45Njg3NSA4Ljc1IDExLjQzNzUgQzEyIDEwIDEyIDEwIDE0LjM3NSAxMC4zMTI1IEMxNC45MTEyNSAxMC41MzkzNzUgMTUuNDQ3NSAxMC43NjYyNSAxNiAxMSBDMTUuNjcgMTIuMzIgMTUuMzQgMTMuNjQgMTUgMTUgQzE2Ljk4IDE0LjY3IDE4Ljk2IDE0LjM0IDIxIDE0IEMxOS42OCAxNi42NCAxOC4zNiAxOS4yOCAxNyAyMiBDMTYuMjM4MTY0MDYgMjEuNzgzNDM3NSAxNS40NzYzMjgxMyAyMS41NjY4NzUgMTQuNjkxNDA2MjUgMjEuMzQzNzUgQzMuNTQ5MjExNDUgMTguMzM5MTEzMiAtMy45OTQ5NjA1MyAxOC41NDQyMTE5MSAtMTUgMjIgQy0xNi4zMiAxOS4zNiAtMTcuNjQgMTYuNzIgLTE5IDE0IEMtMTYuNjkgMTQuMzMgLTE0LjM4IDE0LjY2IC0xMiAxNSBDLTEyLjY2IDEzLjM1IC0xMy4zMiAxMS43IC0xNCAxMCBDLTEwLjI4MTExNzYxIDEwLjUwNzEyMDMzIC03LjI2NTQ1NzYxIDExLjExNjA4MjE1IC00IDEzIEMtMy43OTkxMzU1NyA5LjI4NDAwODA5IC0zLjg0ODA1NjMgOC4yMjc5MTU1NSAtNiA1IEMtNC4zNSA1IC0yLjcgNSAtMSA1IEMtMC42NyAzLjM1IC0wLjM0IDEuNyAwIDAgWiAiIGZpbGw9IiNGM0Y4RjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNjAsMzcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuNzQyMTY3OTcgMC4wNTQxNDA2MyAxLjc0MjE2Nzk3IDAuMDU0MTQwNjMgMy41MTk1MzEyNSAwLjEwOTM3NSBDNC4zOTk5NjA5NCAwLjE1NTc4MTI1IDUuMjgwMzkwNjMgMC4yMDIxODc1IDYuMTg3NSAwLjI1IEM1Ljg1NzUgMS45IDUuNTI3NSAzLjU1IDUuMTg3NSA1LjI1IEMzLjIwNzUgNS41OCAxLjIyNzUgNS45MSAtMC44MTI1IDYuMjUgQy0xLjA1MDMzMjAzIDcuMzU0MDgyMDMgLTEuMDUwMzMyMDMgNy4zNTQwODIwMyAtMS4yOTI5Njg3NSA4LjQ4MDQ2ODc1IEMtMi43NDE2MTc3NyAxNC41MzkxODMxOCAtMy44MTM2MDk0MSAxOC40MDQ2OTk1NSAtOC44MTI1IDIyLjI1IEMtMTEuNTc3MDIwMzMgMjMuNjMyMjYwMTYgLTEzLjg1ODYzNjMgMjMuMzQ1MjUzODcgLTE2LjkzNzUgMjMuMzEyNSBDLTE4LjAzMzIwMzEyIDIzLjMwMzQ3NjU2IC0xOS4xMjg5MDYyNSAyMy4yOTQ0NTMxMyAtMjAuMjU3ODEyNSAyMy4yODUxNTYyNSBDLTIxLjUyMjM4MjgxIDIzLjI2Nzc1MzkxIC0yMS41MjIzODI4MSAyMy4yNjc3NTM5MSAtMjIuODEyNSAyMy4yNSBDLTIyLjQ4MjUgMjEuNiAtMjIuMTUyNSAxOS45NSAtMjEuODEyNSAxOC4yNSBDLTE5LjgzMjUgMTcuOTIgLTE3Ljg1MjUgMTcuNTkgLTE1LjgxMjUgMTcuMjUgQy0xNS41ODE3NTc4MSAxNi4zNTc5Njg3NSAtMTUuMzUxMDE1NjIgMTUuNDY1OTM3NSAtMTUuMTEzMjgxMjUgMTQuNTQ2ODc1IEMtMTQuNzg3MTQ4NDQgMTMuMzc2NDA2MjUgLTE0LjQ2MTAxNTYzIDEyLjIwNTkzNzUgLTE0LjEyNSAxMSBDLTEzLjgxMTc1NzgxIDkuODM5ODQzNzUgLTEzLjQ5ODUxNTYyIDguNjc5Njg3NSAtMTMuMTc1NzgxMjUgNy40ODQzNzUgQy0xMC40NDExMzY5OSAwLjk5NjQ1MTA5IC02Ljc2ODAwODc1IC0wLjI3MzQ1NDkgMCAwIFogIiBmaWxsPSIjRjVGOUY2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDM2LjgxMjUsODQuNzUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuOTcgMCA1Ljk0IDAgOSAwIEM5IDkuMjQgOSAxOC40OCA5IDI4IEM2LjAzIDI4IDMuMDYgMjggMCAyOCBDMCAxOC43NiAwIDkuNTIgMCAwIFogIiBmaWxsPSIjMDA4NDJBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDk5LDUzKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjgwODE5NTIyIDAuMDEzNzU3MzUgNC44MDgxOTUyMiAwLjAxMzc1NzM1IDcuODEyNSAyLjg3NSBDOC40OTMxMjUgNC4xMTI1IDguNDkzMTI1IDQuMTEyNSA5LjE4NzUgNS4zNzUgQzYuODc3NSA1LjcwNSA0LjU2NzUgNi4wMzUgMi4xODc1IDYuMzc1IEMxLjg1NzUgOC4wMjUgMS41Mjc1IDkuNjc1IDEuMTg3NSAxMS4zNzUgQzQuNjUyNSAxMC44OCA0LjY1MjUgMTAuODggOC4xODc1IDEwLjM3NSBDOC42ODA5ODE3NSAxNC41MjAyNDY3MSA4LjMyNjA0MzA3IDE2LjE1NDk2MSA2LjA2MjUgMTkuNzUgQzMuMTg3NSAyMi4zNzUgMy4xODc1IDIyLjM3NSAwLjE4NzUgMjMuMTI1IEMtNC4xMzU1MDE1OSAyMi4wNDQyNDk2IC01LjQ3Mjc4ODMxIDIwLjA5MTAxMjY4IC03LjgxMjUgMTYuMzc1IEMtOC4xMjUgMTMgLTguMTI1IDEzIC03LjgxMjUgMTAuMzc1IEMtNS41MDI1IDEwLjM3NSAtMy4xOTI1IDEwLjM3NSAtMC44MTI1IDEwLjM3NSBDLTEuMTQyNSA5LjA1NSAtMS40NzI1IDcuNzM1IC0xLjgxMjUgNi4zNzUgQy00Ljc4MjUgNS44OCAtNC43ODI1IDUuODggLTcuODEyNSA1LjM3NSBDLTUuNjI4MjEwMTUgMC44NjA4MDA5NyAtNS4wOTkzMDg2NyAwLjE5NDExNzE3IDAgMCBaICIgZmlsbD0iI0U1RUZFQiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2MC44MTI1LDU3LjYyNSkiLz4KPHBhdGggZD0iTTAgMCBDMTUuNTEgMCAzMS4wMiAwIDQ3IDAgQzQ3IDEuNjUgNDcgMy4zIDQ3IDUgQzMxLjQ5IDUgMTUuOTggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1OTUsNzIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuNjIgMCA5LjI0IDAgMTQgMCBDMTQgMS4zMiAxNCAyLjY0IDE0IDQgQzEwLjcgNCA3LjQgNCA0IDQgQzQgNS45OCA0IDcuOTYgNCAxMCBDNy4zIDEwIDEwLjYgMTAgMTQgMTAgQzE0IDExLjMyIDE0IDEyLjY0IDE0IDE0IEMxMC43IDE0IDcuNCAxNCA0IDE0IEM0IDE1Ljk4IDQgMTcuOTYgNCAyMCBDNy4zIDIwIDEwLjYgMjAgMTQgMjAgQzE0LjMzIDIxLjMyIDE0LjY2IDIyLjY0IDE1IDI0IEMxMC4wNSAyNCA1LjEgMjQgMCAyNCBDMCAxNi4wOCAwIDguMTYgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDU2LDg1KSIvPgo8cGF0aCBkPSJNMCAwIEMxNC41MiAwIDI5LjA0IDAgNDQgMCBDNDMuMzQgMS42NSA0Mi42OCAzLjMgNDIgNSBDMjguMTQgNSAxNC4yOCA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0MSw5NCkiLz4KPHBhdGggZD0iTTAgMCBDMTMuODYgMCAyNy43MiAwIDQyIDAgQzQyLjY2IDEuNjUgNDMuMzIgMy4zIDQ0IDUgQzI5LjQ4IDUgMTQuOTYgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1NDEsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuOTUxOTMyMjEgNS44NTU3OTY2MyAzLjYyOTIyNzk1IDE1LjU1OTg2NzYxIDAuOTE0MDYyNSAyMS4yOTI5Njg3NSBDMC40NDc0MjE4NyAyMS44MzU2NjQwNiAtMC4wMTkyMTg3NSAyMi4zNzgzNTkzOCAtMC41IDIyLjkzNzUgQy0zLjIyMjkwNTM0IDI1LjY1Mjg1NDI2IC0zLjIyMjkwNTM0IDI1LjY1Mjg1NDI2IC0zLjExMzI4MTI1IDI4LjQwNjI1IEMtMi44NDc1MjI1NiAzMC42NDI3NjQ2OSAtMi41MDI2MTIyNCAzMi44MDU0MjU3OCAtMiAzNSBDLTYuNjI1IDM4IC02LjYyNSAzOCAtMTAgMzggQy0xMC4zMyAzOS4zMiAtMTAuNjYgNDAuNjQgLTExIDQyIEMtMTIuMzIgNDIgLTEzLjY0IDQyIC0xNSA0MiBDLTE2LjcwMzEyNSA0MC4xMDE1NjI1IC0xNi43MDMxMjUgNDAuMTAxNTYyNSAtMTguMjUgMzcuNjI1IEMtMTguNzcwNzgxMjUgMzYuODEyODkwNjIgLTE5LjI5MTU2MjUgMzYuMDAwNzgxMjUgLTE5LjgyODEyNSAzNS4xNjQwNjI1IEMtMjEgMzMgLTIxIDMzIC0yMSAzMSBDLTE4LjA5NDUxMTE4IDI4Ljk1ODMwNTE1IC0xNi41OTg1Nzk1NCAyOCAtMTMgMjggQy0xMyAyOC45OSAtMTMgMjkuOTggLTEzIDMxIEMtMTAuMDI5ODIzMDYgMzAuMzcxODk4MjcgLTEwLjAyOTgyMzA2IDMwLjM3MTg5ODI3IC03IDI5IEMtNS44MDE2MTc5MSAyNi42NzE0NTUzNyAtNS44MDE2MTc5MSAyNi42NzE0NTUzNyAtNSAyNCBDLTQuMzI1ODIwMzEgMjMuMjk4NzUgLTMuNjUxNjQwNjMgMjIuNTk3NSAtMi45NTcwMzEyNSAyMS44NzUgQy0wLjI3MTkxNzk2IDE3LjkzMDQwMjQ0IC0wLjU4MDIxNDc2IDE0Ljk1NDI2NzczIC0wLjgxMjUgMTAuMzEyNSBDLTEuMDkwOTg5MDUgMi4xODE5NzgxMSAtMS4wOTA5ODkwNSAyLjE4MTk3ODExIDAgMCBaICIgZmlsbD0iI0VCRjNFRiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM0Miw2NSkiLz4KPHBhdGggZD0iTTAgMCBDLTAuNDAyODE3NzEgNS44NDA4NTY3NCAtMS4xMTI3NzkgOS4zNzczNTg4MSAtNSAxNCBDLTguMjkwNzY2NiAxNi43MTg0NTkzNyAtMTAuMDk2NDA4NjQgMTcuOTMzMDY3MzEgLTE0LjM3NSAxOC4yNSBDLTE1LjI0MTI1IDE4LjE2NzUgLTE2LjEwNzUgMTguMDg1IC0xNyAxOCBDLTE2LjY2ODA5NTE4IDExLjY5MzgwODQyIC0xNS41MDUxNjQ5NyA3LjU2NTU1NTkzIC0xMSAzIEMtNy4yMTg5MzIxOCAwLjU1ODA2MDM3IC00LjQ5MzYzOTc2IC0wLjM5NjQ5NzYzIDAgMCBaICIgZmlsbD0iIzAwMDAwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ1LDM3KSIvPgo8cGF0aCBkPSJNMCAwIEM0Ljc1MDUzNTExIC0wLjA3NDM1MjIyIDkuNTAwNzI4ODcgLTAuMTI4Njk2OTEgMTQuMjUxNzA4OTggLTAuMTY0Nzk0OTIgQzE1Ljg2NjY3Nzg5IC0wLjE3OTg0ODc2IDE3LjQ4MTYwNjEzIC0wLjIwMDI5NjQ4IDE5LjA5NjQzNTU1IC0wLjIyNjMxODM2IEMyMS40MjI0NjU1NSAtMC4yNjI4NTI4NiAyMy43NDc5NTM0MSAtMC4yNzk3NjAxNSAyNi4wNzQyMTg3NSAtMC4yOTI5Njg3NSBDMjcuMTUxMDcxODUgLTAuMzE2MTk0NTMgMjcuMTUxMDcxODUgLTAuMzE2MTk0NTMgMjguMjQ5Njc5NTcgLTAuMzM5ODg5NTMgQzMyLjY1ODMwNTk5IC0wLjM0MTM1Nzg4IDM1LjUyNjI3Nzc5IDAuMjE1ODYwOTQgMzkgMyBDMzkgMy42NiAzOSA0LjMyIDM5IDUgQzI2LjEzIDUgMTMuMjYgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1NDEsNTApIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEM1LjE4NDE5OTU5IDMuNzk2NTQ1NjcgNS4zODczNDU0OCA3LjExNjc2MjIgNS4yMzgyODEyNSAxMS44NjMyODEyNSBDNC45NDYwNDkxMyAxNC40ODM3ODg5NyA0LjA0MjM4MTk1IDE2LjU4OTQ5MTczIDMgMTkgQzIuNDgyMDk2ODIgMjMuMDU2OTA4MjUgMi42OTk5NDI5NCAyNC41NDk5MTQ0MSA1IDI4IEM3LjMzNDU4NjM1IDMxLjUwMTg3OTUzIDcuNjcyNjA3MjcgMzIuODgwMjgwNDcgNyAzNyBDNi4zNDg5OTE3IDM4LjE2Njk1MjY0IDUuNjU4MzE0NjEgMzkuMzEyMzI1OTggNC45Mzc1IDQwLjQzNzUgQzMuMTY4MTQxMTcgNDMuMjg2MDQyMjIgMi45OTk2OTkxNiA0My45ODI4NTIyOSAzLjA2MjUgNDcuNTYyNSBDNC4wMDI5NTg2MSA1MS4wMTA4NDgyMyA1LjM3ODg4Njc3IDUzLjgyODI1NjcyIDcgNTcgQzcgNTguMzIgNyA1OS42NCA3IDYxIEM1LjAyIDYxLjQ5NSA1LjAyIDYxLjQ5NSAzIDYyIEMyLjcxMTI1IDYwLjc4MzEyNSAyLjQyMjUgNTkuNTY2MjUgMi4xMjUgNTguMzEyNSBDMS41MTk4MDg4OSA1NS44MzA3ODEwNyAwLjg5MjAyOTY2IDUzLjc2NzAxMTM3IC0wLjE4NzUgNTEuNDM3NSBDLTEuMzQyMzE4NDQgNDcuOTczMDQ0NjggLTAuODE4NjU2ODYgNDUuNTI2NTIxODcgMCA0MiBDMC43NzM0Mzc1IDQwLjczMTU2MjUgMC43NzM0Mzc1IDQwLjczMTU2MjUgMS41NjI1IDM5LjQzNzUgQzMuNDExMzY2MjEgMzYuMzAyNDY1OTkgMy41MTMyNzU5MiAzNC41OTI5MzE0MSAzIDMxIEMyLjM0IDMwLjAxIDEuNjggMjkuMDIgMSAyOCBDLTEuMzMwNDM1NTggMjQuNTA0MzQ2NjQgLTEuNTg3NjMyNDQgMjMuMTEzNDI3MSAtMSAxOSBDLTAuNTA1IDE3Ljg2NTYyNSAtMC4wMSAxNi43MzEyNSAwLjUgMTUuNTYyNSBDMi41NDM3NjAwOCAxMC43MDg1Njk4MSAyLjY5NzAxMDU0IDcuMDQ3NDY4NDUgMSAyLjA2MjUgQzAuNjcgMS4zODE4NzUgMC4zNCAwLjcwMTI1IDAgMCBaICIgZmlsbD0iI0U5RjFFRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2OSw1OSkiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwLjMzIDIuNjQgMC42NiA0IDEgQzUuMTU2NjQ3MzcgNi40ODI2OTA2OSA1LjExNDE2MjU1IDExLjgwMzM5Mjc0IDUuMDYyNSAxNy4zNzUgQzUuMDU3OTg4MjggMTguMzAxODM1OTQgNS4wNTM0NzY1NiAxOS4yMjg2NzE4OCA1LjA0ODgyODEyIDIwLjE4MzU5Mzc1IEM1LjAzNzExNTc0IDIyLjQ1NTc5NzA5IDUuMDIwNzEzNzIgMjQuNzI3ODYzODggNSAyNyBDMy4zNSAyNy4zMyAxLjcgMjcuNjYgMCAyOCBDLTIuNjA1MTM5NTkgMjQuMDkyMjkwNjIgLTIuMjkzNjc1NjUgMjAuNzc3NzA5MjEgLTIuMjUgMTYuMjUgQy0yLjI1NzczNDM4IDE1LjQ2MzY3MTg4IC0yLjI2NTQ2ODc1IDE0LjY3NzM0Mzc1IC0yLjI3MzQzNzUgMTMuODY3MTg3NSBDLTIuMjU2ODM4MzYgOC44NzA4NDc1NSAtMS41OTU2NjE5NSA0LjczNjMyOTkxIDAgMCBaICIgZmlsbD0iIzIyMUUyMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTY5LDcxKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjY3NTQyOTc2IDAuMjg2MDQ4OTggMy4zNDM4NTM0MyAwLjYxNzgxMjMzIDUgMSBDNi4wNjgwODM3NCA3LjI3NDk5MTk3IDcuMDQzNjc4MzkgMTMuODY4OTY0ODMgNSAyMCBDNC40NDQ5NTIwOSAyNS44ODM1MDc4OCA1Ljc0ODA2MTcyIDI4LjIyMzcxNTY1IDkgMzMgQzkuNjgyNDU2MDcgMzcuMDA5NDI5NCA5LjA2MjU0MzA2IDM5LjEyMDM1OTYxIDYuOTM3NSA0Mi40Mzc1IEM1LjE4NzQ3ODQxIDQ1LjI2MTExNjM5IDQuOTk5MzU1NTggNDUuOTYzOTEyNyA1LjA2MjUgNDkuNSBDNi4wNjQxNTYzNSA1My4yMzk1MTcwMiA3LjQxMDgyMDg0IDU2LjQ3NjE2Nzk1IDkgNjAgQzkgNjAuNjYgOSA2MS4zMiA5IDYyIEM4LjAxIDYyIDcuMDIgNjIgNiA2MiBDNS4xMjcyMDEzOCA2MC4xMzM2MDAxOSA0LjI3NzQ4OTczIDU4LjI1NjM5Mzg5IDMuNDM3NSA1Ni4zNzUgQzIuOTYxODM1OTQgNTUuMzMwODU5MzggMi40ODYxNzE4OCA1NC4yODY3MTg3NSAxLjk5NjA5Mzc1IDUzLjIxMDkzNzUgQzAuODc4NDcyMzMgNDkuNjA4MjUxOTcgMS4wMTg2Mjk2NiA0Ny42MDg1ODA1MSAyIDQ0IEMyLjUxNTYyNSA0My4xNzUgMy4wMzEyNSA0Mi4zNSAzLjU2MjUgNDEuNSBDNS4zODcwMjc1NiAzOC4zMjY5MDg1OCA1LjUxNjQ0MTE4IDM2LjYxNTA4ODI1IDUgMzMgQzQuMzE5Mzc1IDMyLjA3MTg3NSAzLjYzODc1IDMxLjE0Mzc1IDIuOTM3NSAzMC4xODc1IEMwLjMyMzM1MDI2IDI1Ljg4NjgwMjA0IDAuODgyMTgxNzcgMjIuNzc3MDAxIDIgMTggQzIuMzMgMTcuMzQgMi42NiAxNi42OCAzIDE2IEMzLjQxNzQwMjY4IDExLjA1OTExNzE1IDMuNDg3NDY4NzMgNi40MjIxNjY2NCAxIDIgQzAuMzQgMS42NyAtMC4zMiAxLjM0IC0xIDEgQy0wLjY3IDAuNjcgLTAuMzQgMC4zNCAwIDAgWiAiIGZpbGw9IiMxRDc1NTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzAsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMC42NiAwLjY2IDEuMzIgMSAyIEMwLjY3IDIuNjYgMC4zNCAzLjMyIDAgNCBDMC4wMjM3OTA0IDYuMzExMDc4NzggMC4wMjM3OTA0IDYuMzExMDc4NzggMC4zMTI1IDguODc1IEMwLjM5MTEzMjgxIDkuNzM4NjcxODcgMC40Njk3NjU2MyAxMC42MDIzNDM3NSAwLjU1MDc4MTI1IDExLjQ5MjE4NzUgQzEuMDAzMjA3MjQgMTQuMDE3OTA0NzUgMS44MTI2MDgzMyAxNS43NDgyMTM0IDMgMTggQzMuNzA0NDkyODkgMjMuNDAxMTEyMTcgMS45Mjk0NDIzOSAyNS42MDU4MzY0MiAtMSAzMCBDLTEuNjc4NzgwNTkgMzQuMDcyNjgzNTYgLTEuMzQxNzI0MDYgMzUuNDk4MDkyNzkgMSAzOC45Mzc1IEMzLjQ1MjU5MTI5IDQyLjY5MzAzMDQxIDMuNTUxNTQyOTEgNDQuNTg3NjU2NyAzIDQ5IEMyLjA2NTUzNDY1IDUxLjAzMTQ0NjQxIDEuMDY3NzUyMjQgNTMuMDM1MzM1ODcgMCA1NSBDLTAuNjk5MDc0MTQgNTcuNzM1NzI1ODUgLTAuNjk5MDc0MTQgNTcuNzM1NzI1ODUgLTEgNjAgQy0yLjMyIDU5LjY3IC0zLjY0IDU5LjM0IC01IDU5IEMtNC41MjI2OTE2MiA1Ny41NDEwNTc0IC00LjA0MzA4OTU4IDU2LjA4Mjg2NTA0IC0zLjU2MjUgNTQuNjI1IEMtMy4xNjIyNDYwOSA1My40MDY4MzU5NCAtMy4xNjIyNDYwOSA1My40MDY4MzU5NCAtMi43NTM5MDYyNSA1Mi4xNjQwNjI1IEMtMiA1MCAtMiA1MCAtMSA0OCBDLTAuNTQzMTA3NzYgNDQuMDcwNzI2NzUgLTAuOTU5NzA3MDkgNDEuNzM5NDU4MTMgLTMgMzguNDM3NSBDLTUuNzU4MjkzODQgMzMuNjk2NjgyNDYgLTUuNzU4MjkzODQgMzMuNjk2NjgyNDYgLTUgMzAgQy00LjM0IDI5LjA1MTI1IC0zLjY4IDI4LjEwMjUgLTMgMjcuMTI1IEMtMC41ODgzOTUzIDIzLjM1Njg2NzY2IC0wLjUyMDEwNzIzIDIxLjM5OTAxNzAyIC0xIDE3IEMtMS4zMyAxNi4xOTU2MjUgLTEuNjYgMTUuMzkxMjUgLTIgMTQuNTYyNSBDLTMuNDY1MDU4MjkgMTAuODA4Mjg4MTIgLTMuMzIwMjAxNTkgOC4wMzQ1NDAwMiAtMyA0IEMtMS41IDEuNSAtMS41IDEuNSAwIDAgWiAiIGZpbGw9IiNGMUY2RjQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNTEsNjApIi8+CjxwYXRoIGQ9Ik0wIDAgQzMgMSAzIDEgNSA0IEM1IDQuOTkgNSA1Ljk4IDUgNyBDNS42NiA2LjY3IDYuMzIgNi4zNCA3IDYgQzguNTQwMjM5OTYgNS45MzA0OTQ1OSAxMC4wODMzNDk4OCA1LjkxNTQ3NjQzIDExLjYyNSA1LjkzNzUgQzEyLjg1MDg5ODQ0IDUuOTUxMDM1MTYgMTIuODUwODk4NDQgNS45NTEwMzUxNiAxNC4xMDE1NjI1IDUuOTY0ODQzNzUgQzE1LjA0MTI4OTA2IDUuOTgyMjQ2MDkgMTUuMDQxMjg5MDYgNS45ODIyNDYwOSAxNiA2IEMxNS4yMzY4NzUgNi43NDI1IDE0LjQ3Mzc1IDcuNDg1IDEzLjY4NzUgOC4yNSBDMTEuMDU1OTU5NzIgMTAuNzU4MDE3NDUgMTEuMDU1OTU5NzIgMTAuNzU4MDE3NDUgOS42NTIzNDM3NSAxMy4wOTc2NTYyNSBDNy41MTM0ODk4OSAxNS41NjAxMTkyIDYuMDYwMDUxNDUgMTUuNzE4NTYzODUgMi44NzUgMTYuMTg3NSBDLTAuMzYzMTQzNTQgMTYuNDU4MzM3OTMgLTAuMzYzMTQzNTQgMTYuNDU4MzM3OTMgLTMgMTggQy00LjY2NjE3MTE1IDE4LjA0MDYzODMyIC02LjMzMzg4MDk1IDE4LjA0MjcyMSAtOCAxOCBDLTcuMjU5NDMzNTkgMTYuOTMwNzIyNjYgLTcuMjU5NDMzNTkgMTYuOTMwNzIyNjYgLTYuNTAzOTA2MjUgMTUuODM5ODQzNzUgQy0xLjU0NzYwNyA4LjUwMTAxOTAzIC0xLjU0NzYwNyA4LjUwMTAxOTAzIDAgMCBaICIgZmlsbD0iI0VGRjVGMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNiw1NSkiLz4KPHBhdGggZD0iTTAgMCBDMS44NzUgMS4xMjUgMS44NzUgMS4xMjUgMyAzIEMzLjY4NzUgNi4xODc1IDMuNjg3NSA2LjE4NzUgNCA5IEMwLjM3IDkgLTMuMjYgOSAtNyA5IEMtNi4wMSA5Ljk5IC01LjAyIDEwLjk4IC00IDEyIEMtMC4zNTQ1ODE1NSAxMS43NjUyMjgwMSAtMC4zNTQ1ODE1NSAxMS43NjUyMjgwMSAzIDExIEMyLjY3IDEyLjY1IDIuMzQgMTQuMyAyIDE2IEMtNC4yNDE1OTc5NyAxNy4zNDYyMjcwMSAtNC4yNDE1OTc5NyAxNy4zNDYyMjcwMSAtNy44NzUgMTUuNjg3NSBDLTEwIDE0IC0xMCAxNCAtMTEgMTIgQy0xMS41NzE0Mjg1NyA0LjkxNDI4NTcxIC0xMS41NzE0Mjg1NyA0LjkxNDI4NTcxIC05LjQzNzUgMS41IEMtNi4wODk2NTY1MSAtMC41NjAyMTEzOCAtMy44NTk4NTc1MyAtMC40OTEyNTQ1OSAwIDAgWiBNLTUgMyBDLTUuOTkgNC40ODUgLTUuOTkgNC40ODUgLTcgNiBDLTQuNjkgNiAtMi4zOCA2IDAgNiBDLTAuNjYgNS4wMSAtMS4zMiA0LjAyIC0yIDMgQy0yLjk5IDMgLTMuOTggMyAtNSAzIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTAwLDkzKSIvPgo8cGF0aCBkPSJNMCAwIEMxMC44OSAwIDIxLjc4IDAgMzMgMCBDMzIuNjcgMS4zMiAzMi4zNCAyLjY0IDMyIDQgQzI5LjA3ODAyMzEgNS40NjA5ODg0NSAyNi41MDEwNjUyNSA1LjExMTM0OTAxIDIzLjI0MjE4NzUgNS4wOTc2NTYyNSBDMjIuMjQ3NjEwMzIgNS4wOTU1MzM4MyAyMi4yNDc2MTAzMiA1LjA5NTUzMzgzIDIxLjIzMjk0MDY3IDUuMDkzMzY4NTMgQzE5LjExMzU4MTM3IDUuMDg3NzY3NTQgMTYuOTk0MzI3NDEgNS4wNzUyMTUgMTQuODc1IDUuMDYyNSBDMTMuNDM4ODAzNjEgNS4wNTc0ODUxMiAxMi4wMDI2MDU1NiA1LjA1MjkyMjE5IDEwLjU2NjQwNjI1IDUuMDQ4ODI4MTIgQzcuMDQ0MjM2NTUgNS4wMzc3OTc4MiAzLjUyMjEyODU1IDUuMDIwNTMyNTkgMCA1IEMwIDMuMzUgMCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTQ5LDcyKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjIxNzQ5MjE5IC0wLjA3NDE5MTM0IDguNDM0NjM4MTEgLTAuMTI4NjIwNCAxMi42NTI1ODc4OSAtMC4xNjQ3OTQ5MiBDMTQuMDg3MjI1NTIgLTAuMTc5ODc1ODkgMTUuNTIxODE3MDggLTAuMjAwMzQzOCAxNi45NTYyOTg4MyAtMC4yMjYzMTgzNiBDMTkuMDE5MTU4NTkgLTAuMjYyNzM0MzcgMjEuMDgxNDA4NTggLTAuMjc5NzMyNDMgMjMuMTQ0NTMxMjUgLTAuMjkyOTY4NzUgQzI1LjAwNjIxOTQ4IC0wLjMxNjUzNDQyIDI1LjAwNjIxOTQ4IC0wLjMxNjUzNDQyIDI2LjkwNTUxNzU4IC0wLjM0MDU3NjE3IEMzMCAwIDMwIDAgMzEuOTI4NDY2OCAxLjM5MzMxMDU1IEMzMyAzIDMzIDMgMzMgNSBDMjIuMTEgNSAxMS4yMiA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0OSw3OSkiLz4KPHBhdGggZD0iTTAgMCBDMC42NiAwIDEuMzIgMCAyIDAgQzIuMDg2MzY3MTkgMC41Njg0NzY1NiAyLjE3MjczNDM3IDEuMTM2OTUzMTIgMi4yNjE3MTg3NSAxLjcyMjY1NjI1IEMzLjM1MjcwNTM2IDcuNzE4MDc4MSA1LjI4MTQzMTU2IDExLjIwNTAwMzg1IDkgMTYgQzkgMTYuNjYgOSAxNy4zMiA5IDE4IEM4LjI3NTU0Njg3IDE3Ljg0NjYwMTU2IDcuNTUxMDkzNzUgMTcuNjkzMjAzMTIgNi44MDQ2ODc1IDE3LjUzNTE1NjI1IEM0LjA3MzM2NjA3IDE2Ljk3MzE0OTc3IDQuMDczMzY2MDcgMTYuOTczMTQ5NzcgMS41NzAzMTI1IDE2Ljc0NjA5Mzc1IEMtNC45MDkwNjM1OCAxNS45Mjg0MDg5MSAtNy44MDY5NTYzOCAxMy44OTExMzYyMyAtMTEuODIwMzEyNSA4Ljc3NzM0Mzc1IEMtMTMgNyAtMTMgNyAtMTMgNiBDLTYuMzc1IDUuODc1IC02LjM3NSA1Ljg3NSAtMyA3IEMtMi44NzYyNSA2LjQwMTg3NSAtMi43NTI1IDUuODAzNzUgLTIuNjI1IDUuMTg3NSBDLTIgMyAtMiAzIDAgMCBaICIgZmlsbD0iI0YyRjdGNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5NCw1NSkiLz4KPHBhdGggZD0iTTAgMCBDMSAyIDEgMiAwLjkzNzUgNS44MTI1IEMwLjg3OTY0ODA4IDkuMzg2NDYzMTggMS42NDA2MzE3NyAxMS42ODY1Mzk5NCAzIDE1IEMzLjQ3NzIyODgxIDE5LjM3NDU5NzM5IDMuNDk4NjQwNDQgMjEuMjg5ODE1MTMgMC45Mzc1IDI0LjkzNzUgQy0xLjA1MTY1MDY5IDI4LjA4MTY0MTQxIC0xLjI4MzkwMDM2IDI4LjY1NDU4MTU5IC0wLjkzNzUgMzIuMTI1IEMtMC4wNDE1OTEyMiAzNS44MjgwODk2MSAwLjc4Mzk2MDg3IDM3LjEwOTUxNDE4IDMgNDAgQzMuNjQwNzA0NzggNDQuOTEyMDY5OTQgMi4yODAwNjUxNiA0Ny43MTM0Nzc1IDAgNTIgQy0wLjY5OTA3NDE0IDU0LjczNTcyNTg1IC0wLjY5OTA3NDE0IDU0LjczNTcyNTg1IC0xIDU3IEMtMS45OSA1NyAtMi45OCA1NyAtNCA1NyBDLTMuMjQ3ODEzNDEgNTAuNDgxMDQ5NTYgLTMuMjQ3ODEzNDEgNTAuNDgxMDQ5NTYgLTEuOTM3NSA0Ny45Mzc1IEMtMC41NTU0NjYzNyA0NS4wODEyOTcxNyAtMC42Mjk3ODY4MiA0My4xNDY4MTIgLTEgNDAgQy0xLjkyMzQ0MjExIDM4LjIzNzkyNDggLTEuOTIzNDQyMTEgMzguMjM3OTI0OCAtMy4wNjI1IDM2LjUgQy00LjcyOTM3MDExIDMzLjgyMjM2ODIyIC01LjAwMjU5OTI2IDMzLjEzMjU2MjEgLTQuOTM3NSAyOS44MTI1IEMtNCAyNyAtNCAyNyAtMi40Mzc1IDI1LjE4NzUgQy0wLjE2NjczOTU4IDIxLjczMTk5NTAyIC0wLjYxNDU0MzE5IDE4LjAyNTA1ODY1IC0xIDE0IEMtMS4zMyAxMy4wMSAtMS42NiAxMi4wMiAtMiAxMSBDLTIuMTY3OTY4NzUgOS4wNjI1IC0yLjE2Nzk2ODc1IDkuMDYyNSAtMi4xODc1IDcgQy0yLjIwMTY3OTY5IDYuMzE5Mzc1IC0yLjIxNTg1OTM4IDUuNjM4NzUgLTIuMjMwNDY4NzUgNC45Mzc1IEMtMiAzIC0yIDMgMCAwIFogIiBmaWxsPSIjMTQ3MDRCIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ4LDYyKSIvPgo8cGF0aCBkPSJNMCAwIEMxMi44NyAwIDI1Ljc0IDAgMzkgMCBDMzUuMDM1MDk2OTkgMy45NjQ5MDMwMSAzNS4wMzUwOTY5OSAzLjk2NDkwMzAxIDMwLjY1MTg1NTQ3IDQuMTEzNTI1MzkgQzI5LjIyMzYyMzAzIDQuMTEzMzY2ODggMjcuNzk1Mzg0NTggNC4xMDc3MDczNSAyNi4zNjcxODc1IDQuMDk3NjU2MjUgQzI1LjIzOTQzNDA1IDQuMDk1NTMzODMgMjUuMjM5NDM0MDUgNC4wOTU1MzM4MyAyNC4wODg4OTc3MSA0LjA5MzM2ODUzIEMyMS42ODQyMjQ5IDQuMDg3NzY0NjUgMTkuMjc5NjQ0NzMgNC4wNzUyMTE1NyAxNi44NzUgNC4wNjI1IEMxNS4yNDYwOTUwOSA0LjA1NzQ4NTUgMTMuNjE3MTg4NzMgNC4wNTI5MjI1IDExLjk4ODI4MTI1IDQuMDQ4ODI4MTIgQzcuOTkyMTUxNzMgNC4wMzc3OTM5NyAzLjk5NjA5MTU4IDQuMDIwNTI2NzkgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFGNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0MSwxMDIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNDQ1MDA2NiAyLjkzNTY2NDIzIDMuNTc0ODI0NjQgNS4yNTc0NDI5NCAzLjk2ODc1IDkuNTk3NjU2MjUgQzMuOTk4ODM1MiAxMS45MTA0NTU4IDMuNzA3ODg2MzggMTMuODY2Mzg3MzUgMy4yNSAxNi4xMjUgQzIuOTg0MTIwNjEgMjAuMjQ2MTMwNTMgMy4xMDk4NDA0MiAyMC42ODU1NzQyMiA1LjQzNzUgMjMuNzUgQzUuOTEwNTg1OTQgMjQuMjgxMDkzNzUgNi4zODM2NzE4NyAyNC44MTIxODc1IDYuODcxMDkzNzUgMjUuMzU5Mzc1IEM4IDI3IDggMjcgOCAzMSBDMTAuMzEgMzEuNjYgMTIuNjIgMzIuMzIgMTUgMzMgQzE1IDMzLjk5IDE1IDM0Ljk4IDE1IDM2IEMxNi4zMiAzNi42NiAxNy42NCAzNy4zMiAxOSAzOCBDMTkgMzguOTkgMTkgMzkuOTggMTkgNDEgQzE3LjkxNzE4NzUgNDAuNDc0MDYyNSAxNy45MTcxODc1IDQwLjQ3NDA2MjUgMTYuODEyNSAzOS45Mzc1IEMxNC4wNzY4ODc3IDM4Ljc1NjQ4MjEyIDE0LjA3Njg4NzcgMzguNzU2NDgyMTIgMTEuNSAzOS41NjI1IEM5IDQwIDkgNDAgNi4xODc1IDM4LjU2MjUgQzUuNDY1NjI1IDM4LjA0Njg3NSA0Ljc0Mzc1IDM3LjUzMTI1IDQgMzcgQzQuMTk1MjkyOTcgMzYuMTY0Njg3NSA0LjE5NTI5Mjk3IDM2LjE2NDY4NzUgNC4zOTQ1MzEyNSAzNS4zMTI1IEM1LjMwMzg2MTMxIDMwLjQ2NzI5MzAxIDUuMzAzODYxMzEgMzAuNDY3MjkzMDEgMy45MTc5Njg3NSAyNS44NjcxODc1IEMyLjk3NDUwMDc2IDI0LjU0MTY1Mzk2IDIuMDI5MTkzNjQgMjMuMjE3NDI3NDggMS4wODIwMzEyNSAyMS44OTQ1MzEyNSBDLTAuNjgwNTA5NzQgMTguODA4NDkzNzggMC4yMzQyODE5NyAxNi4zNTczNzkwNyAxIDEzIEMxLjA4MjI5MTcgMTEuNDM5MTEyMjkgMS4xMjI0NDU5OSA5Ljg3NTU1MzM3IDEuMTI1IDguMzEyNSBDMS4xMjg4NjcxOSA3LjIyMzg4NjcyIDEuMTI4ODY3MTkgNy4yMjM4ODY3MiAxLjEzMjgxMjUgNi4xMTMyODEyNSBDMC45OTc4MDczMiAzLjk2NTExMDU5IDAuNTg3NzI5NCAyLjA2NjM4MTk1IDAgMCBaICIgZmlsbD0iI0VGRjVGMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3OCw2MykiLz4KPHBhdGggZD0iTTAgMCBDOS4yNCAwIDE4LjQ4IDAgMjggMCBDMjggMS42NSAyOCAzLjMgMjggNSBDMTguNzYgNSA5LjUyIDUgMCA1IEMwIDMuMzUgMCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTEwLDk0KSIvPgo8cGF0aCBkPSJNMCAwIEM5LjI0IDAgMTguNDggMCAyOCAwIEMyOCAxLjY1IDI4IDMuMyAyOCA1IEMxOC43NiA1IDkuNTIgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MTAsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzkuMjQgMCAxOC40OCAwIDI4IDAgQzI4IDEuNjUgMjggMy4zIDI4IDUgQzE4Ljc2IDUgOS41MiA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUxMCw1MCkiLz4KPHBhdGggZD0iTTAgMCBDMCAzIDAgMyAtMSA1IEMtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAwIDE2IEMwLjc1NDE0MjM1IDIyLjQ5MDU2OTM3IC0wLjI2NzY1MDE5IDI1LjU4MjA3Mjg1IC00IDMxIEMtMy45Mjc0OTIxNCAzNC41NTI4ODQ5NCAtMy4zMTc3NDE2NCAzNi40OTE2MTMzNyAtMS40Mzc1IDM5LjUgQzAuNDMyMjMyNTQgNDIuNzUxNzA4NzYgMC40OTI4MjA0OCA0NC4yNjg2NDQ5NCAwIDQ4IEMtMS4xNzkwNDA1IDUxLjQwNDQxNTYzIC0yLjU0MTk2MzU0IDU0LjcwNjM5OTc4IC00IDU4IEMtNC45OSA1Ny42NyAtNS45OCA1Ny4zNCAtNyA1NyBDLTYuNTc1MjcyMSA1NC40NTE2MzI2IC02LjE4NjYwNjY3IDUyLjM0MDI4Mjc1IC00LjkzNzUgNTAuMDYyNSBDLTMuNjI5MDkzODEgNDcuMTg0MDA2MzkgLTMuNjg2MTgxNDMgNDUuMTM4MTg1NzMgLTQgNDIgQy00LjQ5NSA0MS4wMSAtNC45OSA0MC4wMiAtNS41IDM5IEMtNy4yMTc0NTA3IDM1LjU2NTA5ODYgLTcuNTUyMzU3MzMgMzMuNzg3NTkzMTMgLTcgMzAgQy01Ljk4MjkyOTY5IDI4LjY2Nzc1MzkxIC01Ljk4MjkyOTY5IDI4LjY2Nzc1MzkxIC00Ljk0NTMxMjUgMjcuMzA4NTkzNzUgQy0yLjU3NzgwMDU3IDIzLjI4MTkyMTg1IC0yLjgyMDAzNjc0IDIwLjUwMjM1NDg2IC0zLjQzNzUgMTYuMDYyNSBDLTQuMjQwNTQ3MzkgMTAuMDc2NjY0NDYgLTMuNzgyNzc2OTMgNi4zMjc0MTg5MSAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogIiBmaWxsPSIjRTRFRUVBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ4LDYwKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjkwOTM4NzAzIDMuNzM5NDEzNjggMy45MDkzODcwMyAzLjczOTQxMzY4IDQuMTMyODEyNSA2Ljg0NzY1NjI1IEM0LjEzMDIzNDM4IDcuNTc4NTU0NjkgNC4xMjc2NTYyNSA4LjMwOTQ1MzEzIDQuMTI1IDkuMDYyNSBDNC4xMjI0MjE4OCA5Ljg2MzAwNzgxIDQuMTE5ODQzNzUgMTAuNjYzNTE1NjMgNC4xMTcxODc1IDExLjQ4ODI4MTI1IEM0LjAwMTcwMTk1IDEzLjk2MzUyMTY0IDMuNjUxMDI0NzkgMTYuMzA3MDIyNDggMy4yNSAxOC43NSBDMi43NjIwMjY5NSAyMi40MjA4OTQxOCAyLjc2MjAyNjk1IDIyLjQyMDg5NDE4IDQuOTM3NSAyNS41NjI1IEM1Ljk1ODQzNzUgMjYuNzY5MDYyNSA1Ljk1ODQzNzUgMjYuNzY5MDYyNSA3IDI4IEM4LjA0NzU1MTk0IDMzLjMxNDE0MzcgNi44NDIyMzI0NCAzNi40OTk3OTg2MyA0IDQxIEMzLjM3MDk3MDM5IDQ1LjkyNzM5ODU3IDQuNzQ3ODkzNDUgNDguNjgzNDYyNDQgNyA1MyBDNyA1NC4zMiA3IDU1LjY0IDcgNTcgQzQgNTYgNCA1NiAyLjc5Njg3NSA1My45MjU3ODEyNSBDLTAuNzYwMjg1NzMgNDUuMDQ2MTUyNDIgLTAuNzYwMjg1NzMgNDUuMDQ2MTUyNDIgMSA0MCBDMS41MTU2MjUgMzkuMTc1IDIuMDMxMjUgMzguMzUgMi41NjI1IDM3LjUgQzQuMzg3MDI3NTYgMzQuMzI2OTA4NTggNC41MTY0NDExOCAzMi42MTUwODgyNSA0IDI5IEMzLjM0IDI4LjAzMDYyNSAyLjY4IDI3LjA2MTI1IDIgMjYuMDYyNSBDLTAuNDEwNTc3ODIgMjIuMzcxMzAyNzIgLTAuNDA4MzI3NTUgMjAuMzI4MjcxOTkgMCAxNiBDMC4zMyAxNS4wMSAwLjY2IDE0LjAyIDEgMTMgQzEuMDkyNDczODEgMTEuNTIzMTM4ODkgMS4xMjk5OTA3MSAxMC4wNDIyNDQ5OSAxLjEyNSA4LjU2MjUgQzEuMTI4ODY3MTkgNy40MTk3NDYwOSAxLjEyODg2NzE5IDcuNDE5NzQ2MDkgMS4xMzI4MTI1IDYuMjUzOTA2MjUgQzEuMDAyNzYwMTUgNC4wNDY4NDE0MSAwLjYwODU2MTk5IDIuMTIwMzA3MjQgMCAwIFogIiBmaWxsPSIjRTZGMEVDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzc0LDYxKSIvPgo8cGF0aCBkPSJNMCAwIEM4LjI1IDAgMTYuNSAwIDI1IDAgQzI1LjY2IDEuNjUgMjYuMzIgMy4zIDI3IDUgQzE4LjA5IDUgOS4xOCA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU4Nyw1NykiLz4KPHBhdGggZD0iTTAgMCBDOC4yNSAwIDE2LjUgMCAyNSAwIEMyNSAxLjY1IDI1IDMuMyAyNSA1IEMxNi40MiA1IDcuODQgNSAtMSA1IEMtMC42NyAzLjM1IC0wLjM0IDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjQsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyLjMzIDEuNjUgMi42NiAzLjMgMyA1IEM0LjY1IDUgNi4zIDUgOCA1IEM3LjAxIDYuNDg1IDcuMDEgNi40ODUgNiA4IEM1LjgzMjg2NDMxIDEwLjYyNTMxNTI0IDUuODMyODY0MzEgMTAuNjI1MzE1MjQgNiAxMyBDNi42NiAxMy4zMyA3LjMyIDEzLjY2IDggMTQgQzcuMzQgMTQgNi42OCAxNCA2IDE0IEM2IDE0LjY2IDYgMTUuMzIgNiAxNiBDMi43IDE2IC0wLjYgMTYgLTQgMTYgQy00IDE1LjM0IC00IDE0LjY4IC00IDE0IEMtNC42NiAxMy42NyAtNS4zMiAxMy4zNCAtNiAxMyBDLTUuMzQgMTMgLTQuNjggMTMgLTQgMTMgQy0zLjc5OTEzNTU3IDkuMjg0MDA4MDkgLTMuODQ4MDU2MyA4LjIyNzkxNTU1IC02IDUgQy00LjM1IDUgLTIuNyA1IC0xIDUgQy0wLjY3IDMuMzUgLTAuMzQgMS43IDAgMCBaICIgZmlsbD0iI0Q4RTdFMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2MCwzNykiLz4KPHBhdGggZD0iTTAgMCBDMCAxLjY1IDAgMy4zIDAgNSBDLTAuNzYzMTI1IDQuNzczMTI1IC0xLjUyNjI1IDQuNTQ2MjUgLTIuMzEyNSA0LjMxMjUgQy0zLjE5OTM3NSA0LjIwOTM3NSAtNC4wODYyNSA0LjEwNjI1IC01IDQgQy02LjgzNTQ3OTkgNS4zMzM3ODU3NSAtNi44MzU0Nzk5IDUuMzMzNzg1NzUgLTggNyBDLTcuMzQgOC42NSAtNi42OCAxMC4zIC02IDEyIEMtMy42OSAxMiAtMS4zOCAxMiAxIDEyIEMxIDEzLjMyIDEgMTQuNjQgMSAxNiBDLTUuMjAwODE5NjcgMTcuMzM3NDMxNjkgLTUuMjAwODE5NjcgMTcuMzM3NDMxNjkgLTguODEyNSAxNS44MTI1IEMtMTEuMTQwMzY2MTcgMTMuODgzNjk2NiAtMTIuMTcyMjU2MTEgMTIuODk3MTAzNjEgLTEzIDEwIEMtMTIuODU1NzAyNCA2LjUzNjg1NzUgLTEyLjM0NTYyNDk3IDQuNTI1MzQ5OTYgLTEwLjQzNzUgMS42MjUgQy02Ljg1NzUyODY3IC0wLjc2MTY0NzU1IC00LjI0ODUyOTc0IC0wLjI4MzIzNTMyIDAgMCBaICIgZmlsbD0iIzAwODQyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE5Miw5MykiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQzEuNjUgMyAzLjMgMyA1IDMgQzUgNC4zMiA1IDUuNjQgNSA3IEMzLjM1IDcgMS43IDcgMCA3IEMwIDkuOTcgMCAxMi45NCAwIDE2IEMxLjY1IDE1LjY3IDMuMyAxNS4zNCA1IDE1IEM1IDE2LjMyIDUgMTcuNjQgNSAxOSBDMS43MTMwMzc2NyAxOS43OTk1MzEzOCAwLjI4OTc2ODA4IDIwLjA5NjU4OTM2IC0zIDE5IEMtNC4yNjIzNzczMSAxNi40NzUyNDUzOCAtNC4wOTg1NjQwNCAxNC42ODc5OTUzNCAtNC4wNjI1IDExLjg3NSBDLTQuMDUzNDc2NTYgMTAuOTY0OTIxODggLTQuMDQ0NDUzMTMgMTAuMDU0ODQzNzUgLTQuMDM1MTU2MjUgOS4xMTcxODc1IEMtNC4wMjM1NTQ2OSA4LjQxODUxNTYyIC00LjAxMTk1MzEzIDcuNzE5ODQzNzUgLTQgNyBDLTQuOTkgNyAtNS45OCA3IC03IDcgQy0zLjg2MjA2ODk3IDAgLTMuODYyMDY4OTcgMCAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMzcsOTApIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMS42NSAwLjY2IDMuMyAxIDUgQzAuMDUxMjUgNC43OTM3NSAtMC44OTc1IDQuNTg3NSAtMS44NzUgNC4zNzUgQy0zLjQyMTg3NSA0LjE4OTM3NSAtMy40MjE4NzUgNC4xODkzNzUgLTUgNCBDLTcuMzQ5NzM4MTggNS44OTc1NTE0NCAtNy4zNDk3MzgxOCA1Ljg5NzU1MTQ0IC03LjEyNSA5LjEyNSBDLTcuMDYzMTI1IDEwLjU0ODEyNSAtNy4wNjMxMjUgMTAuNTQ4MTI1IC03IDEyIEMtNC4zNiAxMiAtMS43MiAxMiAxIDEyIEMxIDEzLjMyIDEgMTQuNjQgMSAxNiBDLTUuMzI5OTc5ODggMTcuMjE3MzAzODIgLTUuMzI5OTc5ODggMTcuMjE3MzAzODIgLTguMzEyNSAxNi4yNSBDLTEwIDE1IC0xMCAxNSAtMTIgMTIgQy0xMi40NDUwNTU3NiA3Ljk5NDQ5ODEzIC0xMi4zNDMxOTE2NyA1LjY3MjA4MzY5IC0xMC41IDIuMDYyNSBDLTYuODg4MjI0MDkgLTAuOTE3MjE1MTMgLTQuNTg5MTk0MjEgLTAuMzgyNDMyODUgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTIyLDkzKSIvPgo8cGF0aCBkPSJNMCAwIEM3LjU5IDAgMTUuMTggMCAyMyAwIEMyMy4zMyAxLjY1IDIzLjY2IDMuMyAyNCA1IEMxNi4wOCA1IDguMTYgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRjcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1ODcsNTApIi8+CjxwYXRoIGQ9Ik0wIDAgQzcuMjYgMCAxNC41MiAwIDIyIDAgQzIyIDEuNjUgMjIgMy4zIDIyIDUgQzE0LjQxIDUgNi44MiA1IC0xIDUgQy0wLjY3IDMuMzUgLTAuMzQgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTYyNyw1MCkiLz4KPHBhdGggZD0iTTAgMCBDMy45NiAwIDcuOTIgMCAxMiAwIEMxMiAzLjY2NjY2NjY3IDEyIDcuMzMzMzMzMzMgMTIgMTEgQzguMDQgMTEgNC4wOCAxMSAwIDExIEMwIDcuMzMzMzMzMzMgMCAzLjY2NjY2NjY3IDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc4MiwxMTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzkuMjQgMCAxOC40OCAwIDI4IDAgQzI4IDEuMzIgMjggMi42NCAyOCA0IEMxOC43NiA0IDkuNTIgNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTEwLDEwMikiLz4KPHBhdGggZD0iTTAgMCBDMCAxLjY1IDAgMy4zIDAgNSBDLTAuNTU1NTg1OTQgNC41MTQwMjM0NCAtMS4xMTExNzE4OCA0LjAyODA0Njg4IC0xLjY4MzU5Mzc1IDMuNTI3MzQzNzUgQy00LjM3OTY1MzUgMS43NDk2NzE5NyAtNS44NjQwNjM4NiAxLjU2NzMyNDE5IC05LjA2MjUgMS41NjI1IEMtOS45MTk3MjY1NiAxLjU0MzE2NDA2IC0xMC43NzY5NTMxMyAxLjUyMzgyODEzIC0xMS42NjAxNTYyNSAxLjUwMzkwNjI1IEMtMTQuMTc3NTgwNDEgMS43OTY0NDEzNyAtMTQuMTc3NTgwNDEgMS43OTY0NDEzNyAtMTUuODA4NTkzNzUgNC4wMjczNDM3NSBDLTE2LjM5ODMzOTg0IDUuMDAzODA4NTkgLTE2LjM5ODMzOTg0IDUuMDAzODA4NTkgLTE3IDYgQy0xNS4wMiA2IC0xMy4wNCA2IC0xMSA2IEMtMTAuNjcgNy42NSAtMTAuMzQgOS4zIC0xMCAxMSBDLTExLjMyIDExIC0xMi42NCAxMSAtMTQgMTEgQy0xNCAxMC4zNCAtMTQgOS42OCAtMTQgOSBDLTE1LjMyIDkgLTE2LjY0IDkgLTE4IDkgQy0xOC4zMyA3LjM1IC0xOC42NiA1LjcgLTE5IDQgQy0xOS42NiA0LjY2IC0yMC4zMiA1LjMyIC0yMSA2IEMtMjEgNC4wMiAtMjEgMi4wNCAtMjEgMCBDLTEzLjk3OTM2NDY0IC0yLjM5MDAwMzUzIC02Ljg1MjIxNDU0IC0zLjUzNjYyNjg2IDAgMCBaICIgZmlsbD0iIzE5NzM0RiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3MCw1NykiLz4KPHBhdGggZD0iTTAgMCBDNi45MyAwIDEzLjg2IDAgMjEgMCBDMjEgMS42NSAyMSAzLjMgMjEgNSBDMTQuMDcgNSA3LjE0IDUgMCA1IEMwIDMuMzUgMCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjI5LDk0KSIvPgo8cGF0aCBkPSJNMCAwIEMwIDAuOTkgMCAxLjk4IDAgMyBDLTAuOTkgMyAtMS45OCAzIC0zIDMgQy0zIDMuNjYgLTMgNC4zMiAtMyA1IEMtMi4wMSA1LjMzIC0xLjAyIDUuNjYgMCA2IEMwIDcuMzIgMCA4LjY0IDAgMTAgQy02LjYyNSAxMi44NzUgLTYuNjI1IDEyLjg3NSAtMTAgMTQgQy0xMS4xOTI4NzQxMSAxMC4xMjMxNTkxMyAtMTIgNy4wODM3ODA3NyAtMTIgMyBDLTEwLjc1MzM2NjY5IDIuNDkxNjY0MDkgLTkuNTAyNTA2MTMgMS45OTM2ODg1NSAtOC4yNSAxLjUgQy03LjU1MzkwNjI1IDEuMjIxNTYyNSAtNi44NTc4MTI1IDAuOTQzMTI1IC02LjE0MDYyNSAwLjY1NjI1IEMtNCAwIC00IDAgMCAwIFogIiBmaWxsPSIjMUM3NTUxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzI5LDgwKSIvPgo8cGF0aCBkPSJNMCAwIEM2LjYgMCAxMy4yIDAgMjAgMCBDMjAgMS42NSAyMCAzLjMgMjAgNSBDMTMuNCA1IDYuOCA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaICIgZmlsbD0iIzFFNzBDMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU4Nyw5NCkiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwIDIuNjQgMCA0IDAgQzQgNy45MiA0IDE1Ljg0IDQgMjQgQzIuNjggMjQgMS4zNiAyNCAwIDI0IEMwIDE2LjA4IDAgOC4xNiAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNzcsODUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuNjA4NzUgLTAuMDIwNjI1IDMuMjE3NSAtMC4wNDEyNSA0Ljg3NSAtMC4wNjI1IEM1Ljc3OTkyMTg4IC0wLjA3NDEwMTU2IDYuNjg0ODQzNzUgLTAuMDg1NzAzMTIgNy42MTcxODc1IC0wLjA5NzY1NjI1IEMxMCAwIDEwIDAgMTIgMSBDMTEuMzQgMi4zMiAxMC42OCAzLjY0IDEwIDUgQzguMzUgNSA2LjcgNSA1IDUgQzQuNjcgOC42MyA0LjM0IDEyLjI2IDQgMTYgQzIuNjggMTYgMS4zNiAxNiAwIDE2IEMwIDEwLjcyIDAgNS40NCAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxNDksOTMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzYuMjcgMCAxMi41NCAwIDE5IDAgQzE4LjY3IDEuNjUgMTguMzQgMy4zIDE4IDUgQzEyLjM5IDUgNi43OCA1IDEgNSBDMC42NyAzLjM1IDAuMzQgMS43IDAgMCBaICIgZmlsbD0iIzFGNzBDMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTYwOSw3OSkiLz4KPHBhdGggZD0iTTAgMCBDNi45MyAwIDEzLjg2IDAgMjEgMCBDMjEgMS4zMiAyMSAyLjY0IDIxIDQgQzEzLjc0IDQgNi40OCA0IC0xIDQgQy0wLjY3IDIuNjggLTAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjEsNjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuODEyNSAyLjE4NzUgMC44MTI1IDIuMTg3NSAxIDUgQy0xLjEyNSA3Ljg3NSAtMS4xMjUgNy44NzUgLTQgMTAgQy02LjgxMjUgOS44MTI1IC02LjgxMjUgOS44MTI1IC05IDkgQy05Ljc1IDYuNzUgLTkuNzUgNi43NSAtMTAgNCBDLTcuMTk2NDEzNTIgLTAuMTQ5MzA3OTkgLTQuODI5NDYzOCAtMC40MzkwNDIxNiAwIDAgWiAiIGZpbGw9IiMwMDg0MjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMDgsNDApIi8+CjxwYXRoIGQ9Ik0wIDAgQzYuOTMgMCAxMy44NiAwIDIxIDAgQzIxIDEuMzIgMjEgMi42NCAyMSA0IEMxNC4wNyA0IDcuMTQgNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjI5LDEwMikiLz4KPHBhdGggZD0iTTAgMCBDNi42IDAgMTMuMiAwIDIwIDAgQzIwLjMzIDEuMzIgMjAuNjYgMi42NCAyMSA0IEMxNC4wNyA0IDcuMTQgNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTk1LDY1KSIvPgo8cGF0aCBkPSJNMCAwIEM2LjYgMCAxMy4yIDAgMjAgMCBDMjAgMS4zMiAyMCAyLjY0IDIwIDQgQzEzLjQgNCA2LjggNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTg3LDEwMikiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwLjY2IDAuNjYgMS4zMiAxIDIgQzAuNjcgMi42NiAwLjM0IDMuMzIgMCA0IEMwLjAyMzc5MDQgNi4zMTEwNzg3OCAwLjAyMzc5MDQgNi4zMTEwNzg3OCAwLjMxMjUgOC44NzUgQzAuMzkxMTMyODEgOS43Mzg2NzE4NyAwLjQ2OTc2NTYzIDEwLjYwMjM0Mzc1IDAuNTUwNzgxMjUgMTEuNDkyMTg3NSBDMS4wMDMyMDcyNCAxNC4wMTc5MDQ3NSAxLjgxMjYwODMzIDE1Ljc0ODIxMzQgMyAxOCBDMy42ODc1MDI5NCAyMy4yNzA4NTU4NiAyLjE2OTQxODg1IDI1Ljg0MDEzNzc1IC0xIDMwIEMtMS42NiAyOS42NyAtMi4zMiAyOS4zNCAtMyAyOSBDLTIuNTA1IDI3Ljk3OTA2MjUgLTIuNTA1IDI3Ljk3OTA2MjUgLTIgMjYuOTM3NSBDLTAuNTQwNjAwMTQgMjIuNjUwNTEyOSAtMC4yNjA1MDE3MyAxOC44MDI1MjcwNCAtMiAxNC41NjI1IEMtMy40NjUwNTgyOSAxMC44MDgyODgxMiAtMy4zMjAyMDE1OSA4LjAzNDU0MDAyIC0zIDQgQy0xLjUgMS41IC0xLjUgMS41IDAgMCBaICIgZmlsbD0iI0U1RUZFQiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1MSw2MCkiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwIDAuNjYgMCAxIDAgQzAuOTg4Mzk4NDQgMC43NTAyMzQzNyAwLjk3Njc5Njg3IDEuNTAwNDY4NzUgMC45NjQ4NDM3NSAyLjI3MzQzNzUgQzAuOTE5NjU0NTMgNy4zOTkxODY2NiAwLjk4NDI4NjYxIDEyLjMwMTE4MTk1IDEuNzUgMTcuMzc1IEMyLjE5NjY0NjM5IDIxLjE0NzM1MTI3IDIuMTA3NDI3NTkgMjEuODEwMjExMjYgMC4xMjUgMjUuMzEyNSBDLTAuOTI2ODc1IDI2LjY0MjgxMjUgLTAuOTI2ODc1IDI2LjY0MjgxMjUgLTIgMjggQy0yLjc4MjE1NTg4IDMwLjcyODI1MDQgLTIuNzgyMTU1ODggMzAuNzI4MjUwNCAtMyAzMyBDLTMuOTkgMzMgLTQuOTggMzMgLTYgMzMgQy01LjY2Mzk0OTIgMjkuMzg3NDUzODUgLTUuNDU0NzA0MzIgMjcuNDg1NTg5OSAtMi45Mjk2ODc1IDI0Ljc4OTA2MjUgQy0wLjM4MTE3MzczIDIxLjEwNTU4MzA5IC0wLjgyNDUyNDMzIDE4LjI5NzIzMDcyIC0xLjM3NSAxNC4wNjI1IEMtMS45OTMyNTI0NiA4Ljg4OTQ2NTc5IC0yLjA0NDM3NzU4IDQuOTExMTE3NTYgMCAwIFogIiBmaWxsPSIjMkE3RDVDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQ0LDYyKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjE2MTE1Nzc2IDEuMzY5ODM1MDMgMy45OTI3MDkyIDEuOTg5MDYzOCA2IDUgQzYuNTMwNzQ3NDEgMTAuNTE5NzczMDggNS4zMDE0OTUxMSAxNC4wMjg3NzA1NSAzIDE5IEMyLjMwODU5NDc4IDIxLjc3ODg4NjEzIDIuMzA4NTk0NzggMjEuNzc4ODg2MTMgMiAyNCBDMS4wMSAyNCAwLjAyIDI0IC0xIDI0IEMtMS4yNTgxMzMwMiAyMC4zODYxMzc3NCAtMS4xNjgxNTY2NyAxOC4zMjkzMDY4IDAuNSAxNS4wNjI1IEMyLjczMzE5NzQyIDEwLjUwMzA1NTI2IDIuNjIzNDM0NjEgNi44MzEzMzkxNiAxIDIuMDYyNSBDMC42NyAxLjM4MTg3NSAwLjM0IDAuNzAxMjUgMCAwIFogIiBmaWxsPSIjMTc3MjREIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzUxLDk3KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMzIDAuOTkgMC42NiAxLjk4IDEgMyBDMC41MDUgMy45MDc1IDAuMDEgNC44MTUgLTAuNSA1Ljc1IEMtMi4zNzE1ODI0MSA5LjgwNTA5NTIzIC0yLjA1NTkwNDQyIDExLjcwMDk2MDU3IC0xIDE2IEMtMC4wODA4Mzc4IDE4LjM3NzMwOTU2IDAuOTUxMzM0NzMgMjAuNjc0Njk4NzUgMiAyMyBDMiAyMy42NiAyIDI0LjMyIDIgMjUgQzEuMDEgMjUgMC4wMiAyNSAtMSAyNSBDLTEuODcyNzk4NjIgMjMuMTMzNjAwMTkgLTIuNzIyNTEwMjcgMjEuMjU2MzkzODkgLTMuNTYyNSAxOS4zNzUgQy00LjI3NTk5NjA5IDE3LjgwODc4OTA2IC00LjI3NTk5NjA5IDE3LjgwODc4OTA2IC01LjAwMzkwNjI1IDE2LjIxMDkzNzUgQy02LjEzMjU2NzY4IDEyLjU3MjY2NDE5IC02LjAzOTIzNjQyIDEwLjYzNzMyNzQ1IC01IDcgQy0zLjU1NDMxMTQ1IDQuNDMwOTQwMzUgLTEuODIzMDY5ODYgMi4zMzcyNjkwNSAwIDAgWiAiIGZpbGw9IiMxMzZGNEEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzcsOTQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEM1LjE4NDE5OTU5IDMuNzk2NTQ1NjcgNS4zODczNDU0OCA3LjExNjc2MjIgNS4yMzgyODEyNSAxMS44NjMyODEyNSBDNC45NDYwNDkxMyAxNC40ODM3ODg5NyA0LjA0MjM4MTk1IDE2LjU4OTQ5MTczIDMgMTkgQzIuNzkzNDQ5MzQgMjIuNDQyNTEwOTcgMi45MDYxNjA2OSAyNC43MTg0ODIwOCA0IDI4IEMyLjA2MjUgMjcuNjI1IDIuMDYyNSAyNy42MjUgMCAyNyBDLTEuNDIxNTEzNDUgMjQuMTU2OTczMDkgLTEuMjM5MjI2MDYgMjIuMTY5NzQ1MjggLTEgMTkgQy0wLjUwNSAxNy44NjU2MjUgLTAuMDEgMTYuNzMxMjUgMC41IDE1LjU2MjUgQzIuNTQzNzYwMDggMTAuNzA4NTY5ODEgMi42OTcwMTA1NCA3LjA0NzQ2ODQ1IDEgMi4wNjI1IEMwLjY3IDEuMzgxODc1IDAuMzQgMC43MDEyNSAwIDAgWiAiIGZpbGw9IiNEREVBRTUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNjksNTkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMiAyIDIgMi4yNSA1LjMxMjUgQzIuMDE4NjM0NTIgOC43MjUxNDA4NCAxLjQ3NjUyODggMTAuOTU0NjU5MzUgMCAxNCBDLTAuNjYgMTMuMzQgLTEuMzIgMTIuNjggLTIgMTIgQy0xLjYyNSA4Ljg3NSAtMS42MjUgOC44NzUgLTEgNiBDLTMuMzEgNi4zMyAtNS42MiA2LjY2IC04IDcgQy04LjA0MjcyMSA1LjMzMzg4MDk1IC04LjA0MDYzODMyIDMuNjY2MTcxMTUgLTggMiBDLTUuOTU0NDc5NTggLTAuMDQ1NTIwNDIgLTIuNzI5NDE5MTQgMC4yMzk0MjI3MyAwIDAgWiAiIGZpbGw9IiMwQzZCNDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzAsNjIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuMjkgMCA4LjU4IDAgMTMgMCBDMTMgMS42NSAxMyAzLjMgMTMgNSBDOC43MSA1IDQuNDIgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjksNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuMzIgMCAyLjY0IDAgNCAwIEM0IDUuMjggNCAxMC41NiA0IDE2IEMyLjY4IDE2IDEuMzYgMTYgMCAxNiBDMCAxMC43MiAwIDUuNDQgMCAwIFogIiBmaWxsPSIjMDA4NDI5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTY5LDkzKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzEyLjY3IDAuOTkgMTIuMzQgMS45OCAxMiAzIEMxMC42OCAzIDkuMzYgMyA4IDMgQzggNS42NCA4IDguMjggOCAxMSBDNy4wMSAxMSA2LjAyIDExIDUgMTEgQzUgOC4zNiA1IDUuNzIgNSAzIEMzLjM1IDIuNjcgMS43IDIuMzQgMCAyIEMwIDEuMzQgMCAwLjY4IDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc0OSwxMTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS42NSAxMiAzLjMgMTIgNSBDOC4wNCA1IDQuMDggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1OTUsNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS42NSAxMiAzLjMgMTIgNSBDOC4wNCA1IDQuMDggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MTgsNzkpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS42NSAxMiAzLjMgMTIgNSBDOC4wNCA1IDQuMDggNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWiAiIGZpbGw9IiMxRjcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MTgsNzIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMCAxLjk4IDAgMyAwIEMzIDIuNjQgMyA1LjI4IDMgOCBDNS42NCA4IDguMjggOCAxMSA4IEMxMC42NyA4Ljk5IDEwLjM0IDkuOTggMTAgMTEgQzYuNyAxMSAzLjQgMTEgMCAxMSBDMCA3LjM3IDAgMy43NCAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3OTgsMTE2KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjEyMTE3MTg4IDAuNjAzMjgxMjUgMC4yNDIzNDM3NSAxLjIwNjU2MjUgMC4zNjcxODc1IDEuODI4MTI1IEMwLjUzNDc2NTYzIDIuNjI3MzQzNzUgMC43MDIzNDM3NSAzLjQyNjU2MjUgMC44NzUgNC4yNSBDMS4wMzc0MjE4OCA1LjAzODkwNjI1IDEuMTk5ODQzNzUgNS44Mjc4MTI1IDEuMzY3MTg3NSA2LjY0MDYyNSBDMS45MTcxMzYxNyA5LjAxNDkwNDM4IDEuOTE3MTM2MTcgOS4wMTQ5MDQzOCAzLjA2MjUgMTEuMDkzNzUgQzQuMzcxMjUzNjQgMTMuNzU0ODgyNCA0LjEzMjY4NDUxIDE2LjA4MDk0MDc2IDQgMTkgQzMuMDEgMTkgMi4wMiAxOSAxIDE5IEMwLjcxMTI1IDE3Ljc4MzEyNSAwLjQyMjUgMTYuNTY2MjUgMC4xMjUgMTUuMzEyNSBDLTAuNDgzNjM3NyAxMi44NDMxNjk5MSAtMS4xMzkxMzY4MSAxMC42Njc2MTc2MyAtMi4xMjUgOC4zMTI1IEMtMy4xMDE2MzIyIDUuNzMxNDAwNjMgLTMuMTU2Mzg1NjggMy43MzY3NDk0NSAtMyAxIEMtMSAwIC0xIDAgMCAwIFogIiBmaWxsPSIjMEU2QzQ3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzY4LDEwMikiLz4KPHBhdGggZD0iTTAgMCBDNC45NSAwIDkuOSAwIDE1IDAgQzE0LjM0IDEuMzIgMTMuNjggMi42NCAxMyA0IEM5LjA0IDQgNS4wOCA0IDEgNCBDMC42NyAyLjY4IDAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MTEsODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNjI1NDM5MjIgMC41MTc5MTk4OSA3LjI1MDczNjc2IDEuMDM2Mzk3MjcgMTAuODc1IDEuNTYyNSBDMTIuOTMwODIyNzEgMS44NzcxMDUwMiAxMi45MzA4MjI3MSAxLjg3NzEwNTAyIDE1IDIgQzE1IDMuNjUgMTUgNS4zIDE1IDcgQzkuNTQ1MjA4MTUgNi40MzE3OTI1MiA1LjA4OTQwNzQ0IDUuMDUzNjIwNTUgMCAzIEMwIDIuMDEgMCAxLjAyIDAgMCBaICIgZmlsbD0iI0VFRjRGMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5MSw3MykiLz4KPHBhdGggZD0iTTAgMCBDMy42MyAwIDcuMjYgMCAxMSAwIEMxMSAyLjMxIDExIDQuNjIgMTEgNyBDMTAuMzQgNyA5LjY4IDcgOSA3IEM5IDUuNjggOSA0LjM2IDkgMyBDNy4wMiAzIDUuMDQgMyAzIDMgQzIuNjcgNC4zMiAyLjM0IDUuNjQgMiA3IEMxLjM0IDcgMC42OCA3IDAgNyBDMCA0LjY5IDAgMi4zOCAwIDAgWiAiIGZpbGw9IiNFODIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4MTMsMTIwKSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzEzIDEuMzIgMTMgMi42NCAxMyA0IEM4LjcxIDQgNC40MiA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRjcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MjksODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIuMzMgMS4zMiAxMi42NiAyLjY0IDEzIDQgQzguNzEgNCA0LjQyIDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Miw4NykiLz4KPHBhdGggZD0iTTAgMCBDMy40NDQ0NzI5OSAyLjkzNTIwOTUxIDMuNTc3ODc2MSA1LjI1NjU4Mjc0IDMuOTY0ODQzNzUgOS41OTc2NTYyNSBDMy45OTg0NTQwNiAxMS44OTQzNjEgMy43Mzc5MTUwOSAxMy44NzUxMjQzMyAzLjMxMjUgMTYuMTI1IEMyLjkwNDY5NjM3IDIxLjE4MTc2NSA0LjE4MDYwNDkgMjIuODk5MDYxNjcgNyAyNyBDNi4zNCAyNy4zMyA1LjY4IDI3LjY2IDUgMjggQy0wLjA2ODA5Mzg0IDIxLjI0ODM4NzEgLTAuMDY4MDkzODQgMjEuMjQ4Mzg3MSAwLjE4NzUgMTYuNTYyNSBDMC40NTU2MjUgMTUuMzg2ODc1IDAuNzIzNzUgMTQuMjExMjUgMSAxMyBDMS4wODIyOTE3IDExLjQzOTExMjI5IDEuMTIyNDQ1OTkgOS44NzU1NTMzNyAxLjEyNSA4LjMxMjUgQzEuMTI4ODY3MTkgNy4yMjM4ODY3MiAxLjEyODg2NzE5IDcuMjIzODg2NzIgMS4xMzI4MTI1IDYuMTEzMjgxMjUgQzAuOTk3ODA3MzIgMy45NjUxMTA1OSAwLjU4NzcyOTQgMi4wNjYzODE5NSAwIDAgWiAiIGZpbGw9IiNEMEUyREIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzgsNjMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuMjkgMCA4LjU4IDAgMTMgMCBDMTIuNjcgMS4zMiAxMi4zNCAyLjY0IDEyIDQgQzguMDQgNCA0LjA4IDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Miw2NSkiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQy0xLjU3OTY3ODA3IDMuNjc1MjgyMjMgLTMuMTYzOTE5MDMgNC4zMzk4OTY5NCAtNC43NSA1IEMtNi4wNzI1NzgxMyA1LjU1Njg3NSAtNi4wNzI1NzgxMyA1LjU1Njg3NSAtNy40MjE4NzUgNi4xMjUgQy0xMCA3IC0xMCA3IC0xNCA3IEMtMTQgNS42OCAtMTQgNC4zNiAtMTQgMyBDLTQuNTg5OTc3MjIgLTAuNDQ0MTkxMzQgLTQuNTg5OTc3MjIgLTAuNDQ0MTkxMzQgMCAwIFogIiBmaWxsPSIjRUZGNUYzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzMxLDczKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzEyIDEuMzIgMTIgMi42NCAxMiA0IEM4LjA0IDQgNC4wOCA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1OTUsODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS4zMiAxMiAyLjY0IDEyIDQgQzguMDQgNCA0LjA4IDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0OSw4NykiLz4KPHBhdGggZD0iTTAgMCBDMy45NiAwIDcuOTIgMCAxMiAwIEMxMiAxLjMyIDEyIDIuNjQgMTIgNCBDOC4wNCA0IDQuMDggNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjMUU3MEMwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTE4LDg3KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzEyIDEuMzIgMTIgMi42NCAxMiA0IEM4LjA0IDQgNC4wOCA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1NDksNjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTIgMS4zMiAxMiAyLjY0IDEyIDQgQzguMDQgNCA0LjA4IDQgMCA0IEMwIDIuNjggMCAxLjM2IDAgMCBaICIgZmlsbD0iIzFFNzBDMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUxOCw2NSkiLz4KPHBhdGggZD0iTTAgMCBDMy4zNzQ2MjcxNSAwLjU0NzIzNjgzIDUuMDgyMzUgMS4wNTQ5IDggMyBDNy4zNCA0Ljk4IDYuNjggNi45NiA2IDkgQzQgOCAyIDcgMCA2IEMwIDQuMDIgMCAyLjA0IDAgMCBaICIgZmlsbD0iIzFENzY1MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5Myw5MykiLz4KPHBhdGggZD0iTTAgMCBDMCAzIDAgMyAtMSA1IEMtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAtMS4yMTM3NzcyMSAxMC42MDcwMzIxMyAwIDE2IEMwLjEyNzgxNzg2IDE4LjY3Mzk0OTY0IDAuMDQzOTE4NzEgMjEuMzIwOTU4NTcgMCAyNCBDLTAuNjYgMjQgLTEuMzIgMjQgLTIgMjQgQy0zLjcyNzI5MzA0IDE3LjI5MDY3OTkxIC00Ljc4MjM1NDYyIDEwLjgxODQwMzYgLTMgNCBDLTEuNDQ5MjE4NzUgMS43MTA5Mzc1IC0xLjQ0OTIxODc1IDEuNzEwOTM3NSAwIDAgWiAiIGZpbGw9IiNEOUU4RTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNDgsNjApIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMCAwLjY2IDAgMSAwIEMxIDEuNjUgMSAzLjMgMSA1IEMxLjg4Njg3NSA0LjY5MDYyNSAyLjc3Mzc1IDQuMzgxMjUgMy42ODc1IDQuMDYyNSBDOS4xNjA2NzE0NiAyLjMwNjk1NDQ0IDkuMTYwNjcxNDYgMi4zMDY5NTQ0NCAxMiAyIEMxMi45OSAyLjY2IDEzLjk4IDMuMzIgMTUgNCBDMTQuNjcgNC42NiAxNC4zNCA1LjMyIDE0IDYgQzExLjY4MDI1NzY2IDYuNDE3NTUzNjIgOS4zNDIxNDIwNyA2LjczNTU2NDYgNyA3IEM1LjA1MDkzNzUgNy4yNzg0Mzc1IDUuMDUwOTM3NSA3LjI3ODQzNzUgMy4wNjI1IDcuNTYyNSBDMi4wNTE4NzUgNy43MDY4NzUgMS4wNDEyNSA3Ljg1MTI1IDAgOCBDMCA1LjM2IDAgMi43MiAwIDAgWiAiIGZpbGw9IiMxODcyNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMTcsNjgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMzMzMzMzMzMgMCA2LjY2NjY2NjY3IDAgMTAgMCBDMTAgMS45OCAxMCAzLjk2IDEwIDYgQzcuMzYgNiA0LjcyIDYgMiA2IEMyIDQuNjggMiAzLjM2IDIgMiBDMS4zNCAyIDAuNjggMiAwIDIgQzAgMS4zNCAwIDAuNjggMCAwIFogIiBmaWxsPSIjMDA2NDNDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzg1LDExNykiLz4KPHBhdGggZD0iTTAgMCBDMi45NyAwIDUuOTQgMCA5IDAgQzguNjcgMS42NSA4LjM0IDMuMyA4IDUgQzUuNjkgNSAzLjM4IDUgMSA1IEMwLjY3IDMuMzUgMC4zNCAxLjcgMCAwIFogIiBmaWxsPSIjMUU3MEMxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjE0LDk0KSIvPgo8cGF0aCBkPSJNMCAwIEMwIDAuOTkgMCAxLjk4IDAgMyBDLTMuNjMgNC4zMiAtNy4yNiA1LjY0IC0xMSA3IEMtMTEuMzMgNS42OCAtMTEuNjYgNC4zNiAtMTIgMyBDLTEwLjc1MzM2NjY5IDIuNDkxNjY0MDkgLTkuNTAyNTA2MTMgMS45OTM2ODg1NSAtOC4yNSAxLjUgQy03LjU1MzkwNjI1IDEuMjIxNTYyNSAtNi44NTc4MTI1IDAuOTQzMTI1IC02LjE0MDYyNSAwLjY1NjI1IEMtNCAwIC00IDAgMCAwIFogIiBmaWxsPSIjRUZGNUYyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzI5LDgwKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjA3MDc3Mzc1IDMuMjEyMzIxMjUgMSA1LjYzOTM3ODA3IDEgOSBDMS4zMyA5Ljk5IDEuNjYgMTAuOTggMiAxMiBDMS4wMSAxMiAwLjAyIDEyIC0xIDEyIEMtMS4zMyAxMC4zNSAtMS42NiA4LjcgLTIgNyBDLTMuOTggNyAtNS45NiA3IC04IDcgQy03LjIzNjg3NSA2LjQwMTg3NSAtNi40NzM3NSA1LjgwMzc1IC01LjY4NzUgNS4xODc1IEMtMy42NTE2NDI1IDMuNTMwNDA2NjggLTEuODAyMTcyMSAxLjg5NzAyMzI2IDAgMCBaICIgZmlsbD0iIzBENkI0NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2OCw3NSkiLz4KPHBhdGggZD0iTTAgMCBDMS4yMDE1NzEzMSAzLjYwNDcxMzkzIDEuNTQ5ODEzNDggNy4xMTUwMzA4OCAxLjg3NSAxMC44NzUgQzEuOTYwMDc4MTMgMTEuNTgyNjk1MzEgMi4wNDUxNTYyNSAxMi4yOTAzOTA2MyAyLjEzMjgxMjUgMTMuMDE5NTMxMjUgQzIuNDc2OTI2MjggMTcuMjE5MjgzNTEgMi4yMzk3Mzc5MiAxOC43MTA2NjExMyAtMC40OTIxODc1IDIyLjAwNzgxMjUgQy0xLjMxOTc2NTYyIDIyLjY2NTIzNDM3IC0yLjE0NzM0Mzc1IDIzLjMyMjY1NjI1IC0zIDI0IEMtMi4xMjUgMjAuMTI1IC0yLjEyNSAyMC4xMjUgLTEgMTkgQy0wLjkzOTY4OTYzIDE1LjM4NTE0NzQyIC0wLjk4MDA1NDkzIDExLjc4NDEzNTc2IC0xLjAzOTA2MjUgOC4xNjk5MjE4OCBDLTEuMTAwMTMzMTUgMi4yMDAyNjYyOSAtMS4xMDAxMzMxNSAyLjIwMDI2NjI5IDAgMCBaICIgZmlsbD0iI0RERUFFNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM0Miw2NSkiLz4KPHBhdGggZD0iTTAgMCBDMSAyIDEgMiAwLjkzNzUgNS42ODc1IEMwLjg2OTQ3NzA3IDkuODIxNzgyMyAxLjY5NjU0Mzg5IDEzLjA4OTYzMTY4IDMgMTcgQzIuMzQgMTcgMS42OCAxNyAxIDE3IEMwLjY3IDE4LjMyIDAuMzQgMTkuNjQgMCAyMSBDLTEuMzk3NzM2NjEgMTQuOTA5ODYxOSAtMi40MzkxOTg3NCA5LjI1ODU4MjExIC0yIDMgQy0xLjM0IDIuMDEgLTAuNjggMS4wMiAwIDAgWiAiIGZpbGw9IiMyMTc4NTUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNDgsNjIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQuMTk0Njk1NzEgMC41OTkyNDIyNCA4LjAwOTk5ODM0IDEuNTc0OTk5NDEgMTIgMyBDMTIgMy45OSAxMiA0Ljk4IDEyIDYgQzcuNjgyMjU0MiA1LjQ5MjAyOTkxIDMuOTY2OTc4ODYgNC44MDMxNzIyMSAwIDMgQzAgMi4wMSAwIDEuMDIgMCAwIFogIiBmaWxsPSIjRTdGMEVDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzkzLDgwKSIvPgo8cGF0aCBkPSJNMCAwIEMxLjY3NTQyOTc2IDAuMjg2MDQ4OTggMy4zNDM4NTM0MyAwLjYxNzgxMjMzIDUgMSBDNS44NDY4MTEzMyA2LjA4MDg2Nzk2IDYuMDkwMzgwOTkgMTAuODQ4MjgzNzcgNiAxNiBDNS4zNCAxNiA0LjY4IDE2IDQgMTYgQzMuOTUxMDE1NjMgMTUuNDA4MzIwMzEgMy45MDIwMzEyNSAxNC44MTY2NDA2MyAzLjg1MTU2MjUgMTQuMjA3MDMxMjUgQzMuMjYxOTU4IDcuODg5NzQ5MDkgMy4yNjE5NTggNy44ODk3NDkwOSAxIDIgQzAuMzQgMS42NyAtMC4zMiAxLjM0IC0xIDEgQy0wLjY3IDAuNjcgLTAuMzQgMC4zNCAwIDAgWiAiIGZpbGw9IiMxNzcyNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzAsNTcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNjA4ODEzMSAwLjgzNTA2MTE3IDMuNjA4ODEzMSAwLjgzNTA2MTE3IDUuODEyNSAtMC41IEM1LjgxMjUgMS4xNSA1LjgxMjUgMi44IDUuODEyNSA0LjUgQzMuNDc5MTY2NjcgNC4xNjY2NjY2NyAxLjE0NTgzMzMzIDMuODMzMzMzMzMgLTEuMTg3NSAzLjUgQy0yLjQ2NjI1IDMuMzU1NjI1IC0zLjc0NSAzLjIxMTI1IC01LjA2MjUgMy4wNjI1IEMtNi4wOTM3NSAyLjg3Njg3NSAtNy4xMjUgMi42OTEyNSAtOC4xODc1IDIuNSBDLTguNTE3NSAxLjg0IC04Ljg0NzUgMS4xOCAtOS4xODc1IDAuNSBDLTUuOTIyMjU5MDcgLTAuNDE4MzQ5MDEgLTMuMzE1NTMyMDkgLTAuNDc3MDk4NDIgMCAwIFogIiBmaWxsPSIjMUI3NDUxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzk5LjE4NzUsNzEuNSkiLz4KPHBhdGggZD0iTTAgMCBDMi45NyAwIDUuOTQgMCA5IDAgQzguNjcgMS4zMiA4LjM0IDIuNjQgOCA0IEM1LjAzIDQgMi4wNiA0IC0xIDQgQy0wLjY3IDIuNjggLTAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiNEQ0VERTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNDAsOTIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuOTYgMCA3LjkyIDAgMTIgMCBDMTEuNjcgMC45OSAxMS4zNCAxLjk4IDExIDMgQzcuNyAzIDQuNCAzIDEgMyBDMC42NyAyLjAxIDAuMzQgMS4wMiAwIDAgWiAiIGZpbGw9IiNFNzIwMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3NjYsMTIwKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzExLjY3IDAuOTkgMTEuMzQgMS45OCAxMSAzIEM3LjcgMyA0LjQgMyAxIDMgQzAuNjcgMi4wMSAwLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRTkyMDI2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzY2LDExNikiLz4KPHBhdGggZD0iTTAgMCBDOS40MTAwMjI3OCAtMC4zNjkwMjA1IDkuNDEwMDIyNzggLTAuMzY5MDIwNSAxNCAyIEMxNCAzLjY1IDE0IDUuMyAxNCA3IEMxMy41MDUgNi41MjU2MjUgMTMuMDEgNi4wNTEyNSAxMi41IDUuNTYyNSBDOS45MzI3MzUyOSAzLjk1Nzk1OTU1IDguODAwMzY5MDkgMy43NDk5ODYwOSA1Ljg3NSAzLjUgQzQuNTk2MjUgMy4zMzUgMy4zMTc1IDMuMTcgMiAzIEMxLjM0IDIuMDEgMC42OCAxLjAyIDAgMCBaICIgZmlsbD0iIzNEODk2QiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1Niw1NSkiLz4KPHBhdGggZD0iTTAgMCBDMC4yODQ4ODI4MSAwLjU3NDkyMTg4IDAuNTY5NzY1NjIgMS4xNDk4NDM3NSAwLjg2MzI4MTI1IDEuNzQyMTg3NSBDMS41OTM5MzI5NyAzLjE5MzQ0NzYyIDIuMzQwMTUwNTEgNC42MzcwMzEgMy4xMDU0Njg3NSA2LjA3MDMxMjUgQzMuNDYyNTM5MDYgNi43NDgzNTkzOCAzLjgxOTYwOTM4IDcuNDI2NDA2MjUgNC4xODc1IDguMTI1IEM0LjU1MjMwNDY5IDguODA4MjAzMTMgNC45MTcxMDkzOCA5LjQ5MTQwNjI1IDUuMjkyOTY4NzUgMTAuMTk1MzEyNSBDNS41MjYyODkwNiAxMC43OTA4NTkzNyA1Ljc1OTYwOTM4IDExLjM4NjQwNjI1IDYgMTIgQzUuNjcgMTIuNjYgNS4zNCAxMy4zMiA1IDE0IEM0LjM0IDE0IDMuNjggMTQgMyAxNCBDLTEuMDc4Nzc0NjIgNS45NjQ5ODkwNiAtMS4wNzg3NzQ2MiA1Ljk2NDk4OTA2IC0wLjc1IDEuOTM3NSBDLTAuNTAyNSAxLjI5ODEyNSAtMC4yNTUgMC42NTg3NSAwIDAgWiAiIGZpbGw9IiMwQzZCNDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzgsMTAzKSIvPgo8cGF0aCBkPSJNMCAwIEMzLjk2IDAgNy45MiAwIDEyIDAgQzExLjAxIDEuNDg1IDExLjAxIDEuNDg1IDEwIDMgQzguMTI1IDMuMzI4MTI1IDguMTI1IDMuMzI4MTI1IDYgMy4yNSBDNS4yOTg3NSAzLjIzNDUzMTI1IDQuNTk3NSAzLjIxOTA2MjUgMy44NzUgMy4yMDMxMjUgQzIgMyAyIDMgMCAyIEMwIDEuMzQgMCAwLjY4IDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc2NiwxMjQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuNjMgMCA3LjI2IDAgMTEgMCBDMTAuNjcgMC45OSAxMC4zNCAxLjk4IDEwIDMgQzcuMDMgMyA0LjA2IDMgMSAzIEMwLjY3IDIuMDEgMC4zNCAxLjAyIDAgMCBaICIgZmlsbD0iI0U4MjAyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTgxMywxMTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNDk1IDAuMzkxODc1IDAuOTkgMC43ODM3NSAxLjUgMS4xODc1IEMwLjE2NjY2NjY3IDEuODU0MTY2NjcgLTEuMTY2NjY2NjcgMi41MjA4MzMzMyAtMi41IDMuMTg3NSBDLTMuNDkgMy43NDQzNzUgLTMuNDkgMy43NDQzNzUgLTQuNSA0LjMxMjUgQy02LjUgNS4xODc1IC02LjUgNS4xODc1IC0xMC41IDUuMTg3NSBDLTEwLjUgNC4xOTc1IC0xMC41IDMuMjA3NSAtMTAuNSAyLjE4NzUgQy0zLjI4Nzc0NjE3IC0xLjA2ODUxNzUxIC0zLjI4Nzc0NjE3IC0xLjA2ODUxNzUxIDAgMCBaICIgZmlsbD0iIzEyNkY0QSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNy41LDc3LjgxMjUpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuNjQgMCA1LjI4IDAgOCAwIEM3LjY3IDEuMzIgNy4zNCAyLjY0IDcgNCBDNC42OSA0IDIuMzggNCAwIDQgQzAgMi42OCAwIDEuMzYgMCAwIFogIiBmaWxsPSIjRDdFQkRFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDA5LDk2KSIvPgo8cGF0aCBkPSJNMCAwIEMzLjU1NzgwMTk2IDAuNjA5OTA4OTEgNi42ODI4NTg5IDEuNTc4MzY4MSAxMCAzIEM5LjY3IDMuOTkgOS4zNCA0Ljk4IDkgNiBDNS44NTI2MjgxOCA1LjMwMDU4NDA0IDIuOTc0MTExMjQgNC4yMzkyMTMwMiAwIDMgQzAgMi4wMSAwIDEuMDIgMCAwIFogIiBmaWxsPSIjREZFQkU2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzk0LDg3KSIvPgo8cGF0aCBkPSJNMCAwIEMtMSAzIC0xIDMgLTIuODQ3NjU2MjUgNC4xNjc5Njg3NSBDLTMuNTc4NTU0NjkgNC41MDQ0MTQwNiAtNC4zMDk0NTMxMiA0Ljg0MDg1OTM3IC01LjA2MjUgNS4xODc1IEMtNS43OTU5NzY1NiA1LjUzMTY3OTY5IC02LjUyOTQ1MzEyIDUuODc1ODU5MzggLTcuMjg1MTU2MjUgNi4yMzA0Njg3NSBDLTguMTM0MDAzOTEgNi42MTEzODY3MiAtOC4xMzQwMDM5MSA2LjYxMTM4NjcyIC05IDcgQy05LjMzIDUuNjggLTkuNjYgNC4zNiAtMTAgMyBDLTYuMjcwMzQ4NjEgMC45NjU2NDQ2OSAtNC4zMzA5NDk1OCAwIDAgMCBaICIgZmlsbD0iI0U4RjFFRCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyOCw4NykiLz4KPHBhdGggZD0iTTAgMCBDMi4zOTI3MzIzNSAzLjU4OTA5ODUzIDMuMTUzMTA5ODYgNS4yNjMxMzQ3OCAzLjE4NzUgOS41IEMzLjIwMTY3OTY5IDEwLjI5NDA2MjUgMy4yMTU4NTkzOCAxMS4wODgxMjUgMy4yMzA0Njg3NSAxMS45MDYyNSBDMyAxNCAzIDE0IDEgMTYgQy0wLjE1NzAzOTggMTIuNTI4ODgwNTkgLTAuMDMzOTY0ODkgOS43NzM2ODM0NiAwLjA2MjUgNi4xNTYyNSBDMC4wOTg0MjE3OSAzLjgxNDI1MTIzIDAuMDk4NDIxNzkgMy44MTQyNTEyMyAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogIiBmaWxsPSIjMjI3OTU2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzc3LDYyKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjY2IDAuMzMgMS4zMiAwLjY2IDIgMSBDMS4zNCAzLjk3IDAuNjggNi45NCAwIDEwIEMtMC45OSA5LjY3IC0xLjk4IDkuMzQgLTMgOSBDLTIuNDQyNzEwODcgNS42NTYyNjUyNSAtMS42NDgyNjExMSAyLjk2Njg3MDAxIDAgMCBaICIgZmlsbD0iI0RDRUFFNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM0NCwxMDgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzMuMjcyODY2ODIgMi43ODE5MzY4IDQuOTY0Mjc2OTcgNi4yNzk1NDA2NyA3IDEwIEM2LjAxIDEwLjMzIDUuMDIgMTAuNjYgNCAxMSBDMy4zMjU5MTY5MiA5LjczMzA4NDkzIDIuNjYwOTk1MDMgOC40NjEyOTI1MSAyIDcuMTg3NSBDMS42Mjg3NSA2LjQ3OTgwNDY5IDEuMjU3NSA1Ljc3MjEwOTM3IDAuODc1IDUuMDQyOTY4NzUgQzAgMyAwIDMgMCAwIFogIiBmaWxsPSIjRDVFNURGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzc5LDEwNCkiLz4KPHBhdGggZD0iTTAgMCBDMi42NCAwIDUuMjggMCA4IDAgQzcuMzQgMS4zMiA2LjY4IDIuNjQgNiA0IEMzLjAzIDMuNTA1IDMuMDMgMy41MDUgMCAzIEMwIDIuMDEgMCAxLjAyIDAgMCBaICIgZmlsbD0iI0ZDRkRGQyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjAzOCw5OSkiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQy0zLjQ2NSA0LjQ4NSAtMy40NjUgNC40ODUgLTcgNiBDLTcuMzMgNS4wMSAtNy42NiA0LjAyIC04IDMgQy0zLjM3NSAwIC0zLjM3NSAwIDAgMCBaICIgZmlsbD0iI0Q2RTZERiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyOSw5MykiLz4KPHBhdGggZD0iTTAgMCBDLTAuNzUgNy43NSAtMC43NSA3Ljc1IC0zIDEwIEMtNC40NzgzMjI2IDcuMDQzMzU0ODEgLTQuMDYwMzI3ODMgNC4yNTc3MDI2MyAtNCAxIEMtMiAwIC0yIDAgMCAwIFogIiBmaWxsPSIjMkM3RTVEIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzcyLDY2KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjkzMDQ1OTMzIDIuNTUxNDQ4MjQgMS4wODU2NDA5MSAzLjc0MDA2NDc4IDAuMjIyNjU2MjUgNi4zNTkzNzUgQy0wLjE2MDE5NTMxIDcuMTQ4MjgxMjUgLTAuNTQzMDQ2ODggNy45MzcxODc1IC0wLjkzNzUgOC43NSBDLTEuNTA3OTEwMTYgOS45NDg4MjgxMyAtMS41MDc5MTAxNiA5Ljk0ODgyODEzIC0yLjA4OTg0Mzc1IDExLjE3MTg3NSBDLTIuMzkwMTk1MzEgMTEuNzc1MTU2MjUgLTIuNjkwNTQ2ODggMTIuMzc4NDM3NSAtMyAxMyBDLTMuNjYgMTIuNjcgLTQuMzIgMTIuMzQgLTUgMTIgQy00LjQ2MjMxMTI4IDguMTI4NjQxMiAtMy40MjI1MjcgNi4wMjgxNTg3NSAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRENFOUU0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzQyLDEwMykiLz4KPHBhdGggZD0iTTAgMCBDMC45OSAwLjMzIDEuOTggMC42NiAzIDEgQzIuNTQ2MjUgMS43NDI1IDIuMDkyNSAyLjQ4NSAxLjYyNSAzLjI1IEMwLjMxMzU5MjA0IDUuNDY5MzA1NzggLTAuODgyODA4MDMgNy42Nzk2NzgyMiAtMiAxMCBDLTMuMDYzNTE2NzUgNi42MTYwODMwNyAtMy4yMTQ0Mjk4MiA1LjQxOTUzNjYgLTEuNTYyNSAyLjE4NzUgQy0xLjA0Njg3NSAxLjQ2NTYyNSAtMC41MzEyNSAwLjc0Mzc1IDAgMCBaICIgZmlsbD0iI0RCRTlFMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3OCw5NikiLz4KPHBhdGggZD0iTTAgMCBDMCAwLjk5IDAgMS45OCAwIDMgQy0yLjUgNC42ODc1IC0yLjUgNC42ODc1IC01IDYgQy01LjY2IDUuMDEgLTYuMzIgNC4wMiAtNyAzIEMtMy4zNzUgMCAtMy4zNzUgMCAwIDAgWiAiIGZpbGw9IiMwRDZDNDYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMjksOTYpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyIDAuNjYgMiAxLjMyIDIgMiBDMy4zMiAyIDQuNjQgMiA2IDIgQzYgMi42NiA2IDMuMzIgNiA0IEM0LjY4IDQgMy4zNiA0IDIgNCBDMS42NyA1LjMyIDEuMzQgNi42NCAxIDggQy0wLjM1NDM5NjY4IDUuMjkxMjA2NjUgLTAuMDY1MDE0NTEgMi45OTA2NjczMiAwIDAgWiAiIGZpbGw9IiMxOTczNEYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNTAsNjQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuMzIgMC42NiAyLjY0IDEuMzIgNCAyIEM0IDIuOTkgNCAzLjk4IDQgNSBDMSA1IDEgNSAtMC42ODc1IDMuNSBDLTEuMTIwNjI1IDMuMDA1IC0xLjU1Mzc1IDIuNTEgLTIgMiBDLTEuMzQgMS4zNCAtMC42OCAwLjY4IDAgMCBaICIgZmlsbD0iIzE1NzI0QyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM5MiwxMDEpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMC4zMyAxLjk4IDAuNjYgMyAxIEMyLjM0IDMuOTcgMS42OCA2Ljk0IDEgMTAgQzAuMDEgOS4wMSAtMC45OCA4LjAyIC0yIDcgQy0xLjM0IDQuNjkgLTAuNjggMi4zOCAwIDAgWiAiIGZpbGw9IiMyOTdENUIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNzMsNzMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMC42NjY2NjY2NyA0IDEuMzMzMzMzMzMgNiAyIEM1LjY3IDIuNjYgNS4zNCAzLjMyIDUgNCBDMi4zNTEzOTU3MyA0LjU5MzU1NjE0IC0wLjI5MTk3MzIyIDQuNzQyMDkyNjkgLTMgNSBDLTIuNjI1IDMuMDYyNSAtMi42MjUgMy4wNjI1IC0yIDEgQy0xLjM0IDAuNjcgLTAuNjggMC4zNCAwIDAgWiAiIGZpbGw9IiMzMzgzNjMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMjYsNzApIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuMzEgMCA0LjYyIDAgNyAwIEM3IDEuMzIgNyAyLjY0IDcgNCBDNS42OCA0IDQuMzYgNCAzIDQgQzMgMy4zNCAzIDIuNjggMyAyIEMyLjAxIDIgMS4wMiAyIDAgMiBDMCAxLjM0IDAgMC42OCAwIDAgWiAiIGZpbGw9IiM2N0EyOEEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNTMsNjQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMCAxLjk4IDAgMyAwIEMyLjY4NzUgMS44NzUgMi42ODc1IDEuODc1IDIgNCBDMS4wMSA0LjY2IDAuMDIgNS4zMiAtMSA2IEMtMS42MjUgNC4xMjUgLTEuNjI1IDQuMTI1IC0yIDIgQy0xLjM0IDEuMzQgLTAuNjggMC42OCAwIDAgWiAiIGZpbGw9IiMxNDcwNEIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMjgsMTAxKSIvPgo8cGF0aCBkPSJNMCAwIEM0Ljc1IDEuODc1IDQuNzUgMS44NzUgNyAzIEM2LjY3IDMuOTkgNi4zNCA0Ljk4IDYgNiBDMy45NjE2NjU3NiA0LjcyNjA0MTEgMS45NjE0Nzg3NCAzLjM4OTM4MDc3IDAgMiBDMCAxLjM0IDAgMC42OCAwIDAgWiAiIGZpbGw9IiNFOEYxRUUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzOTQsOTMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuOTggMCAzLjk2IDAgNiAwIEM2IDAuOTkgNiAxLjk4IDYgMyBDMy42OSAzIDEuMzggMyAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRjhGQkY5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDEyLDkwKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMzIDEuMzIgMC42NiAyLjY0IDEgNCBDMS42NiA0IDIuMzIgNCAzIDQgQzMuNjYgNS42NSA0LjMyIDcuMyA1IDkgQzMuMDYyNSA4LjYyNSAzLjA2MjUgOC42MjUgMSA4IEMtMC4zNTQzOTY2OCA1LjI5MTIwNjY1IC0wLjA2NTAxNDUxIDIuOTkwNjY3MzIgMCAwIFogIiBmaWxsPSIjRDRFNERFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzY4LDc4KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjk5IDAuMzMgMS45OCAwLjY2IDMgMSBDMi4zNCAzLjMxIDEuNjggNS42MiAxIDggQzAuMzQgOCAtMC4zMiA4IC0xIDggQy0xLjEyNSAyLjI1IC0xLjEyNSAyLjI1IDAgMCBaICIgZmlsbD0iI0VGRjVGMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM3MCw3NCkiLz4KPHBhdGggZD0iTTAgMCBDMi4wMDcyMDkyMyAwLjI4Njc0NDE4IDQuMDA4NTk0NCAwLjYxODY2NzAxIDYgMSBDNiAxLjY2IDYgMi4zMiA2IDMgQzQuMzUgMyAyLjcgMyAxIDMgQzEgMy45OSAxIDQuOTggMSA2IEMwLjM0IDYgLTAuMzIgNiAtMSA2IEMtMS4wNDI3MjEgNC4zMzM4ODA5NSAtMS4wNDA2MzgzMiAyLjY2NjE3MTE1IC0xIDEgQy0wLjY3IDAuNjcgLTAuMzQgMC4zNCAwIDAgWiAiIGZpbGw9IiM3MkE5OTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzNjMsNjMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuOTM3NSAwLjY4NzUgMS45Mzc1IDAuNjg3NSA0IDIgQzQuNzUgNC42MjUgNC43NSA0LjYyNSA1IDcgQzQuMzQgNyAzLjY4IDcgMyA3IEMwIDIuNjE1Mzg0NjIgMCAyLjYxNTM4NDYyIDAgMCBaICIgZmlsbD0iIzBDNkI0NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM1MSw5NykiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwIDIuNjQgMCA0IDAgQzQgMC45OSA0IDEuOTggNCAzIEMyLjAyIDMuNjYgMC4wNCA0LjMyIC0yIDUgQy0xLjM0IDMuMzUgLTAuNjggMS43IDAgMCBaICIgZmlsbD0iI0U2RjBFQyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNSw4MCkiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwIDIuNjQgMCA0IDAgQzMuNjcgMS4zMiAzLjM0IDIuNjQgMyA0IEMyLjAxIDQgMS4wMiA0IDAgNCBDMCAyLjY4IDAgMS4zNiAwIDAgWiAiIGZpbGw9IiMwMDg0MjgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxNjksODcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuOTkgMCAxLjk4IDAgMyAwIEMyLjM0IDEuMzIgMS42OCAyLjY0IDEgNCBDMC42NyAyLjY4IDAuMzQgMS4zNiAwIDAgWiAiIGZpbGw9IiMxRTcwQzEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MTcsMTAyKSIvPgo8L3N2Zz4K\\\" 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<sup>\\u00AE</sup> 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};\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\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 _this.isAngular = false;\n _this.isReact = false;\n _this.isVue = 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 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(_this.getModuleName())) {\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 this.detachUnloadEvent();\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 if (this.enablePersistence) {\n this.attachUnloadEvent();\n }\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 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 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 * Adding unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.attachUnloadEvent = function () {\n this.handleUnload = this.handleUnload.bind(this);\n window.addEventListener('pagehide', this.handleUnload);\n };\n /**\n * Handling unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.handleUnload = function () {\n this.setPersistData();\n };\n /**\n * Removing unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.detachUnloadEvent = function () {\n window.removeEventListener('pagehide', this.handleUnload);\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 this.attachUnloadEvent();\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 // Throw a warning for the required modules to be injected.\n var ignoredComponents = {\n schedule: 'all',\n diagram: 'all',\n PdfViewer: 'all',\n grid: ['logger'],\n richtexteditor: ['link', 'table', 'image', 'audio', 'video', 'formatPainter', 'emojiPicker', 'pasteCleanup', 'htmlEditor', 'toolbar', 'importExport', 'codeBlock'],\n treegrid: ['filter'],\n gantt: ['tooltip'],\n chart: ['Export', 'Zoom'],\n accumulationchart: ['Export'],\n 'query-builder': 'all'\n };\n var component = this.getModuleName();\n if (this.requiredModules && (!ignoredComponents[\"\" + component] || ignoredComponents[\"\" + component] !== 'all')) {\n var modulesRequired = this.requiredModules();\n for (var _i = 0, _a = this.moduleLoader.getNonInjectedModules(modulesRequired); _i < _a.length; _i++) {\n var module = _a[_i];\n var moduleName = module.name ? module.name : module.member;\n if (ignoredComponents[\"\" + component] && ignoredComponents[\"\" + component].indexOf(module.member) !== -1) {\n continue;\n }\n var componentName = component.charAt(0).toUpperCase() + component.slice(1); // To capitalize the component name\n console.warn(\"[WARNING] :: Module \\\"\" + moduleName + \"\\\" is not available in \" + componentName + \" component! You either misspelled the module name or forgot to load it.\");\n }\n }\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 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 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 Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.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 Component.prototype.renderReactTemplates = function (callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\n Component.prototype.clearTemplate = function (templateName, index, callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\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 = 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 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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 | Function} 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 if (typeof template === 'function') {\n return template;\n }\n else {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\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}\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 if (exp.test(str)) {\n var insideBraces = false;\n var outputString = '';\n for (var i = 0; i < str.length; i++) {\n if (str[i + ''] === '$' && str[i + 1] === '{') {\n insideBraces = true;\n }\n else if (str[i + ''] === '}') {\n insideBraces = false;\n }\n outputString += (str[i + ''] === '\"' && !insideBraces) ? '\\\\\"' : str[i + ''];\n }\n str = outputString;\n }\n else {\n str = str.replace(/\\\\?\"/g, '\\\\\"');\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, 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 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 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 var fNameSpace = (helper && Object.prototype.hasOwnProperty.call(helper, 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 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 }\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 && str !== 'true' && str !== 'false') ? 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/**\n * Replace double slashes to single slash.\n *\n * @param {string} tempStr ?\n * @returns {any} ?\n */\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n return tempStr;\n }\n else {\n return tempStr.replace(SINGLE_SLASH, double);\n }\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","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\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 | Function} 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 */\nexport function compile(templateString, helper, ignorePrefix) {\n var compiler = engineObj.compile(templateString, helper, ignorePrefix);\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 return propName === 'rowTemplate' ? [createElement('tr', { id: blazorId, className: 'e-blazor-template' })] :\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 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/**\n * Set the current template function to support Content Security Policy.\n *\n * @param {Function} template - The template function that is going to render.\n * @param {any} helper - The data utilized by the template from the helper.\n * @returns {Function} ?\n * @private\n */\nexport function initializeCSPTemplate(template, helper) {\n var boundFunc;\n template.prototype.CSPTemplate = true;\n if (!isNullOrUndefined(helper)) {\n boundFunc = template.bind(helper);\n boundFunc.prototype = Object.create(template.prototype);\n }\n else {\n boundFunc = template;\n }\n return boundFunc;\n}\n//Default Engine Class\nvar Engine = /** @class */ (function () {\n function Engine() {\n }\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","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 * @returns {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 _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 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 var header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined as isNOU, isObject, merge } from './util';\n/**\n * The Fetch class provides a way to make asynchronous network requests, typically to retrieve resources from a server.\n * ```typescript\n * var fetchApi = new Fetch('index.html', 'GET');\n * fetchApi.send()\n * .then((value) => {\n * console.log(value);\n * }).catch((error) => {\n * console.log(error);\n * });\n * ```\n */\nvar Fetch = /** @class */ (function () {\n /**\n * Constructor for Fetch class.\n *\n * @param {string|Object} options - Specifies the URL or Request object with URL to which the request is to be sent.\n * @param {string} type - Specifies which request method is to be used, such as GET, POST, etc.\n * @param {string} contentType - Specifies the content type of the request, which is used to indicate the original media type of the resource.\n */\n function Fetch(options, type, contentType) {\n /**\n * Specifies which request method is to be used, such as GET, POST, etc.\n *\n * @default GET\n */\n this.type = 'GET';\n /**\n * A boolean value indicating whether to reject the promise or not.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n if (typeof options === 'string') {\n this.url = options;\n this.type = !isNOU(type) ? type.toUpperCase() : this.type;\n this.contentType = contentType;\n }\n else if (isObject(options) && Object.keys(options).length > 0) {\n merge(this, options);\n }\n this.contentType = !isNOU(this.contentType) ? this.contentType : 'application/json; charset=utf-8';\n }\n /**\n * Send the request to server.\n *\n * @param {string|Object} data - Specifies the data that needs to be added to the request.\n * @returns {Promise<Response>} - Returns the response to a request.\n */\n Fetch.prototype.send = function (data) {\n var _this = this;\n var contentTypes = {\n 'application/json': 'json',\n 'multipart/form-data': 'formData',\n 'application/octet-stream': 'blob',\n 'application/x-www-form-urlencoded': 'formData'\n };\n try {\n if (isNOU(this.fetchRequest) && this.type === 'GET') {\n this.fetchRequest = new Request(this.url, { method: this.type });\n }\n else if (isNOU(this.fetchRequest)) {\n this.data = !isNOU(data) ? data : this.data;\n this.fetchRequest = new Request(this.url, {\n method: this.type,\n headers: { 'Content-Type': this.contentType },\n body: this.data\n });\n }\n var eventArgs = { cancel: false, fetchRequest: this.fetchRequest };\n this.triggerEvent(this['beforeSend'], eventArgs);\n if (eventArgs.cancel) {\n return null;\n }\n this.fetchResponse = fetch(this.fetchRequest);\n return this.fetchResponse.then(function (response) {\n _this.triggerEvent(_this['onLoad'], response);\n if (!response.ok) {\n throw response;\n }\n var responseType = 'text';\n for (var _i = 0, _a = Object.keys(contentTypes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (response.headers.get('Content-Type') && response.headers.get('Content-Type').indexOf(key) !== -1) {\n responseType = contentTypes[key];\n }\n }\n return response[responseType]();\n }).then(function (data) {\n _this.triggerEvent(_this['onSuccess'], data, _this);\n return data;\n }).catch(function (error) {\n var returnVal = {};\n if (_this.emitError) {\n _this.triggerEvent(_this['onFailure'], error);\n returnVal = Promise.reject(error);\n }\n return returnVal;\n });\n }\n catch (error) {\n return error;\n }\n };\n Fetch.prototype.triggerEvent = function (callback, data, instance) {\n if (!isNOU(callback) && typeof callback === 'function') {\n callback(data, instance);\n }\n };\n return Fetch;\n}());\nexport { Fetch };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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 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 {string} ?\n */\n Browser.getEvent = function (event) {\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 && !REGX_BROWSER.CHROME.test(navigator.userAgent)) {\n browserDetails['isIos'] = true;\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\n // Set 'isPointer' for pointer-enabled devices (e.g., iPad on Safari)\n browserDetails['isPointer'] = ('pointerEnabled' in window.navigator);\n }\n if (typeof window !== 'undefined' && window.Capacitor && window.Capacitor.getPlatform() === 'ios') {\n browserDetails['isPointer'] = false;\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 = EventHandler.addOrGetEventData(element);\n var copyData = extend([], undefined, eventData);\n for (var i = 0; i < copyData.length; i++) {\n var parseValue = copyData[parseInt(i.toString(), 10)];\n element.removeEventListener(parseValue.name, parseValue.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","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { 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, id: id }];\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 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 * To remove internationalization events\n *\n * @returns {void} ?\n */\n Observer.prototype.offIntlEvents = function () {\n var eventsArr = this.boundedEvents['notifyExternalChange'];\n if (eventsArr) {\n for (var i = 0; i < eventsArr.length; i++) {\n var curContext = eventsArr[parseInt(i.toString(), 10)].context;\n if (curContext && curContext.detectFunction && curContext.randomId && curContext.isReactMock) {\n this.off('notifyExternalChange', curContext.detectFunction, curContext.randomId);\n i--;\n }\n }\n if (!this.boundedEvents['notifyExternalChange'].length) {\n delete this.boundedEvents['notifyExternalChange'];\n }\n }\n };\n /**\n * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n return Object.prototype.hasOwnProperty.call(this.boundedEvents, 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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 * Returns the array of modules that are not loaded in the component library.\n *\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @returns {ModuleDeclaration[]} ?\n * @private\n */\n ModuleLoader.prototype.getNonInjectedModules = function (requiredModules) {\n var _this = this;\n return requiredModules.filter(function (module) { return !_this.isModuleLoaded(module.member); });\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\n * @returns {void} ?\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 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 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","/***\n * Hijri parser\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\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, setDateFormat } 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/**\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 formatOptions.firstDayOfWeek = base.getWeekData(culture, cldr);\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 formatOptions.weekday = getValue('days.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\n formatOptions.weekday = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n formatOptions.month = getValue('months.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\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 var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n }\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 ret += options.month[\"\" + curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[\"\" + weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n 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 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 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 var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[\"\" + desig];\n break;\n }\n case 'G': {\n var dec = value.getFullYear() < 0 ? 0 : 1;\n var retu = options.era[\"\" + dec];\n if (isNullOrUndefined(retu)) {\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n }\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/'/g, '');\n break;\n case 'z': {\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n }\n case ':':\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, options.firstDayOfWeek);\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 };\nsetDateFormat(DateFormat);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { IntlBase as base, setNumberFormat, defaultCurrencyCode } 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 percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\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, option.ignoreCurrency);\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 if (!isUndefined(fOptions.useGrouping) && fOptions.useGrouping) {\n fOptions.useGrouping = cOptions.pData.useGrouping;\n }\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, option);\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 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 * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions, option) {\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, option);\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[parseInt(i.toString(), 10)] === '0' && i >= curData.minimumFractionDigits) {\n decimalPart = decimalPart.slice(0, i);\n }\n else {\n break;\n }\n }\n // removes the dot and trailing zero\n var decimalSeparator = (dOptions).numberMapper.numberSymbols[mapper[3]] || '.';\n if (decimalPart === '') {\n fValue = temp[0];\n }\n else {\n fValue = temp[0] + decimalSeparator + decimalPart;\n }\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, 10)) : fValue;\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n if (fValue === '0' && option && option.format === '0') {\n return fValue + curData.nend;\n }\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 * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.roundTo = function (value, digits) {\n var factor = Math.pow(10, digits);\n return (Math.round(value * factor) / factor).toFixed(digits);\n };\n NumberFormat.processFraction = function (value, min, max, option) {\n if (value != null && (value.toString().indexOf('e') !== -1 || value.toString().indexOf('E') !== -1)) {\n return value.toFixed(min);\n }\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 this.roundTo(value, max);\n }\n var str = value + '';\n if (str[0] === '0' && option && option.format === '###.00') {\n str = str.slice(1);\n }\n return str;\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 * @returns {string} ?\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 };\nsetNumberFormat(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/**\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 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 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 var weekData = void 0;\n if (isBlazor()) {\n weekData = getValue('days.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n weekData = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n var weekObject = parser.reverseObject(weekData);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n }\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 monthData = getValue('months.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n monthData = dependable.dateObject[\"\" + month][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n parseOptions[\"\" + charKey] = parser.reverseObject(monthData);\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 var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n }\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 var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n parseOptions[\"\" + charKey] = parser.reverseObject(periodValur);\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + ')';\n break;\n }\n case 'G': {\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[\"\" + charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + '?)';\n break;\n }\n case 'z': {\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[\"\" + charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[\"\" + charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n }\n case '\\'': {\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n }\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 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 /**\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 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 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 if (key === 'hour') {\n var is12h = options.hour12;\n if (is12h) {\n if (tValue < 1 || tValue > 12) {\n return null;\n }\n }\n else {\n if (tValue < 0 || tValue > 23) {\n return null;\n }\n }\n }\n else if (key === 'minute' || key === 'second') {\n if (tValue < 0 || tValue > 59) {\n return null;\n }\n }\n else if (key === 'milliseconds') {\n if (tValue < 0 || tValue > 999) {\n return null;\n }\n }\n res[\"\" + timeSetter[\"\" + key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n *\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 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 var cultureOptions = ['en-US', 'en-MH', 'en-MP'];\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 matchString = ((prop !== 'month') && (prop === 'designator') && parseOptions.culture && parseOptions.culture.indexOf('en-') !== -1 && cultureOptions.indexOf(parseOptions.culture) === -1)\n ? matchString.toLowerCase() : matchString;\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 * Escapes all regex metacharacters in a string, preserving the {0} placeholder.\n *\n * @param {string} str ? - The input string to escape.\n * @returns {string} ? - The escaped string with {0} preserved.\n */\n DateParser.escapeRegex = function (str) {\n var tempPlaceholder = '__TEMP__';\n var tempStr = str.replace('{0}', tempPlaceholder);\n var metaChars = /[.*+?^${}()|[\\]\\\\]/g;\n var escapedStr = tempStr.replace(metaChars, '\\\\$&');\n return escapedStr.replace(tempPlaceholder, '{0}');\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 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 pattern = this.escapeRegex(pattern);\n var splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n var gmtZeroFormat = this.escapeRegex(tZone.gmtZeroFormat);\n ret = splitStr.join('|') + '|' + 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 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 var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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 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 _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 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 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 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.enableAutoScroll) {\n this.setDragArea();\n }\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 if (this.dragArea) {\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\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 if (this.isPreventScroll) {\n dragValue = this.getProcessedPositionValue({\n top: (this.position.top - this.parentClientRect.top - 2) + 'px',\n left: (this.position.left - this.parentClientRect.left - 2) + 'px'\n });\n }\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 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 Draggable.prototype.getScrollParent = function (node, reverse) {\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 var docScrollTop = document.scrollingElement.scrollTop;\n var helperClientHeight = this.helperElement.clientHeight;\n if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - helperClientHeight + docScrollTop) < draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.getBoundingClientRect().top > (draEleTop - helperClientHeight - docScrollTop)) {\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 * @param {MouseEvent | TouchEvent} evt ?\n * @returns {void}\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, 10) > 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 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 ele = document.scrollingElement;\n var isVerticalScroll = ele.scrollHeight > 0 && ele.scrollHeight > ele.clientHeight && ele.scrollTop > 0;\n var isHorrizontalScroll = ele.scrollWidth > 0 && ele.scrollWidth > ele.clientWidth && ele.scrollLeft > 0;\n pageX = isHorrizontalScroll ? pageX - ele.scrollLeft : pageX;\n pageY = isVerticalScroll ? pageY - ele.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, currentTargetElement: this.currentStateTarget });\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 Property(false)\n ], Draggable.prototype, \"isPreventScroll\", 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 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 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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\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 tDistance = _this.swipeSettings.swipeThresholdDistance;\n var eSwipeArgs = extend(undefined, _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 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 EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n var 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 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';\nimport { isNullOrUndefined } from './util';\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: 'href', selector: 'a[href]' },\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 'oncontentvisibilityautostatechange',\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 if (isNullOrUndefined(value)) {\n return value;\n }\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 this.wrapElement = null;\n return tempEleValue.replace(/&/g, '&');\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 this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n if (item.selector === 'a[href]') {\n elements.forEach(function (element) {\n if ((element.getAttribute(item.attribute)).replace(/\\t|\\s|&/, '').indexOf('javascript:alert') !== -1) {\n element.removeAttribute(item.attribute);\n }\n });\n }\n else {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\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","location","origin","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","args","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","hasOwnProperty","call","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","later","clearTimeout","setTimeout","queryParams","array","keys_2","push","encodeURIComponent","join","isObjectArray","parser","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","setDefaultCurrencyCode","defaultCurrencyCode","setNumberFormat","NumberFormat","setDateFormat","DateFormat","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","style","cssText","attrs","attributes","updateCSSText","existingStyles","reduce","trim","newStyles","styleElement","__assign","setProperty","addClass","elements","classes","classList","getClassList","regExp","RegExp","ele","_b","classList_1","curClass","contains","add","removeClass","flag","classList_2","classArr","index","splice","remove","isVisible","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","append","NodeList","script","text","head","detach","removeChild","EventHandler","clearEvents","iKey","setAttribute","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","type","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","newValueParse","model","getArrayModel","serverDataBind","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","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","setCurrencyCode","loadCldr","data_1","cldrData","enableRtl","status","rightToLeft","getNumericObject","numObject","IntlBase","getDependables","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getNumberDependable","currency","getCurrencySymbol","numericObject","getDefaultDateObject","mode","convertToChar","cArr","cArr_1","arr","String","fromCharCode","registerLicense","licenseValidator","LicenseValidator","enableVersionBasedPersistence","versionBasedStatePersistence","compile","template","helper","ignorePrefix","fnCode","evalExp","str","varCOunt","localKeys","isClass","singleSpace","exp","insideBraces","outputString","LINES","DBL_QUOTED_STR","cnt","matchStr","SPECIAL_CHAR","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","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","initializeCSPTemplate","boundFunc","CSPTemplate","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","blazorCultureFormats","en-US","d","D","f","F","g","G","m","M","r","R","s","t","T","u","U","Y","getResultantPattern","skeleton","isIslamic","blazorCulture","resPattern","iType","compareBlazorDateFormats","format","basicPatterns","dPattern","tPattern","cldr","culture","calendartype","parserObject","blazorDefaultObject","defaultObject","dateString","isAccount","ConvertDateToWeekFormat","convertMapper","dateConverterMapper","tempString","formatOptions","curFormatMapper","getProperNumericSkeleton","formatRegex","toUpperCase","patternMatcher","fractionDigits","needFraction","cSymbol","fractionOnly","nData","nlead","nend","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","minimumFraction","maximumFraction","sym","defaultCurrency","altSymbol","ignoreCurrency","symbol","customFormat","dOptions","options","formatSplit","customNumberFormat","pData","minusSymbol","cOptions","minimumFractionDigits","maximumFractionDigits","integerPart","spaceCapture","spaceGrouping","useGrouping","fractionPart","minimumIntegerDigits","lastIndexOf","isCurrencyPercent","isCustomFormat","currencySymbol","isCurrency","percentSymbol","symbolPattern","numberMapper","groupSeparator","groupData","getGroupingDetails","parts","actual","part","loc","typeMapper","dateObj","getActualDateTimeFormat","isExcelFormat","dependable","calendar","actualPattern","patternRegex","patternMatch","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","Date","getTimezoneOffset","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","processSymbol","option","getActualNumberFormat","isExcel","minFrac","parseOptions","custom","numrericObject","curMatch","currencyFormatRegex","curCode","hasNegativePattern","fractionDigitsPattern","minimumIntegerPattern","groupingPattern","cPattern","minDigits","maxDigits","a","diff","b","integer","no","getWeekData","firstDay","defaultFirstDay","iCulture","firstDayMapper","replaceBlazorCurrency","aCurrency","rCurrency","iCurrency","pData_1","getWeekOfYear","date","firstDayOfWeek","weeknum","newYear","getFullYear","day","getDay","daynum","floor","getTime","nday","negativeDataRegex","latnParseRegex","L","H","c","'"," a","yy","EEEE","E","islamicRegex","sun","mon","tue","wed","thu","fri","sat","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","days","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","h","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","ms","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","islamic","yyyy","yyyyM","yyyyMd","yyyyMEd","yyyyMMM","yyyyMMMd","yyyyMMMEd","yyyyMMMM","yyyyQQQ","yyyyQQQQ","timeZoneNames","numbers","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","primary","percentpData","percentnData","currencynData","decimalnData","decimalpData","dateSeperator","monthIndex","month","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","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","toLowerCase","JSON","parse","error","readyState","statusText","getResponseHeader","responseHeaders","headers","exec","getAllResponseHeaders","header","Fetch","isNOU","contentTypes","application/json","multipart/form-data","application/octet-stream","application/x-www-form-urlencoded","fetchRequest","Request","method","Content-Type","triggerEvent","fetchResponse","fetch","then","response","ok","responseType","catch","returnVal","callback","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","clientInfo","userAgent","name","version","language","navigator","getEvent","isTouch","isDevice","move","end","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","isSafari","isIos","regX","platform","maxTouchPoints","Capacitor","getPlatform","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","addOrGetEventData","__eventList","eventName","listener","bindTo","intDebounce","debounceListener","eventData","isIE","passive","some","copyData","parseValue","shift","trigger","eventProp","eventData_1","event_1","assign","n","p","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","argument","errorHandler","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","isJson","dateReviver","offIntlEvents","eventsArr","curContext","detectFunction","randomId","isReactMock","boundedEvents_1","isColEName","Base","isRendered","isServerRendered","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","finalUpdate","childChangedProperties","modelObserver","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","moduleClass","filter","proxyToRaw","setProxyToRaw","toRaw","__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","GlobalAnimationMode","Disable","begin","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","progress","requestAnimationFrame","fail","newProp","oldProp","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clean","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","modules","getNonInjectedModules","usedModules","arg","removableModule_1","mod","substring","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","clearUpdate","curIndex","restrictServerDataBind","isSaveChanges","action","parent_1","parentKey","complexKeys","isFinal","valueLength","HijriParser","getHijriDate","gDate","getDate","getMonth","year","tMonth","tYear","yPrefix","julilanOffset","julianNumber","tempMonth","modifiedJulianDate","z","cyc","iy","im","tempDay","dateCorrection","iln","ii","hYear","hmonth","hDate","toGregorian","julianDate","gDay","gMonth","gYear","weekdayKey","timeSetter","datePartMatcher","Z","dateFormat","base","patternMatch_1","char","weekday","designator","eText","era","isNaN","intDateFormatter","dObject","getCurrentDateValue","matches_1","curval","curvalstr","processNumber","curstr","curlength","desig","getHours","dec","retu","pattern_1","checkTwodigitNumber","tVal","curPattern","ishour","errorText","ls","mf","lf","numberFormatter","fOptions","symbols","isPercent","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","mval","mfrac","lfrac","isFinite","intNumberFormatter","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","range","curData","zeroData","fValue","processSignificantDigits","processFraction","processMinimumIntegers","decimalPart","decimalSeparator","toExponential","customPivotFormat","groupNumbers","min","toPrecision","level1","sep","decimalSymbol","level2","roundTo","factor","pow","round","toFixed","lead","ceil","latnRegex","minute","hour","milliseconds","DateParser","dateParser","numOptions","hourOnly","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","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","matchString","internalNumberParser","cultureOptions","tmatch","getZoneValue","escapeRegex","tZone","cRegex","splitStr","ival","parseRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","Infinity","NaN","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","accountURL","lastPageID","Internationalization","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","getNumberPattern","getFirstDayOfWeek","componentList","pdfViewerSDKComponents","spreadsheetEditorSDKComponents","wordEditorSDKComponents","bypassKey","banner","isLicensed","prefixRegex","incorrectPlatform","errors","noLicense","trailExpired","versionMismatched","platformMismatched","invalidKey","componentRestricted","validatedPlatforms","minVersion","allowedComponentsMap","pdfviewersdk","spreadsheeteditorsdk","docxeditorsdk","manager","licKey","setKey","getKey","npxManager","npxLicKey","validate","contentKey","URLKey","validateMsg","validateURL","getInfoFromKey","componentRestrictedMsg","result_1","hasError","invalidPlatform","restrictionMsg","restrictComponent","lastValue","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","needsID","isReactHybrid","isAngular","isReact","isVue","moduleLoader","localObserver","appendTo","enablePersistence","setPersistData","detachUnloadEvent","refresh","attachUnloadEvent","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","handleUnload","mergePersistData","ignoredComponents","schedule","diagram","PdfViewer","grid","richtexteditor","treegrid","gantt","chart","accumulationchart","query-builder","modulesRequired","moduleName","componentName","charAt","console","warn","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","clearTemplate","isHistoryChanged","pageID","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","enableAutoScroll","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","draEleTop","draEleLeft","isDialogEle","tempDraEleTop","dragValue","isPreventScroll","scrollIntoView","getPathElements","scrollParent","getScrollParent","getScrollPosition","reverse","hasScroll","nodeEl","clientHeight","scrollingElement","overflow","nodeEle","docScrollTop","helperClientHeight","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","currentTargetElement","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","tDistance","swipeSettings","swipeThresholdDistance","eSwipeArgs","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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AAO,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,M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B,KAEjC2T,GAAU,UACVZ,GAAe,OACfS,GAAe,SACfZ,GAAW,GAAI5S,QAAO,oBAAqB,KAC3C2S,GAAa,cCfb6B,GAAU,oBACVD,GAAU,2BACHD,MAoKPL,IAAc3D,SAAS,IATC,WACxB,QAASqhD,MAMT,MAJAA,GAAOv9D,UAAUkc,QAAU,SAAUyD,EAAgBvD,EAAQC,GAEzD,WADe,KAAXD,IAAqBA,MAClBkoC,GAAO3kC,EAAgBvD,IAE3BmhD,OAE6BrhD,SkBxKpCshD,IACA,SACA,QACA,cACA,4BACA,kCACA,wCACA,oCACA,uBACA,0BACA,0BACA,2CAEAC,KACEC,UAAW,OAAQxvD,SAAU,0BAC7BwvD,UAAW,OAAQxvD,SAAU,YAC7BwvD,UAAW,aAAcxvD,SAAU,gCACnCwvD,UAAW,QAASxvD,SAAU,2BAC9BwvD,UAAW,QAASxvD,SAAU,2BAC9BwvD,UAAW,OAAQxvD,SAAU,qCAE/ByvD,IAAY,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,YACA,mBACA,qCACA,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,MAuFT,MArFAA,GAAmBC,eAAiB,WAChC,OACIC,WACIC,KAAMP,GACN3yD,WAAY4yD,MAIxBG,EAAmBI,SAAW,SAAUr8D,GACpC,GAAIa,EAAkBb,GAClB,MAAOA,EAEX,IAAIs8D,GAAO54D,KAAKw4D,gBAEhB,OADax4D,MAAK64D,eAAeD,EAAMt8D,IAG3Ci8D,EAAmBM,eAAiB,SAAUD,EAAMt8D,GAChD0D,KAAKo4D,YAAcQ,EAAKH,UAAUjzD,WAClCxF,KAAKm4D,WAAaS,EAAKH,UAAUC,KACjC14D,KAAK84D,YAAc93D,SAASW,cAAc,OAC1C3B,KAAK84D,YAAYr2D,UAAYnG,EAC7B0D,KAAK+4D,gBACL/4D,KAAKg5D,iBACLh5D,KAAKi5D,gBACL,IAAIC,GAAel5D,KAAK84D,YAAYr2D,SAGpC,OAFAzC,MAAKm5D,gBACLn5D,KAAK84D,YAAc,KACZI,EAAa18D,QAAQ,SAAU,MAE1C+7D,EAAmBY,cAAgB,WAG/B,IAAK,GADDC,GAAQp5D,KAAK84D,YAAYO,SACpBhwD,EAAI,EAAGA,EAAI+vD,EAAMv9D,OAAQwN,IAE9B,IAAK,GADDgvD,GAAYe,EAAMx8D,SAASyM,EAAExM,WAAY,KAAK2I,WACzC9I,EAAI,EAAGA,EAAI27D,EAAUx8D,OAAQa,IAClCsD,KAAK84D,YAAYO,SAASz8D,SAASyM,EAAExM,WAAY,KAAKgV,gBAAgBwmD,EAAUz7D,SAASF,EAAEG,WAAY,KAAKy8D,YAIxHf,EAAmBQ,cAAgB,WAC/B,GAAI7yD,GAAWlG,KAAK84D,YAAY/2D,iBAAiB/B,KAAKm4D,WAAW13D,KAAK,KAClEyF,GAASrK,OAAS,GAClBqK,EAASpH,QAAQ,SAAU0C,GACvB8G,EAAO9G,MAOnB+2D,EAAmBS,eAAiB,WAChC,GAAI9yD,GAAWlG,KAAK84D,YAAY/2D,iBAAiB,IAAMu2D,GAAS73D,KAAK,OAAS,IAC1EyF,GAASrK,OAAS,GAClBqK,EAASpH,QAAQ,SAAU0C,GACvB82D,GAASx5D,QAAQ,SAAUy6D,GACnB/3D,EAAQg4D,aAAaD,IACrB/3D,EAAQqQ,gBAAgB0nD,QAS5ChB,EAAmBU,eAAiB,WAChC,GAAIl5D,GAAQC,IACZA,MAAKo4D,YAAYt5D,QAAQ,SAAU85D,EAAM1xD,GACrC,GAAIhB,GAAWnG,EAAM+4D,YAAY/2D,iBAAiB62D,EAAK/vD,SACnD3C,GAASrK,OAAS,IACI,YAAlB+8D,EAAK/vD,SACL3C,EAASpH,QAAQ,SAAU0C,IAC4E,IAA9FA,EAAQ6I,aAAauuD,EAAKP,WAAY77D,QAAQ,UAAW,IAAI0B,QAAQ,qBACtEsD,EAAQqQ,gBAAgB+mD,EAAKP,aAKrCnyD,EAASpH,QAAQ,SAAU0C,GACvBA,EAAQqQ,gBAAgB+mD,EAAKP,iBAM1CE"}
|