{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-inputs/src/input/input.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js"],"names":["Input","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","INPUTGROUP","FLOATINPUT","FLOATLINE","FLOATTEXT","FLOATTEXTCONTENT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","floatType","isBindClearAction","createInput","args","internalCreateElement","makeElement","inputObject","container","buttons","clearButton","floatLabelType","bindClearAction","createInputContainer","element","parentNode","insertBefore","appendChild","createFloatingInput","bindInitialEvent","properties","showClearButton","tagName","setClearButton","setAttribute","classList","contains","i","length","push","appendSpan","validateInputType","setPropertyValue","createSpanElement","checkInputValue","addEventListener","parent","getParentNode","this","add","setTimeout","calculateWidth","remove","inputElement","inputValue","value","parentElement","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","unwireFloatingEvents","removeEventListener","customTag","floatLinelement","className","floatLabelElement","id","replace","placeholder","innerText","encodePlaceHolder","removeAttribute","inputWrap","querySelector","updateLabelState","event","getAttribute","checkFloatLabelType","type","_i","_a","Object","keys","prop","setCssClass","cssClass","setEnabled","enabled","setEnableRtl","enableRtl","setPlaceholder","setReadonly","readonly","updateIconState","button","isNotFocused","document","activeElement","createClearButton","initial","baseElement","insertAdjacentElement","wireClearBtnEvents","undefined","readOnly","preventDefault","focus","destroy","validateLabel","tagClass","tag","result","spanEle","createElement","innerHTML","hiddenInput","children","setValue","elements","oldClass","split","moduleName","elementWidth","clientWidth","parseInt","getComputedStyle","getPropertyValue","setWidth","width","style","match","firstChild","textContent","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","considerWrapper","removeAttributes","addAttributes","isClear","attrs","key","removeFloating","input","inputEle","addFloating","iconEle","inputObj","isPrependIcon","floatLine","floatText","wrapper","labelSpanElement","setRipple","isRipple","_internalRipple","toString","argsButton","querySelectorAll","index","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","ele","parentEle","createIconEle","iconClass","addIcon","position","icons","internalCreate","toLowerCase","result_1","icon","result_2","prependSpan","innerWrapper","wrap","containerElement","ErrorOption","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","regex","EMAIL","RegExp","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","FormValidator","_super","options","_this","call","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","url","date","dateIso","creditcard","number","digits","maxLength","minLength","rangeLength","range","max","min","tel","pattern","equalTo","rules","l10n","locale","localeFunc","on","afterLocalization","inputElements","createHTML5Rules","wireEvents","FormValidator_1","addRules","name","removeRules","validate","selected","validateRules","indexOf","filter","data","rules_1","name_1","reset","clearForm","getInputElement","unwireEvents","errorClass","validClass","elements_1","off","onPropertyChanged","newProp","oldProp","setLocale","getConstant","getModuleName","refresh","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","_b","defRules_1","rule","defRule","JSON","parse","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","clickHandler","changeHandler","focusOutHandler","keyUpHandler","submitHandler","resetHandler","clearEvents","e","trigger","excludeKeys","which","hiddenType","validateHiddenType","vhPos","hPos","splice","rules_2","errorMessage","errorRule","eventArgs","inputName","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","status","optionalValidationStatus","refer","params","param","currentRule","formElement","fn","checkValidator","ruleValue","formats","for","errorOption","Message","errorContainer","outerHTML","hasAttribute","containerId","divElement","customPlacement","nextSibling","display","checkRequired","inputType","option","isNaN","Date","getTime","test","Number","stringify","uNum","parseFloat","compareTo","Label","ROOT","SPINICON","SPINUP","SPINDOWN","ERROR","INCREMENT","DECREMENT","INTREGEXP","DECIMALSEPARATOR","COMPONENT","CONTROL","NUMERIC_FOCUS","HIDDENELEMENT","wrapperAttributes","selectionTimeOut","NumericTextBox","isVue","preventChange","isAngular","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","cloneElement","cloneNode","angularTagName","formEle","attributes","attributeName","nodeName","nodeValue","item","join","localeText","incrementTitle","decrementTitle","setProperties","isValidState","inputStyle","cultureInfo","initCultureInfo","initCultureFunc","prevValue","updateHTMLAttrToElement","checkAttributes","inputEleValue","validateMinMax","validateStep","updatePlaceholder","render","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","strictMode","trimValue","decimals","roundNumber","elementPrevValue","disabled","renderComplete","isDynamic","htmlAttributes","attributes_1","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","inputWrapper","updateHTMLAttrToWrapper","childNodes","updateDataAttribute","attr","a","pro","updateCssClass","newClass","numericClassName","trim","updatedClassValue","numericStyle","spinDown","spinUp","wireSpinBtnEvents","MAX_VALUE","formattedValue","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","bindClearEvent","clear","setElementValue","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","resetFormHandler","updateValue","setSpinButton","focusHandler","keyDownHandler","inputHandler","keyPressHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","changeEventArgs","previousValue","isInteracted","isInteraction","beforeUpdate","numericRegex","preventHandler","iOS","navigator","platform","selectionStart","currentPos","prevPos","start","valArray","numericObject","ignoreKeyCode","charCodeAt","prevVal","setSelectionRange","lastIndexOf","substring","nextEle","cursorPosChanged","validateDecimalOnType","isDevice","parseValue","numerictextboxObj","fireFox","userAgent","parsedValue","localChange","current","previous","nonZeroRegex","keyCode","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","elementValue","serverDecimalSeparator","val","EXPREGEXP","valueString","toFixed","decimalPart","result1","result2","cancelEvent","info","version","metaKey","ctrlKey","currentChar","String","fromCharCode","isAlterNumPadDecimalChar","code","text","selectionEnd","fractionRule","mouseWheel","delta","rawEvent","wheelDelta","detail","clearTimeout","focusEventArgs","formatValue_1","delay","isIos","blurEventArgs","value_1","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","attrArray","getText","focusIn","focusOut","blur","getPersistData","keyEntity","addOnPersist","updateSpinButton","updateClearButton","propValue"],"mappings":"0HAAA,sCAyBWA,EAzBX,YAGIC,EAAa,CACbC,IAAK,QACLC,QAAS,aACTC,MAAO,UACPC,SAAU,qBACVC,WAAY,gBACZC,WAAY,gBACZC,UAAW,eACXC,UAAW,eACXC,iBAAkB,uBAClBC,UAAW,eACXC,cAAe,oBACfC,SAAU,cACVC,YAAa,iBACbC,aAAc,mBACdC,eAAgB,qBAChBC,eAAgB,uBAOpB,SAAWjB,GACP,IAKIkB,EACAC,GAAoB,EAQxB,SAASC,EAAYC,EAAMC,GACvB,IAAIC,EAAe,eAAkBD,GAAiD,OAAxBA,EAC1DE,EAAc,CAAEC,UAAW,KAAMC,QAAS,GAAIC,YAAa,MAqB/D,GApBAT,EAAYG,EAAKO,eACjBT,EAAoBE,EAAKQ,gBACrB,eAAkBR,EAAKO,iBAA2C,UAAxBP,EAAKO,gBAC/CJ,EAAYC,UAAYK,EAAqBT,EAAMpB,EAAWK,WAAYL,EAAWe,eAAgB,OAAQO,GAC7GF,EAAKU,QAAQC,WAAWC,aAAaT,EAAYC,UAAWJ,EAAKU,SACjE,eAAS,CAACV,EAAKU,SAAU9B,EAAWG,OACpCoB,EAAYC,UAAUS,YAAYb,EAAKU,UAGvCI,EAAoBd,EAAMG,EAAaD,GAE3Ca,EAAiBf,GACZ,eAAkBA,EAAKgB,aAAgB,eAAkBhB,EAAKgB,WAAWC,mBAC1EjB,EAAKgB,WAAWC,iBAA4C,aAAzBjB,EAAKU,QAAQQ,UAChDC,EAAenB,EAAKgB,WAAWC,gBAAiBjB,EAAKU,QAASP,GAAa,EAAMD,GACjFC,EAAYG,YAAYc,aAAa,OAAQ,UACzCjB,EAAYC,UAAUiB,UAAUC,SAAS1C,EAAWM,aACpD,eAAS,CAACiB,EAAYC,WAAYxB,EAAWK,cAGhD,eAAkBe,EAAKK,UAAqC,aAAzBL,EAAKU,QAAQQ,QACjD,IAAK,IAAIK,EAAI,EAAGA,EAAIvB,EAAKK,QAAQmB,OAAQD,IACrCpB,EAAYE,QAAQoB,KAAKC,EAAW1B,EAAKK,QAAQkB,GAAIpB,EAAYC,UAAWF,IAWpF,OARK,eAAkBF,EAAKU,UAAqC,aAAzBV,EAAKU,QAAQQ,SACjD,eAAS,CAACf,EAAYC,WAAYxB,EAAWI,UAEjD2C,EAAkBxB,EAAYC,UAAWJ,EAAKU,SAC9CP,EAAcyB,EAAiB5B,EAAMG,GACrC0B,EAAkB1B,EAAYC,UAAWF,GAEvBC,EACXA,EAGX,SAASY,EAAiBf,GACtB8B,EAAgB9B,EAAKO,eAAgBP,EAAKU,SAC1CV,EAAKU,QAAQqB,iBAAiB,SAAS,WACnC,IAAIC,EAASC,EAAcC,OACvBF,EAAOX,UAAUC,SAAS,kBAAoBU,EAAOX,UAAUC,SAAS,cACrEU,EAAOX,UAAUC,SAAS,cAC7BU,EAAOX,UAAUc,IAAI,iBAEzBC,YAAW,WACPzD,EAAM0D,eAAerC,EAAKU,QAASsB,KACpC,OAEPhC,EAAKU,QAAQqB,iBAAiB,QAAQ,WAClC,IAAIC,EAASC,EAAcC,OACvBF,EAAOX,UAAUC,SAAS,kBAAoBU,EAAOX,UAAUC,SAAS,cACrEU,EAAOX,UAAUC,SAAS,cAC7BU,EAAOX,UAAUiB,OAAO,iBAE5BF,YAAW,WACPzD,EAAM0D,eAAerC,EAAKU,QAASsB,KACpC,OAEPhC,EAAKU,QAAQqB,iBAAiB,SAAS,WACnCD,EAAgBjC,EAAWG,EAAKU,YAIxC,SAASoB,EAAgBvB,EAAgBgC,GACrC,IAAIC,EAAaD,EAAaE,MACX,KAAfD,IAAsB,eAAkBA,IAAeD,EAAaG,cACpEH,EAAaG,cAAcrB,UAAUc,IAAI,iBAEjB,WAAnB5B,GAA+BgC,EAAaG,eACjDH,EAAaG,cAAcrB,UAAUiB,OAAO,iBAGpD,SAASK,IACL,IAAIC,EAAQX,EAAcC,MAAMW,uBAAuB,gBAAgB,GAClE,eAAkBD,KACnB,eAAS,CAACA,GAAQhE,EAAWY,UACzBoD,EAAMvB,UAAUC,SAAS1C,EAAWa,cACpC,gBAAY,CAACmD,GAAQhE,EAAWa,cAI5C,SAASqD,IACL,IAAId,EAASC,EAAcC,MAC3B,GAAKF,EAAOe,qBAAqB,YAAY,GAA2D,KAArDf,EAAOe,qBAAqB,YAAY,GAAGN,MACxC,KAAlDT,EAAOe,qBAAqB,SAAS,GAAGN,MAAc,CACtD,IAAIG,EAAQZ,EAAOa,uBAAuB,gBAAgB,GACrD,eAAkBD,KACfA,EAAMvB,UAAUC,SAAS1C,EAAWY,WACpC,gBAAY,CAACoD,GAAQhE,EAAWY,UAEpC,eAAS,CAACoD,GAAQhE,EAAWa,eAIzC,SAASuD,EAAmBtC,GACxBA,EAAQqB,iBAAiB,QAASY,GAClCjC,EAAQqB,iBAAiB,OAAQe,GAGrC,SAASG,EAAqBvC,GAC1BA,EAAQwC,oBAAoB,QAASP,GACrCjC,EAAQwC,oBAAoB,OAAQJ,GAExC,SAAShC,EAAoBd,EAAMG,EAAaF,GAC5C,IAAIC,EAAe,eAAkBD,GAAiD,OAAxBA,EAClC,SAAxBD,EAAKO,gBACLyC,EAAmBhD,EAAKU,SAExB,eAAkBP,EAAYC,YAC9BD,EAAYC,UAAYK,EAAqBT,EAAMpB,EAAWM,WAAYN,EAAWgB,eAAgB,MAAOM,GACxGF,EAAKU,QAAQC,YACbX,EAAKU,QAAQC,WAAWC,aAAaT,EAAYC,UAAWJ,EAAKU,WAIhE,eAAkBV,EAAKmD,YACxBhD,EAAYC,UAAUiB,UAAUc,IAAIvD,EAAWgB,gBAEnDO,EAAYC,UAAUiB,UAAUc,IAAIvD,EAAWM,aAEnD,IAAIkE,EAAkBlD,EAAY,OAAQ,CAAEmD,UAAWzE,EAAWO,YAC9DmE,EAAoBpD,EAAY,QAAS,CAAEmD,UAAWzE,EAAWQ,YAgBrE,GAfK,eAAkBY,EAAKU,QAAQ6C,KAA2B,KAApBvD,EAAKU,QAAQ6C,KACpDD,EAAkBC,GAAK,SAAWvD,EAAKU,QAAQ6C,GAAGC,QAAQ,KAAM,KAChE,eAAWxD,EAAKU,QAAS,CAAE,kBAAmB4C,EAAkBC,MAE/D,eAAkBvD,EAAKU,QAAQ+C,cAA6C,KAA7BzD,EAAKU,QAAQ+C,cAC7DH,EAAkBI,UAAYC,EAAkB3D,EAAKU,QAAQ+C,aAC7DzD,EAAKU,QAAQkD,gBAAgB,gBAE5B,eAAkB5D,EAAKgB,aAAgB,eAAkBhB,EAAKgB,WAAWyC,cAC1C,KAAhCzD,EAAKgB,WAAWyC,cAChBH,EAAkBI,UAAYC,EAAkB3D,EAAKgB,WAAWyC,cAE/DH,EAAkBI,WACnBvD,EAAYC,UAAUiB,UAAUc,IAAIvD,EAAWc,cAE/CS,EAAYC,UAAUiB,UAAUC,SAAS,qBAAsB,CAC/D,IAAIuC,EAAY1D,EAAYC,UAAU0D,cAAc,oBACpDD,EAAUhD,YAAYb,EAAKU,SAC3BmD,EAAUhD,YAAYuC,GACtBS,EAAUhD,YAAYyC,QAGtBnD,EAAYC,UAAUS,YAAYb,EAAKU,SACvCP,EAAYC,UAAUS,YAAYuC,GAClCjD,EAAYC,UAAUS,YAAYyC,GAEtCS,EAAiB/D,EAAKU,QAAQ+B,MAAOa,GACT,WAAxBtD,EAAKO,iBACD+C,EAAkBjC,UAAUC,SAAS1C,EAAWa,cAChD,gBAAY,CAAC6D,GAAoB1E,EAAWa,aAEhD,eAAS,CAAC6D,GAAoB1E,EAAWY,WAEjB,SAAxBQ,EAAKO,iBAELP,EAAKU,QAAQqB,iBAAiB,SAAS,SAAUiC,GAC7CD,EAAiB/D,EAAKU,QAAQ+B,MAAOa,EAAmBtD,EAAKU,YAGjEV,EAAKU,QAAQqB,iBAAiB,QAAQ,SAAUiC,GAC5CD,EAAiB/D,EAAKU,QAAQ+B,MAAOa,OAGxC,eAAkBtD,EAAKU,QAAQuD,aAAa,QAC7CX,EAAkBlC,aAAa,MAAOpB,EAAKU,QAAQuD,aAAa,OAGxE,SAASC,EAAoBC,EAAM/D,GAClB,WAAT+D,GAAqB/D,EAAUiB,UAAUC,SAAS,cAClDlB,EAAUiB,UAAUc,IAAI,iBAGhC,SAASP,EAAiB5B,EAAMG,GAC5B,IAAK,eAAkBH,EAAKgB,YACxB,IAAK,IAAIoD,EAAK,EAAGC,EAAKC,OAAOC,KAAKvE,EAAKgB,YAAaoD,EAAKC,EAAG7C,OAAQ4C,IAAM,CACtE,IAAII,EAAOH,EAAGD,GACd,OAAQI,GACJ,IAAK,WACDC,EAAYzE,EAAKgB,WAAW0D,SAAU,CAACvE,EAAYC,YACnD8D,EAAoBlE,EAAKO,eAAgBJ,EAAYC,WACrD,MACJ,IAAK,UACDuE,EAAW3E,EAAKgB,WAAW4D,QAAS5E,EAAKU,QAASV,EAAKO,eAAgBJ,EAAYC,WACnF,MACJ,IAAK,YACDyE,EAAa7E,EAAKgB,WAAW8D,UAAW,CAAC3E,EAAYC,YACrD,MACJ,IAAK,cACD2E,EAAe/E,EAAKgB,WAAWyC,YAAazD,EAAKU,SACjD,MACJ,IAAK,WACDsE,EAAYhF,EAAKgB,WAAWiE,SAAUjF,EAAKU,SAC3C,OAIhB,OAAOP,EAEX,SAAS+E,EAAgBzC,EAAO0C,EAAQF,GAC/B,eAAkBE,KACf1C,IAAUwC,EACV,gBAAY,CAACE,GAASvG,EAAWW,eAGjC,eAAS,CAAC4F,GAASvG,EAAWW,gBAI1C,SAASwE,EAAiBtB,EAAOG,EAAOlC,GAEpC,QADgB,IAAZA,IAAsBA,EAAU,MAChC+B,EACA,eAAS,CAACG,GAAQhE,EAAWY,UACzBoD,EAAMvB,UAAUC,SAAS1C,EAAWa,cACpC,gBAAY,CAACmD,GAAQhE,EAAWa,iBAGnC,CACD,IAAI2F,EAA0B,MAAX1E,GAAkBA,IAAY2E,SAASC,cACtDF,IACIxC,EAAMvB,UAAUC,SAAS1C,EAAWY,WACpC,gBAAY,CAACoD,GAAQhE,EAAWY,UAEpC,eAAS,CAACoD,GAAQhE,EAAWa,eAIzC,SAASwC,EAAcvB,GACnB,IAAIC,EAAa,eAAkBD,EAAQC,YAAcD,EACnDA,EAAQC,WAId,OAHIA,GAAcA,EAAWU,UAAUC,SAAS,qBAC5CX,EAAaA,EAAWA,YAErBA,EAKX,SAAS4E,EAAkB7E,EAASP,EAAaqF,EAASvF,GACtD,IAAIC,EAAe,eAAkBD,GAAiD,OAAxBA,EAC1DkF,EAASjF,EAAY,OAAQ,CAAEmD,UAAWzE,EAAWU,YACrDc,EAAYD,EAAYC,UAC5B,GAAK,eAAkBoF,GAGlB,CACD,IAAIC,EAActF,EAAYC,UAAUiB,UAAUC,SAAS1C,EAAWM,YAClEiB,EAAYC,UAAU0D,cAAc,IAAMlF,EAAWQ,WAAasB,EACtE+E,EAAYC,sBAAsB,WAAYP,QAL9C/E,EAAUS,YAAYsE,GAc1B,OAPK,eAAkB/E,IACnBA,EAAUiB,UAAUC,SAAS1C,EAAWM,aACxC,eAAS,CAACkB,GAAYxB,EAAWK,YAErC,eAAS,CAACkG,GAASvG,EAAWW,eAC9BoG,EAAmBjF,EAASyE,EAAQ/E,GACpC+E,EAAO/D,aAAa,aAAc,SAC3B+D,EAGX,SAASQ,EAAmBjF,EAASyE,EAAQ/E,GACpC,eAAkB+E,SAAkCS,IAAtB9F,IAAmCA,GAClEqF,EAAOpD,iBAAiB,SAAS,SAAUiC,GACjCtD,EAAQW,UAAUC,SAAS1C,EAAWE,UAAY4B,EAAQmF,WAC5D7B,EAAM8B,iBACFpF,IAAY2E,SAASC,eACrB5E,EAAQqF,QAEZrF,EAAQ+B,MAAQ,GAChB,eAAS,CAAC0C,GAASvG,EAAWW,mBAK1CmB,EAAQqB,iBAAiB,SAAS,SAAUiC,GACxCkB,EAAgBxE,EAAQ+B,MAAO0C,MAGnCzE,EAAQqB,iBAAiB,SAAS,SAAUiC,GACxCkB,EAAgBxE,EAAQ+B,MAAO0C,EAAQzE,EAAQmF,aAGnDnF,EAAQqB,iBAAiB,QAAQ,SAAUiC,GACvC5B,YAAW,WACF,eAAkB+C,KACnB,eAAS,CAACA,GAASvG,EAAWW,eAC9B4F,GAAU,eAAkBzE,IAAYA,EAAQW,UAAUC,SAAS,cAAgB,KAAO6D,KAE/F,QAIX,SAASa,IACa,KAGtB,SAASC,EAAcvF,EAASH,GAC5B,IAAIyB,EAASC,EAAcvB,GAC3B,GAAIsB,EAAOX,UAAUC,SAAS1C,EAAWM,aAAkC,SAAnBqB,EAA2B,CAC/E,IAAIqC,EAAQX,EAAcvB,GAASmC,uBAAuB,gBAAgB,GAC1EkB,EAAiBrD,EAAQ+B,MAAOG,EAAOlC,IAM/C,SAASD,EAAqBT,EAAMqD,EAAW6C,EAAUC,EAAKlG,GAC1D,IACIG,EADAF,EAAe,eAAkBD,GAAiD,OAAxBA,EAU9D,OARK,eAAkBD,EAAKmD,WAKxB/C,EAAYF,EAAYiG,EAAK,CAAE9C,UAAWA,KAJ1CjD,EAAYF,EAAYF,EAAKmD,UAAW,CAAEE,UAAWA,IACrDjD,EAAUiB,UAAUc,IAAI+D,IAK5B9F,EAAUiB,UAAUc,IAAI,qBACjB/B,EAEX,SAASuD,EAAkBF,GACvB,IAAI2C,EAAS,GACb,IAAK,eAAkB3C,IAAgC,KAAhBA,EAAoB,CACvD,IAAI4C,EAAUhB,SAASiB,cAAc,QACrCD,EAAQE,UAAY,wBAA0B9C,EAAc,MAC5D,IAAI+C,EAAeH,EAAQI,SAAS,GACpCL,EAASI,EAAY/C,YAEzB,OAAO2C,EAaX,SAASM,EAASjE,EAAO/B,EAASH,EAAgBD,GAM9C,GALAI,EAAQ+B,MAAQA,EAChBJ,EAAe3B,EAASA,EAAQgC,eAC1B,eAAkBnC,IAAuC,SAAnBA,GACxC0F,EAAcvF,EAASH,IAEtB,eAAkBD,IAAgBA,EAAa,CAChD,IAAIoC,EAAgBT,EAAcvB,GAClC,IAAK,eAAkBgC,GAAgB,CACnC,IAAIyC,EAASzC,EAAcG,uBAAuBjE,EAAWU,WAAW,GACnE,eAAkB6F,KACfzE,EAAQ+B,QAAU,eAAkBC,IAAkBA,EAAcrB,UAAUC,SAAS,iBACvF,gBAAY,CAAC6D,GAASvG,EAAWW,eAGjC,eAAS,CAAC4F,GAASvG,EAAWW,iBAK9CuC,EAAgBvB,EAAgBG,GAcpC,SAAS+D,EAAYC,EAAUiC,EAAUC,GAChC,eAAkBA,IAA0B,KAAbA,GAChC,gBAAYD,EAAUC,EAASC,MAAM,MAEpC,eAAkBnC,IAA0B,KAAbA,GAChC,eAASiC,EAAUjC,EAASmC,MAAM,MAa1C,SAASxE,EAAe3B,EAASN,EAAW0G,GACxC,IAAIC,EAA8B,gBAAfD,EAA+BpG,EAAUA,EAAQsG,YAAcC,SAASC,iBAAiBxG,EAAS,MAAMyG,iBAAiB,gBAAiB,IACxJ,eAAkB/G,EAAUyC,uBAAuB,wBAAwB,MACxEzC,EAAUyC,uBAAuB,wBAAwB,GAAGxB,UAAUC,SAAS,0BAC/ElB,EAAUyC,uBAAuB,wBAAwB,GAAGxB,UAAUiB,OAAO,0BAE7EyE,EAAe3G,EAAUyC,uBAAuB,wBAAwB,GAAGmE,aAAeD,IAAiB3G,EAAUyC,uBAAuB,wBAAwB,GAAGmE,cACvK5G,EAAUyC,uBAAuB,wBAAwB,GAAGxB,UAAUc,IAAI,0BActF,SAASiF,EAASC,EAAOjH,GACA,kBAAViH,EACPjH,EAAUkH,MAAMD,MAAQ,eAAWA,GAEb,kBAAVA,IACZjH,EAAUkH,MAAMD,MAASA,EAAME,MAAM,WAAc,EAAW,cAAD,CAAYF,IAE7EhF,EAAejC,EAAUoH,WAAYpH,GAYzC,SAAS2E,EAAetB,EAAa/C,GACjC+C,EAAcE,EAAkBF,GAChC,IAAIf,EAAgBT,EAAcvB,GAC9BgC,EAAcrB,UAAUC,SAAS1C,EAAWM,YACvC,eAAkBuE,IAAgC,KAAhBA,GAMnCf,EAAcrB,UAAUc,IAAIvD,EAAWc,cACvCgD,EAAcG,uBAAuB,wBAAwB,GAAKH,EAAcG,uBAAuBjE,EAAWQ,WAAW,GAAGqH,SAAS,GAAGgB,YAAc,GAAK/E,EAAcG,uBAAuBjE,EAAWQ,WAAW,GAAGqI,YAAc,KAN3O/E,EAAcG,uBAAuB,wBAAwB,GAAKH,EAAcG,uBAAuBjE,EAAWQ,WAAW,GAAGqH,SAAS,GAAGgB,YAAchE,EAAcf,EAAcG,uBAAuBjE,EAAWQ,WAAW,GAAGqI,YAAchE,EACpPf,EAAcrB,UAAUiB,OAAO1D,EAAWc,cAC1CgB,EAAQkD,gBAAgB,gBAQvB,eAAkBH,IAAgC,KAAhBA,EAInC/C,EAAQkD,gBAAgB,eAHxB,eAAWlD,EAAS,CAAE,YAAe+C,IAmBjD,SAASuB,EAAY0C,EAAYhH,EAASH,GAClCmH,EACA,eAAWhH,EAAS,CAAEuE,SAAU,KAGhCvE,EAAQkD,gBAAgB,YAEvB,eAAkBrD,IACnB0F,EAAcvF,EAASH,GAe/B,SAASsE,EAAa8C,EAAOhB,GACrBgB,EACA,eAAShB,EAAU/H,EAAWC,KAG9B,gBAAY8H,EAAU/H,EAAWC,KAezC,SAAS8F,EAAWiD,EAAUlH,EAASH,EAAgBsH,GACnD,IAAIC,EAAgB,CAAE,SAAY,WAAY,gBAAiB,QAC3DC,GAAkB,eAAkBF,GACpCD,GACAlH,EAAQW,UAAUiB,OAAO1D,EAAWE,SACpCkJ,EAAiBF,EAAepH,GAC5BqH,GACA,gBAAY,CAACF,GAAiBjJ,EAAWE,WAI7C4B,EAAQW,UAAUc,IAAIvD,EAAWE,SACjCmJ,EAAcH,EAAepH,GACzBqH,GACA,eAAS,CAACF,GAAiBjJ,EAAWE,UAGzC,eAAkByB,IACnB0F,EAAcvF,EAASH,GAI/B,SAASY,EAAe+G,EAASxH,EAASP,EAAaqF,EAASvF,GAC5D,IAAIC,EAAe,eAAkBD,GAAiD,OAAxBA,EAC1DiI,EACA/H,EAAYG,YAAciF,EAAkB7E,EAASP,EAAaqF,EAAStF,IAG3E,eAAOC,EAAYG,aACnBH,EAAYG,YAAc,MAelC,SAAS0H,EAAiBG,EAAOzH,GAC7B,IAAK,IAAI0D,EAAK,EAAGC,EAAKC,OAAOC,KAAK4D,GAAQ/D,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC5D,IAAIgE,EAAM/D,EAAGD,GACT1B,EAAgBT,EAAcvB,GACtB,aAAR0H,GACA1H,EAAQW,UAAUiB,OAAO1D,EAAWE,SAE5B,aAARsJ,GAAsB1F,EAAcrB,UAAUC,SAAS1C,EAAWK,aAClEyD,EAAcrB,UAAUiB,OAAO1D,EAAWE,SAElC,gBAARsJ,GAAyB1F,EAAcrB,UAAUC,SAAS1C,EAAWM,YACrEwD,EAAcG,uBAAuBjE,EAAWQ,WAAW,GAAGqI,YAAc,GAG5E/G,EAAQkD,gBAAgBwE,IAgBpC,SAASH,EAAcE,EAAOzH,GAC1B,IAAK,IAAI0D,EAAK,EAAGC,EAAKC,OAAOC,KAAK4D,GAAQ/D,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC5D,IAAIgE,EAAM/D,EAAGD,GACT1B,EAAgBT,EAAcvB,GACtB,aAAR0H,GACA1H,EAAQW,UAAUc,IAAIvD,EAAWE,SAEzB,aAARsJ,GAAsB1F,EAAcrB,UAAUC,SAAS1C,EAAWK,aAClEyD,EAAcrB,UAAUc,IAAIvD,EAAWE,SAE/B,gBAARsJ,GAAyB1F,EAAcrB,UAAUC,SAAS1C,EAAWM,YACrEwD,EAAcG,uBAAuBjE,EAAWQ,WAAW,GAAGqI,YAAcU,EAAM,GAAKC,GAGvF1H,EAAQU,aAAagH,EAAKD,EAAM,GAAKC,KAKjD,SAASC,EAAeC,GACpB,IAAIlI,EAAYkI,EAAMlI,UACtB,IAAK,eAAkBA,IAAcA,EAAUiB,UAAUC,SAAS1C,EAAWM,YAAa,CACtF,IAAIqJ,EAAWnI,EAAU0D,cAAc,YAAc1D,EAAU0D,cAAc,YACzE1D,EAAU0D,cAAc,SACxBL,EAAcrD,EAAU0D,cAAc,IAAMlF,EAAWQ,WAAWqI,YAClEnH,EAA2D,OAA7CF,EAAU0D,cAAc,iBAC1C,eAAO1D,EAAU0D,cAAc,IAAMlF,EAAWO,YAChD,eAAOiB,EAAU0D,cAAc,IAAMlF,EAAWQ,YAChD,eAAUgB,EAAW,CAACxB,EAAWK,YAAa,CAACL,EAAWM,aAC1D+D,EAAqBsF,GACrB,eAAWA,EAAU,CAAE,YAAe9E,IACtC8E,EAASlH,UAAUc,IAAIvD,EAAWG,OAC7BuB,GAAoC,UAArBiI,EAASrH,SACzBqH,EAAS3E,gBAAgB,aAKrC,SAAS4E,EAAYF,EAAOnE,EAAMV,EAAaxD,GAC3C,IAAIC,EAAe,eAAkBD,GAAiD,OAAxBA,EAC1DG,EAAY,eAAQkI,EAAO,IAAM1J,EAAWK,YAEhD,GADAY,EAAYsE,EACC,UAATA,EAAkB,CAClB,IAAIhB,EAAY/C,EAAUc,QAC1BiC,EAA0B,QAAdA,GAAqC,SAAdA,EAAuBA,EAAY,KACtE,IAAInD,EAAO,CAAEU,QAAS4H,EAAO/H,eAAgB4D,EACzChB,UAAWA,EAAWnC,WAAY,CAAEyC,YAAaA,IACjDgF,EAAUrI,EAAU0D,cAAc,iBAClC4E,EAAW,CAAEtI,UAAWA,GAC5BkI,EAAMjH,UAAUiB,OAAO1D,EAAWG,OAClC+B,EAAoBd,EAAM0I,EAAUxI,GACpC2B,EAAkB6G,EAAStI,UAAWF,GACtCmC,EAAerC,EAAKU,QAASgI,EAAStI,WACtC,IAAIuI,EAAgBvI,EAAUiB,UAAUC,SAAS,qBACjD,GAAI,eAAkBmH,GAClB,GAAIE,EAAe,CACf,IAAI9E,EAAYzD,EAAU0D,cAAc,oBACxC2E,EAAU5E,EAAUC,cAAc,4BAGlC2E,EAAUrI,EAAU0D,cAAc,uBAG1C,GAAI,eAAkB2E,GACdE,IACAF,EAAUrI,EAAU0D,cAAc,wBAElC,eAAkB2E,IAClBrI,EAAUiB,UAAUiB,OAAO1D,EAAWK,gBAGzC,CACD,IAAI2J,EAAYxI,EAAU0D,cAAc,IAAMlF,EAAWO,WACrD0J,EAAYzI,EAAU0D,cAAc,IAAMlF,EAAWQ,WACrD0J,EAAUH,EAAgBvI,EAAU0D,cAAc,oBAAsB1D,EAC5E0I,EAAQlI,aAAa0H,EAAOG,GAC5BK,EAAQlI,aAAagI,EAAWH,GAChCK,EAAQlI,aAAaiI,EAAWJ,IAGxCvE,EAAoBC,EAAMmE,EAAM5F,eAcpC,SAASb,EAAkB1B,EAAaD,GACpC,GAAIC,EAAYkB,UAAUC,SAAS,cAAgBnB,EAAY0C,uBAAuB,gBAAgB,GAAI,CACtG,IAAIkG,EAAmB7I,EAAY,OAAQ,CAAEmD,UAAWzE,EAAWS,mBACnE0J,EAAiBxC,UAAYpG,EAAY0C,uBAAuB,gBAAgB,GAAG0D,UACnFpG,EAAY0C,uBAAuB,gBAAgB,GAAG0D,UAAY,GAClEpG,EAAY0C,uBAAuB,gBAAgB,GAAGhC,YAAYkI,IAe1E,SAASC,EAAUC,EAAUP,GACzB,IAAK,IAAInH,EAAI,EAAGA,EAAImH,EAASlH,OAAQD,IACjC2H,EAAgBD,EAAUP,EAASzB,SAAS1F,EAAE4H,aAAa/I,WAInE,SAAS8I,EAAgBD,EAAU7I,EAAW+E,GAC1C,IAAIiE,EAAa,GACjBA,EAAW3H,KAAK0D,GAChB,IAAI9E,EAAU,eAAkB8E,GAC5B/E,EAAUiJ,iBAAiB,uBAAyBD,EACxD,GAAIH,GAAY5I,EAAQmB,OAAS,EAC7B,IAAK,IAAI8H,EAAQ,EAAGA,EAAQjJ,EAAQmB,OAAQ8H,IACxCjJ,EAAQ4G,SAASqC,EAAMH,aAAapH,iBAAiB,YAAawH,GAAoB,GACtFlJ,EAAQ4G,SAASqC,EAAMH,aAAapH,iBAAiB,UAAWyH,GAAkB,QAGrF,GAAInJ,EAAQmB,OAAS,EACtB,IAAS8H,EAAQ,EAAGA,EAAQjJ,EAAQmB,OAAQ8H,IACxCjJ,EAAQ4G,SAASqC,EAAMH,aAAajG,oBAAoB,YAAaqG,EAAoBrH,MACzF7B,EAAQ4G,SAASqC,EAAMH,aAAajG,oBAAoB,UAAWsG,EAAkBtH,MAIjG,SAASuH,EAAerJ,EAAW+E,GAC1B/E,EAAUiB,UAAUC,SAAS,eAAkBlB,EAAU0D,cAAc,SAAS+B,UACjFV,EAAO9D,UAAUc,IAAI,sBAG7B,SAASoH,IAEL,IAAIG,EAAMxH,KACNyH,EAAYzH,KAAKQ,cACrB,OAAQiH,EAAUtI,UAAUC,SAAS,iBACjCqI,EAAYA,EAAUjH,cAE1B+G,EAAeE,EAAWD,GAE9B,SAASF,IAEL,IAAIE,EAAMxH,KACVE,YAAW,WACPsH,EAAIrI,UAAUiB,OAAO,wBACtB,KAEP,SAASsH,EAAcC,EAAW3J,GAC9B,IAAIiF,EAASjF,EAAY,OAAQ,CAAEmD,UAAWwG,IAE9C,OADA1E,EAAO9D,UAAUc,IAAI,sBACdgD,EAeX,SAAS2E,EAAQC,EAAUC,EAAO5J,EAAWkI,EAAO2B,GAEhD,IAAI7D,EAA4B,kBAAZ,EAAuB4D,EAAMnD,MAAM,KACjDmD,EACN,GAA+B,WAA3BD,EAASG,cACT,IAAK,IAAI9F,EAAK,EAAG+F,EAAW/D,EAAQhC,EAAK+F,EAAS3I,OAAQ4C,IAAM,CAC5D,IAAIgG,EAAOD,EAAS/F,GACpB1C,EAAW0I,EAAMhK,EAAW6J,QAIhC,IAAK,IAAI5F,EAAK,EAAGgG,EAAWjE,EAAQ/B,EAAKgG,EAAS7I,OAAQ6C,IAAM,CACxD+F,EAAOC,EAAShG,GACpBiG,EAAYF,EAAMhK,EAAWkI,EAAO2B,GAGxC7J,EAAUyC,uBAAuB,sBAAsB,IAAMzC,EAAUyC,uBAAuB,yBAAyB,IACvHzC,EAAUyC,uBAAuB,yBAAyB,GAAGxB,UAAUc,IAAI,UAgBnF,SAASmI,EAAYT,EAAWzJ,EAAWmC,EAActC,GAErD,IAAIC,EAAe,eAAkBD,GAAiD,OAAxBA,EAC1DkF,EAASyE,EAAcC,EAAW3J,GACtCE,EAAUiB,UAAUc,IAAI,qBACxB,IAAIoI,EAAenK,EAAU0D,cAAc,oBAC3C,GAAI,eAAkByG,GAAe,CACjCA,EAAerK,EAAY,OAAQ,CAAEmD,UAAW,oBAChDd,EAAa5B,WAAWC,aAAa2J,EAAchI,GACnD,IAAI6D,EAAShG,EAAUiJ,iBAAiB9G,EAAarB,QAAU,QAC/DqJ,EAAa1J,YAAY0B,GACzB,IAAK,IAAIhB,EAAI,EAAGA,EAAI6E,EAAO5E,OAAQD,IAC/BgJ,EAAa1J,YAAYuF,EAAOa,SAAS1F,EAAE4H,cAQnD,OALAoB,EAAa5J,WAAWC,aAAauE,EAAQoF,GACxCnK,EAAUiB,UAAUC,SAAS1C,EAAWK,aACzCmB,EAAUiB,UAAUc,IAAIvD,EAAWK,YAEvCiK,GAAgB,EAAM9I,EAAW+E,GAC1BA,EAaX,SAASzD,EAAWmI,EAAWzJ,EAAWH,GACtC,IAAIC,EAAe,eAAkBD,GAAiD,OAAxBA,EAC1DkF,EAASyE,EAAcC,EAAW3J,GACjCE,EAAUiB,UAAUC,SAAS1C,EAAWK,aACzCmB,EAAUiB,UAAUc,IAAIvD,EAAWK,YAEvC,IAAIuL,EAAQpK,EAAUiB,UAAUC,SAAS,qBAAwBlB,EAAU0D,cAAc,oBACrF1D,EAGJ,OAFAoK,EAAK3J,YAAYsE,GACjB+D,GAAgB,EAAM9I,EAAW+E,GAC1BA,EAGX,SAASxD,EAAkB8I,EAAkBnC,GACtB,WAAfA,EAAMnE,KACNsG,EAAiBpJ,UAAUc,IAAI,YAE1BsI,EAAiBpJ,UAAUC,SAAS,aACzCmJ,EAAiBpJ,UAAUiB,OAAO,YA3yB1C3D,EAAMoB,YAAcA,EA2BpBpB,EAAMoC,iBAAmBA,EAoCzBpC,EAAMqE,mBAAqBA,EAkM3BrE,EAAMgH,mBAAqBA,EAI3BhH,EAAMqH,QAAUA,EAmEhBrH,EAAM+H,SAAWA,EAoBjB/H,EAAM8F,YAAcA,EAqBpB9F,EAAM0D,eAAiBA,EAmBvB1D,EAAMyI,SAAWA,EAiCjBzI,EAAMoG,eAAiBA,EAuBvBpG,EAAMqG,YAAcA,EAoBpBrG,EAAMkG,aAAeA,EAiCrBlG,EAAMgG,WAAaA,EAWnBhG,EAAMwC,eAAiBA,EA8BvBxC,EAAMqJ,iBAAmBA,EA8BzBrJ,EAAMsJ,cAAgBA,EAmBtBtJ,EAAM0J,eAAiBA,EA6CvB1J,EAAM6J,YAAcA,EAoBpB7J,EAAMkD,kBAAoBA,EAiB1BlD,EAAMqK,UAAYA,EA8ElBrK,EAAMmL,QAAUA,EAmChBnL,EAAM2L,YAAcA,EAuBpB3L,EAAM+C,WAAaA,EASnB/C,EAAMgD,kBAAoBA,GAn2B9B,CAo2BGhD,IAAUA,EAAQ,M,oCC93BrB,sCA4CW+L,EA5CX,YAAIC,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBtG,OAAOyG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,KAClEN,EAAcC,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASM,IAAOlJ,KAAKmJ,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAaxG,OAAOiH,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQtD,EAAKuD,GAC7E,IAA2Hd,EAAvHe,EAAIC,UAAUrK,OAAQsK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOrH,OAAOyH,yBAAyBL,EAAQtD,GAAOuD,EACrH,GAAuB,kBAAZK,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQtD,EAAKuD,QACpH,IAAK,IAAIpK,EAAIkK,EAAWjK,OAAS,EAAGD,GAAK,EAAGA,KAASsJ,EAAIY,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQtD,EAAK0D,GAAKjB,EAAEa,EAAQtD,KAAS0D,GAChJ,OAAOF,EAAI,GAAKE,GAAKxH,OAAO4H,eAAeR,EAAQtD,EAAK0D,GAAIA,GAUrDK,EAAQ,CAEfC,MAAO,IAAIC,OAAO,mHAGlBC,IAAK,kFACLC,SAAU,IAAIF,OAAO,2DACrBG,OAAQ,IAAIH,OAAO,YACnBI,MAAO,IAAIJ,OAAO,qBAClBK,WAAY,IAAIL,OAAO,kBAS3B,SAAW3B,GAIPA,EAAYA,EAAY,WAAa,GAAK,UAI1CA,EAAYA,EAAY,SAAW,GAAK,SAR5C,CASGA,IAAgBA,EAAc,KAgBjC,IAAIiC,EAA+B,SAAUC,GASzC,SAASD,EAAcjM,EAASmM,GAC5B,IAAIC,EAAQF,EAAOG,KAAK7K,KAAM2K,EAASnM,IAAYwB,KA6CnD,GA5CA4K,EAAME,UAAY,GAClBF,EAAMG,WAAa,GACnBH,EAAMI,aAAc,EACpBJ,EAAMK,SAAW,WACjBL,EAAMM,YAAc,KACpBN,EAAMvK,aAAe,KACrBuK,EAAMO,YAAc,+DAEpBP,EAAMQ,cAAgB,GAMtBR,EAAMS,gBAAkB,CACpBJ,SAAU,0BACVK,MAAO,sCACPC,IAAK,4BACLC,KAAM,6BACNC,QAAS,qCACTC,WAAY,iCACZC,OAAQ,+BACRC,OAAQ,4BACRC,UAAW,4CACXC,UAAW,wCACXC,YAAa,4DACbC,MAAO,4CACPC,IAAK,kDACLC,IAAK,qDACLjC,MAAO,gCACPkC,IAAK,qCACLC,QAAS,wCACTC,QAAS,qCAEc,qBAAhBzB,EAAM0B,QACb1B,EAAM0B,MAAQ,IAElB1B,EAAM2B,KAAO,IAAI,OAAK,gBAAiB3B,EAAMS,gBAAiBT,EAAM4B,QAChE5B,EAAM4B,QACN5B,EAAM6B,aAEV,OAAaC,GAAG,uBAAwB9B,EAAM+B,kBAAmB/B,GACjEpM,EAA6B,kBAAZA,EAAuB,gBAAOA,EAAS2E,UAAY3E,EAE/C,MAAjBoM,EAAMpM,QASV,OARIoM,EAAMpM,QAAQU,aAAa,aAAc,IACzC0L,EAAMgC,cAAgB,gBAAUhC,EAAMO,YAAaP,EAAMpM,SACzDoM,EAAMiC,mBACNjC,EAAMkC,aAKHlC,EA6kBX,IAAImC,EA+HJ,OA3wBAtE,EAAUgC,EAAeC,GAiEzBqC,EAAkBtC,EASlBA,EAAcrB,UAAU4D,SAAW,SAAUC,EAAMX,GAC3CW,IAEIjN,KAAKsM,MAAMrD,eAAegE,GAC1B,eAAOjN,KAAKsM,MAAM,GAAKW,GAAOX,EAAO,IAGrCtM,KAAKsM,MAAM,GAAKW,GAAQX,IAYpC7B,EAAcrB,UAAU8D,YAAc,SAAUD,EAAMX,GAClD,GAAKW,GAASX,EAGT,GAAItM,KAAKsM,MAAM,GAAKW,KAAUX,SACxBtM,KAAKsM,MAAM,GAAKW,OAEtB,IAAK,eAAkBjN,KAAKsM,MAAM,GAAKW,IAASX,GAMjD,OALA,IAAK,IAAIjN,EAAI,EAAGA,EAAIiN,EAAMhN,OAAQD,WACvBW,KAAKsM,MAAM,GAAKW,GAAMX,EAAMvH,SAAS1F,EAAE4H,mBAPlDjH,KAAKsM,MAAQ,IAsBrB7B,EAAcrB,UAAU+D,SAAW,SAAUC,GACzC,IAAId,EAAQlK,OAAOC,KAAKrC,KAAKsM,OAC7B,GAAIc,GAAYd,EAAMhN,OAGlB,OAFAU,KAAKqN,cAAcD,IAEiB,IAA7Bd,EAAMgB,QAAQF,IAEP,IAF2BpN,KAAK+K,WAAWwC,QAAO,SAAUC,GACtE,OAAOA,EAAKP,OAASG,KACtB9N,OAGHU,KAAK+K,WAAa,GAClB,IAAK,IAAI7I,EAAK,EAAGuL,EAAUnB,EAAOpK,EAAKuL,EAAQnO,OAAQ4C,IAAM,CACzD,IAAIwL,EAASD,EAAQvL,GACrBlC,KAAKqN,cAAcK,GAEvB,OAAkC,IAA3B1N,KAAK+K,WAAWzL,QAS/BmL,EAAcrB,UAAUuE,MAAQ,WAC5B3N,KAAKxB,QAAQmP,QACb3N,KAAK4N,aASTnD,EAAcrB,UAAUyE,gBAAkB,SAAUZ,GAEhD,OADAjN,KAAKK,aAAgB,eAAD,CAAQ,UAAY4M,EAAO,KAAMjN,KAAKxB,SACnDwB,KAAKK,cAQhBoK,EAAcrB,UAAUtF,QAAU,WAC9B9D,KAAK2N,QACL3N,KAAK8N,eACL9N,KAAKsM,MAAQ,GAEb,IADA,IAAI7H,EAAW,gBAAU,IAAMzE,KAAK+N,WAAa,MAAQ/N,KAAKgO,WAAYhO,KAAKxB,SACtE0D,EAAK,EAAG+L,EAAaxJ,EAAUvC,EAAK+L,EAAW3O,OAAQ4C,IAAM,CAClE,IAAI1D,EAAUyP,EAAW/L,GACzB,eAAO1D,GAEXkM,EAAOtB,UAAUtF,QAAQ+G,KAAK7K,MAC9B,OAAakO,IAAI,uBAAwBlO,KAAK2M,oBASlDlC,EAAcrB,UAAU+E,kBAAoB,SAAUC,EAASC,GAC3D,IAAK,IAAInM,EAAK,EAAGC,EAAKC,OAAOC,KAAK+L,GAAUlM,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC9D,IAAII,EAAOH,EAAGD,GACd,OAAQI,GACJ,IAAK,SACDtC,KAAKyM,aACL,SAQhBhC,EAAcrB,UAAUqD,WAAa,WACjC,IAAK,IAAIvK,EAAK,EAAGC,EAAKC,OAAOC,KAAKrC,KAAKqL,iBAAkBnJ,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC3E,IAAIgE,EAAM/D,EAAGD,GACblC,KAAKuM,KAAK+B,UAAUtO,KAAKwM,QACzB,IAAIjM,EAAQP,KAAKuM,KAAKgC,YAAYrI,GAClClG,KAAKoL,cAAc,GAAKlF,GAAO3F,IAOvCkK,EAAcrB,UAAUoF,cAAgB,WACpC,MAAO,iBAOX/D,EAAcrB,UAAUuD,kBAAoB,SAAU7O,GAClDkC,KAAKwM,OAAS1O,EAAK0O,OACnBxM,KAAKyM,cAOThC,EAAcrB,UAAUqF,QAAU,WAC9BzO,KAAK8N,eACL9N,KAAK4M,cAAgB,gBAAU5M,KAAKmL,YAAanL,KAAKxB,SACtDwB,KAAK8M,cAETrC,EAAcrB,UAAUwE,UAAY,WAChC5N,KAAK+K,WAAa,GAClB/K,KAAK8K,UAAY,GAEjB,IADA,IAAIrG,EAAW,gBAAUzE,KAAKmL,YAAanL,KAAKxB,SACvC0D,EAAK,EAAGwM,EAAajK,EAAUvC,EAAKwM,EAAWpP,OAAQ4C,IAAM,CAClE,IAAI1D,EAAUkQ,EAAWxM,GACrBkE,EAAQ5H,EACZ4H,EAAM1E,gBAAgB,gBACtB0E,EAAMjH,UAAUiB,OAAOJ,KAAK+N,YACxB3H,EAAM6G,KAAK3N,OAAS,IACpBU,KAAK6N,gBAAgBzH,EAAM6G,MAC3BjN,KAAK2O,gBAAgBvI,EAAM6G,MAC3BjN,KAAK4O,YAAYxI,EAAM6G,OAE3B7G,EAAMjH,UAAUiB,OAAOJ,KAAKgO,cAGpCvD,EAAcrB,UAAUyD,iBAAmB,WAMvC,IALA,IAAIgC,EAAW,CAAC,WAAY,iBAAkB,QAAS,cAAe,YAAa,YAAa,UAAW,SACvG,UAAW,oBAAqB,OAAQ,kBAAmB,MAAO,MAAO,QAAS,UAAW,yBAC7F,yBAA0B,yBAA0B,qBAAsB,yBAA0B,sBACpG,sBAAuB,kBACvBC,EAAgB,CAAC,SAAU,QAAS,MAAO,OAAQ,SAAU,OACxD5M,EAAK,EAAGC,EAAMnC,KAAkB,cAAGkC,EAAKC,EAAG7C,OAAQ4C,IAAM,CAI9D,IAHA,IAAIkE,EAAQjE,EAAGD,GAEX6M,EAAU,GACLC,EAAK,EAAGC,EAAaJ,EAAUG,EAAKC,EAAW3P,OAAQ0P,IAAM,CAClE,IAAIE,EAAOD,EAAWD,GACtB,GAAiC,OAA7B5I,EAAMrE,aAAamN,GACnB,OAAQA,GACJ,IAAK,WACDlP,KAAKmP,QAAQ/I,EAAO2I,EAASG,EAAM9I,EAAM6E,UACzC,MACJ,IAAK,kBACDiE,EAAO9I,EAAMrE,aAAamN,GAC1BlP,KAAKmP,QAAQ/I,EAAO2I,EAASG,GAAM,GACnC,MACJ,IAAK,QAC0C,IAAvCJ,EAAcxB,QAAQlH,EAAMnE,OAC5BjC,KAAKmP,QAAQ/I,EAAO2I,EAAS3I,EAAMnE,MAAM,GAE7C,MACJ,IAAK,cACL,IAAK,QACDjC,KAAKmP,QAAQ/I,EAAO2I,EAASG,EAAME,KAAKC,MAAMjJ,EAAMrE,aAAamN,KACjE,MACJ,IAAK,UAEG,IAAI7N,EAAK+E,EAAMrE,aAAamN,GAC5BlP,KAAKmP,QAAQ/I,EAAO2I,EAASG,EAAM7N,GAEvC,MACJ,QAC2C,SAAnC+E,EAAMrE,aAAa,YACnB/B,KAAKsP,eAAelJ,EAAO2I,EAASG,EAAM9I,EAAMrE,aAAamN,IAG7DlP,KAAKmP,QAAQ/I,EAAO2I,EAASG,EAAM9I,EAAMrE,aAAamN,KAMtC,IAAhC9M,OAAOC,KAAK0M,GAASzP,QACrBU,KAAKgN,SAAS5G,EAAM6G,KAAM8B,KAItCtE,EAAcrB,UAAUkG,eAAiB,SAAUlJ,EAAOmJ,EAASC,EAAUjP,GACzE,IAAI+O,EAAiBE,EAAS7K,MAAM,KAChC8K,EAAY,CAAC,WAAY,aAAc,QAAS,YAAa,YAAa,QAAS,QAAS,WAC5FC,EAAgBJ,EAAeA,EAAehQ,OAAS,GACvDqQ,EAAiBL,EAAeA,EAAehQ,OAAS,GAC5D,IAA0C,IAAtCmQ,EAAUnC,QAAQoC,GAClB,OAAQA,GACJ,IAAK,WACD1P,KAAKmP,QAAQ/I,EAAOmJ,EAAS,WAAYhP,GACzC,MACJ,IAAK,aACDP,KAAKmP,QAAQ/I,EAAOmJ,EAAS,aAAchP,GAC3C,MACJ,IAAK,QACDP,KAAKmP,QAAQ/I,EAAOmJ,EAAS,MAAOhP,GACpC,WAGP,IAA2C,IAAvCkP,EAAUnC,QAAQqC,GACvB,OAAQA,GACJ,IAAK,YACD3P,KAAKmP,QAAQ/I,EAAOmJ,EAAS,YAAahP,GAC1C,MACJ,IAAK,YACDP,KAAKmP,QAAQ/I,EAAOmJ,EAAS,YAAahP,GAC1C,MACJ,IAAK,QAEG,IAAIqP,EAAWxJ,EAAMrE,aAAa,sBAC9B8N,EAAWzJ,EAAMrE,aAAa,sBAClC/B,KAAKmP,QAAQ/I,EAAOmJ,EAAS,QAAS,CAACK,EAAUC,IAErD,MACJ,IAAK,UAEG,IAAIxO,EAAK+E,EAAMrE,aAAayN,GAAU7K,MAAM,KAC5C3E,KAAKmP,QAAQ/I,EAAOmJ,EAAS,UAAWlO,EAAGA,EAAG/B,OAAS,IAE3D,MACJ,IAAK,QACDU,KAAKmP,QAAQ/I,EAAOmJ,EAAS,QAAShP,GACtC,QAIhBkK,EAAcrB,UAAU+F,QAAU,SAAU/I,EAAOmJ,EAASC,EAAUjP,GAClE,IAEIuP,EAFAC,EAAU3J,EAAMrE,aAAa,QAAUyN,EAAW,YAClDQ,EAAoB5J,EAAMrE,aAAa,YAAcyN,GAErDxP,KAAKsM,MAAMlG,EAAM6G,OAAsB,mBAAbuC,GAA8C,WAAbA,IAC3DxP,KAAK6N,gBAAgBzH,EAAM6G,MAC3B6C,EAAgB9P,KAAKiQ,gBAAgBjQ,KAAKsM,MAAMlG,EAAM6G,MAAM,GAAKuC,GAAWA,IAE5EO,EACAxP,EAAQ,CAACA,EAAOwP,GAEXC,EACLzP,EAAQ,CAACA,EAAOyP,GAEXF,IACLvP,EAAQ,CAACA,EAAOuP,IAEpBP,EAAQ,GAAKC,GAAYjP,GAG7BkK,EAAcrB,UAAU0D,WAAa,WACjC,IAAK,IAAI5K,EAAK,EAAGC,EAAMnC,KAAkB,cAAGkC,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC9D,IAAIkE,EAAQjE,EAAGD,GACX6K,EAAgBmD,YAAY9J,GAC5B,OAAanG,IAAImG,EAAO,QAASpG,KAAKmQ,aAAcnQ,MAE7B,WAAlBoG,EAAMpH,QACX,OAAaiB,IAAImG,EAAO,SAAUpG,KAAKoQ,cAAepQ,OAGtD,OAAaC,IAAImG,EAAO,WAAYpG,KAAKqQ,gBAAiBrQ,MAC1D,OAAaC,IAAImG,EAAO,QAASpG,KAAKsQ,aAActQ,OAG5D,OAAaC,IAAID,KAAKxB,QAAS,SAAUwB,KAAKuQ,cAAevQ,MAC7D,OAAaC,IAAID,KAAKxB,QAAS,QAASwB,KAAKwQ,aAAcxQ,OAG/DyK,EAAcrB,UAAU0E,aAAe,WACnC,IAAK,IAAI5L,EAAK,EAAGC,EAAMnC,KAAkB,cAAGkC,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC9D,IAAIkE,EAAQjE,EAAGD,GACf,OAAauO,YAAYrK,GAE7B,OAAahG,OAAOJ,KAAKxB,QAAS,SAAUwB,KAAKuQ,eACjD,OAAanQ,OAAOJ,KAAKxB,QAAS,QAASwB,KAAKwQ,eAGpD/F,EAAcrB,UAAUiH,gBAAkB,SAAUK,GAChD1Q,KAAK2Q,QAAQ,WAAYD,GAEzB,IAAIlS,EAAUkS,EAAElH,OACZxJ,KAAKsM,MAAM9N,EAAQyO,QACfjN,KAAKsM,MAAM9N,EAAQyO,MAAMjN,KAAKiL,WAAazM,EAAQ+B,MAAMjB,OAAS,EAClEU,KAAKmN,SAAS3O,EAAQyO,OAEyB,IAA1CjN,KAAK8K,UAAUwC,QAAQ9O,EAAQyO,OACpCjN,KAAK8K,UAAUvL,KAAKf,EAAQyO,QAKxCxC,EAAcrB,UAAUkH,aAAe,SAAUI,GAC7C1Q,KAAK2Q,QAAQ,QAASD,GACtB,IAAIlS,EAAUkS,EAAElH,OAEZoH,EAAc,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,MACpD,IAAZF,EAAEG,OAAiB7Q,KAAKsM,MAAM9N,EAAQyO,SAAUjN,KAAKsM,MAAM9N,EAAQyO,OAAUjN,KAAKsM,MAAM9N,EAAQyO,MAAMjN,KAAKiL,cAGjE,IAA1CjL,KAAK8K,UAAUwC,QAAQ9O,EAAQyO,OAAgBjN,KAAKsM,MAAM9N,EAAQyO,QAA2C,IAAlC2D,EAAYtD,QAAQoD,EAAEG,QACjG7Q,KAAKmN,SAAS3O,EAAQyO,OAI9BxC,EAAcrB,UAAU+G,aAAe,SAAUO,GAC7C1Q,KAAK2Q,QAAQ,QAASD,GACtB,IAAIlS,EAAUkS,EAAElH,OAEK,WAAjBhL,EAAQyD,KACRjC,KAAKmN,SAAS3O,EAAQyO,MAE0B,OAA3CzO,EAAQuD,aAAa,oBAE1B/B,KAAKgL,aAAc,IAI3BP,EAAcrB,UAAUgH,cAAgB,SAAUM,GAC9C1Q,KAAK2Q,QAAQ,SAAUD,GACvB,IAAIlS,EAAUkS,EAAElH,OAChBxJ,KAAKmN,SAAS3O,EAAQyO,OAG1BxC,EAAcrB,UAAUmH,cAAgB,SAAUG,GAC9C1Q,KAAK2Q,QAAQ,SAAUD,GAGlB1Q,KAAKgL,aAAgBhL,KAAKmN,WAI3BnN,KAAKgL,aAAc,EAHnB0F,EAAE9M,kBAOV6G,EAAcrB,UAAUoH,aAAe,WACnCxQ,KAAK4N,aAGTnD,EAAcrB,UAAUiE,cAAgB,SAAUJ,GAC9C,GAAKjN,KAAKsM,MAAM,GAAKW,GAArB,CAGA,IAAIX,EAAQlK,OAAOC,KAAKrC,KAAKsM,MAAM,GAAKW,IACpC6D,GAAa,EACbC,GAAqB,EACrBC,EAAQ1E,EAAMgB,QAAQ,kBACtB2D,EAAO3E,EAAMgB,QAAQ,UAQzB,GAPAtN,KAAK6N,gBAAgBZ,IACP,IAAVgE,IACAH,GAAa,IAEF,IAAXE,IACAD,GAAqB,IAEpBD,GAAeA,GAAcC,EAAlC,EACmB,IAAXC,GACA1E,EAAM4E,OAAOF,EAAO,IAEV,IAAVC,GACA3E,EAAM4E,OAAQD,EAAO,EAAI,GAE7BjR,KAAK2O,gBAAgB1B,GACrB,IAAK,IAAI/K,EAAK,EAAGiP,EAAU7E,EAAOpK,EAAKiP,EAAQ7R,OAAQ4C,IAAM,CACzD,IAAIgN,EAAOiC,EAAQjP,GACfkP,EAAepR,KAAKiQ,gBAAgBjQ,KAAKsM,MAAM,GAAKW,GAAM,GAAKiC,GAAOA,GACtEmC,EAAY,CAAEpE,KAAMA,EAAM8C,QAASqB,GACnCE,EAAY,CACZC,UAAWtE,EACXzO,QAASwB,KAAKK,aACd0P,QAASqB,GAEb,IAAKpR,KAAKwR,QAAQvE,EAAMiC,KAAUlP,KAAKK,aAAalB,UAAUC,SAASY,KAAKyR,QAAS,CACjFzR,KAAK0R,iBAAiBzE,GACtBjN,KAAK+K,WAAWxL,KAAK8R,GAErBrR,KAAKK,aAAanB,aAAa,eAAgB,QAC/Cc,KAAKK,aAAanB,aAAa,mBAAoBc,KAAKK,aAAagB,GAAK,SAC1ErB,KAAKK,aAAalB,UAAUc,IAAID,KAAK+N,YACrC/N,KAAKK,aAAalB,UAAUiB,OAAOJ,KAAKgO,YACnChO,KAAKkL,YAINlL,KAAK2R,YAAYN,GAHjBrR,KAAK4R,mBAAmB3E,EAAMoE,EAAUtB,QAAS/P,KAAKK,cAK1DiR,EAAUO,aAAe7R,KAAKkL,YAC9BoG,EAAUQ,OAAS,UACnB9R,KAAKK,aAAalB,UAAUc,IAAID,KAAK+N,YACrC/N,KAAKK,aAAalB,UAAUiB,OAAOJ,KAAKgO,YACxChO,KAAK+R,yBAAyB9E,EAAMqE,GACpCtR,KAAK2Q,QAAQ,qBAAsBW,GAEtB,aAATpC,GACAlP,KAAKK,aAAanB,aAAa,gBAAiB,QAEpD,MAGAc,KAAK4O,YAAY3B,GACjBqE,EAAUQ,OAAS,UACnB9R,KAAK2Q,QAAQ,qBAAsBW,OASnD7G,EAAcrB,UAAU2I,yBAA2B,SAAU9E,EAAM+E,GAC1DhS,KAAKsM,MAAM,GAAKW,GAAMjN,KAAKiL,WAAcjL,KAAKK,aAAaE,MAAMjB,QAAW,eAAkBU,KAAKkL,eACpGlL,KAAKkL,YAAY7G,UAAYrE,KAAKK,aAAaE,MAC/CP,KAAKkL,YAAYhM,aAAa,eAAgB,SAC9C8S,EAAMF,OAAS,GACf9R,KAAK4O,YAAY3B,KAIzBxC,EAAcrB,UAAUoI,QAAU,SAAUvE,EAAMiC,GAC9C,IAAI+C,EAASjS,KAAKsM,MAAM,GAAKW,GAAM,GAAKiC,GACpCgD,EAASD,aAAkBlJ,OAA8B,kBAAdkJ,EAAO,GAAmBA,EAAO,GAAKA,EACjFE,EAAcnS,KAAKsM,MAAM,GAAKW,GAAM,GAAKiC,GACzCpR,EAAO,CAAEyC,MAAOP,KAAKK,aAAaE,MAAO2R,MAAOA,EAAO1T,QAASwB,KAAKK,aAAc+R,YAAapS,KAAKxB,SAEzG,GADAwB,KAAK2Q,QAAQ,kBAAmB7S,IAC3BA,EAAKoU,OAAkB,aAAThD,EACf,OAAO,EAEX,GAAIiD,GAAyC,oBAAnBA,EAAY,GAAmB,CACrD,IAAIE,EAAKF,EAAY,GACrB,OAAOE,EAAGxH,KAAK7K,KAAM,CAAExB,QAASwB,KAAKK,aAAcE,MAAOP,KAAKK,aAAaE,QAE3E,OAAIwM,EAAgBmD,YAAYlQ,KAAKK,cACzB,aAAT6O,GAGG,gBAAU,eAAiBjC,EAAO,aAAcjN,KAAKxB,SAASc,OAAS,EAGvEyN,EAAgBuF,eAAe,GAAKpD,GAAMpR,IAIzD2M,EAAcrB,UAAU6G,gBAAkB,SAAUsC,EAAWrD,GAC3D,IAAIa,EAAU/P,KAAKK,aAAa0B,aAAa,QAAUmN,EAAO,YAC1DlP,KAAKK,aAAa0B,aAAa,QAAUmN,EAAO,YAC/CqD,aAAqBxJ,OAAiC,kBAAjBwJ,EAAU,GAAmBA,EAAU,GAC7B,IAA3CnQ,OAAOC,KAAKrC,KAAKoL,eAAe9L,OAAgBU,KAAKoL,cAAc,GAAK8D,GAAQlP,KAAKqL,gBAAgB,GAAK6D,GAC/GsD,EAAUzC,EAAQ1K,MAAM,WAC5B,IAAK,eAAkBmN,GACnB,IAAK,IAAInT,EAAI,EAAGA,EAAImT,EAAQlT,OAAQD,IAAK,CACrC,IAAIkB,EAAQgS,aAAqBxJ,MAAQwJ,EAAUxN,SAAS1F,EAAE4H,aAAesL,EAC7ExC,EAAUA,EAAQzO,QAAQkR,EAAQzN,SAAS1F,EAAE4H,aAAc1G,GAGnE,OAAOwP,GAGXtF,EAAcrB,UAAUwI,mBAAqB,SAAU3E,EAAM8C,EAAS3J,GAClE,IAAIyL,EAAe,eAAc7R,KAAK6R,aAAc,CAChD1Q,UAAWnB,KAAK+N,WAChB1J,UAAW0L,EACX9J,MAAO,CAAEwM,IAAKxF,KAUlB,GAPIjN,KAAK0S,cAAgBlK,EAAYmK,UACjCd,EAAa1S,UAAUiB,OAAOJ,KAAK+N,YACnC8D,EAAa1S,UAAUc,IAAI,aAC3B4R,EAAe,eAAc7R,KAAK4S,eAAgB,CAAEzR,UAAWnB,KAAK+N,WAAY1J,UAAWwN,EAAagB,aAE5GhB,EAAaxQ,GAAKrB,KAAKK,aAAa4M,KAAO,QAEvCjN,KAAKxB,QAAQoD,cAAc,qBAAuBwE,EAAM/E,GAAK,MAC7DrB,KAAKxB,QAAQoD,cAAc,qBAAuBwE,EAAM/E,GAAK,MAAM1C,YAAYkT,QAE9E,IAAmD,IAA/CzL,EAAM0M,aAAa,wBAAkC,CAE1D,IAAIC,EAAc3M,EAAMrE,aAAa,wBACjCiR,EAAa,gBAAO,IAAMD,EAAa/S,KAAKxB,SAChDwU,EAAWrU,YAAYkT,QAEM,MAAxB7R,KAAKiT,gBAEVjT,KAAKiT,gBAAgBpI,KAAK7K,KAAMA,KAAKK,aAAcwR,GAGnD7R,KAAKK,aAAa5B,WAAWC,aAAamT,EAAc7R,KAAKK,aAAa6S,aAE9ErB,EAAazM,MAAM+N,QAAU,QAC7BnT,KAAK2O,gBAAgB1B,GACrBjN,KAAK8K,UAAUvL,KAAK0N,GACpBjN,KAAKoT,cAAcnG,IAGvBxC,EAAcrB,UAAUuF,gBAAkB,SAAU1B,GAKhD,OAJAjN,KAAKkL,YAAc,gBAAOlL,KAAK6R,aAAe,IAAM7R,KAAK+N,WAAY/N,KAAKK,aAAaG,eAClFR,KAAKkL,cACNlL,KAAKkL,YAAc,gBAAOlL,KAAK6R,aAAe,IAAM7R,KAAK+N,WAAa,SAAWd,EAAO,KAAMjN,KAAKxB,UAEhGwB,KAAKkL,aAGhBT,EAAcrB,UAAUsI,iBAAmB,SAAUzE,GACjD,IAAK,IAAI5N,EAAI,EAAGA,EAAIW,KAAK+K,WAAWzL,OAAQD,IAAK,CAC7C,IAAI6P,EAAOlP,KAAK+K,WAAWhG,SAAS1F,EAAE4H,aAClCiI,EAAKjC,OAASA,GACdjN,KAAK+K,WAAWmG,OAAO7R,EAAG,KAKtCoL,EAAcrB,UAAUuI,YAAc,SAAUN,GAC5CrR,KAAKkL,YAAY9F,MAAM+N,QAAU,QACjCnT,KAAKkL,YAAY7G,UAAYgN,EAAUtB,QACvC/P,KAAKoT,cAAc/B,EAAUpE,OAGjCxC,EAAcrB,UAAUwF,YAAc,SAAU3B,GACxCjN,KAAKkL,cACLlL,KAAKkL,YAAY9F,MAAM+N,QAAU,OACjCnT,KAAK0R,iBAAiBzE,GACtBjN,KAAKK,aAAalB,UAAUc,IAAID,KAAKgO,YACrChO,KAAKK,aAAalB,UAAUiB,OAAOJ,KAAK+N,YACxC/N,KAAKK,aAAanB,aAAa,eAAgB,WAIvDuL,EAAcrB,UAAUgK,cAAgB,SAAUnG,GACzCjN,KAAKsM,MAAM,GAAKW,GAAMjN,KAAKiL,WAAcjL,KAAKK,aAAaE,MAAMjB,QAAW,eAAkBU,KAAKkL,eACpGlL,KAAKkL,YAAY7G,UAAYrE,KAAKK,aAAaE,MAC/CP,KAAKkL,YAAYhM,aAAa,eAAgB,SAC9Cc,KAAK4O,YAAY3B,KAIzBxC,EAAcyF,YAAc,SAAU9J,GAClC,IAAIiN,EAAYjN,EAAMrE,aAAa,QACnC,OAAOsR,IAA4B,aAAdA,GAA0C,UAAdA,GAAuC,WAAdA,IAI9E5I,EAAc6H,eAAiB,CAC3BrH,SAAU,SAAUqI,GAChB,OAAQC,MAAMC,KAAKnE,MAAMiE,EAAO/S,QAAqD+S,EAAO/S,MAAM0G,WAAW3H,OAAS,GAA3EiU,MAAM,IAAIC,KAAKF,EAAO/S,OAAOkT,YAE5EnI,MAAO,SAAUgI,GACb,OAAOrJ,EAAMC,MAAMwJ,KAAKJ,EAAO/S,QAEnCgL,IAAK,SAAU+H,GACX,OAAOrJ,EAAMG,IAAIsJ,KAAKJ,EAAO/S,QAEjCkL,QAAS,SAAU6H,GACf,OAAOrJ,EAAMI,SAASqJ,KAAKJ,EAAO/S,QAEtC4L,IAAK,SAAUmH,GACX,OAAOrJ,EAAMM,MAAMmJ,KAAKJ,EAAO/S,QAEnCmL,WAAY,SAAU4H,GAClB,OAAOrJ,EAAMO,WAAWkJ,KAAKJ,EAAO/S,QAExCoL,OAAQ,SAAU2H,GACd,OAAQC,MAAMI,OAAOL,EAAO/S,UAA0C,IAA/B+S,EAAO/S,MAAM+M,QAAQ,MAEhE1B,OAAQ,SAAU0H,GACd,OAAOrJ,EAAMK,OAAOoJ,KAAKJ,EAAO/S,QAEpCsL,UAAW,SAAUyH,GACjB,OAAOA,EAAO/S,MAAMjB,QAAUgU,EAAOpB,OAEzCpG,UAAW,SAAUwH,GACjB,OAAOA,EAAO/S,MAAMjB,QAAUgU,EAAOpB,OAEzCnG,YAAa,SAAUuH,GACnB,IAAIpB,EAAQoB,EAAOpB,MACnB,OAAOoB,EAAO/S,MAAMjB,QAAU4S,EAAM,IAAMoB,EAAO/S,MAAMjB,QAAU4S,EAAM,IAE3ElG,MAAO,SAAUsH,GACb,IAAIpB,EAAQoB,EAAOpB,MACnB,OAAQqB,MAAMI,OAAOL,EAAO/S,SAAWoT,OAAOL,EAAO/S,QAAU2R,EAAM,IAAMyB,OAAOL,EAAO/S,QAAU2R,EAAM,IAE7G1G,KAAM,SAAU8H,GACZ,OAAQC,MAAM,IAAIC,KAAKF,EAAO/S,OAAOkT,YAEzCxH,IAAK,SAAUqH,GACX,OAAKC,MAAMI,OAAOL,EAAO/S,QAKlB,IAAIiT,KAAKF,EAAO/S,OAAOkT,WAAa,IAAID,KAAKpE,KAAKC,MAAMD,KAAKwE,UAAUN,EAAOpB,SAASuB,WAHlFH,EAAO/S,OAAS+S,EAAOpB,OAKvChG,IAAK,SAAUoH,GACX,GAAKC,MAAMI,OAAOL,EAAO/S,QAIpB,KAAqC,IAAhC+S,EAAY,MAAEhG,QAAQ,KAAa,CACzC,IAAIuG,EAAQP,EAAY,MAAEhS,QAAQ,KAAM,IACxC,OAAOwS,WAAWD,IAASP,EAAOpB,MAIlC,OAAO,IAAIsB,KAAKF,EAAO/S,OAAOkT,WAAa,IAAID,KAAKpE,KAAKC,MAAMD,KAAKwE,UAAUN,EAAOpB,SAASuB,UAR9F,OAAQH,EAAO/S,OAAS+S,EAAOpB,OAWvCjI,MAAO,SAAUqJ,GAEb,OAAO,IAAInJ,OAAOmJ,EAAOpB,OAAOwB,KAAKJ,EAAO/S,QAEhD8L,QAAS,SAAUiH,GACf,IAAIS,EAAYT,EAAOlB,YAAYxQ,cAAc,IAAM0R,EAAOpB,OAE9D,OADAoB,EAAOpB,MAAQ6B,EAAUxT,MAClB+S,EAAOpB,QAAUoB,EAAO/S,QAGvC+I,EAAW,CACP,eAAS,KACVmB,EAAcrB,UAAW,cAAU,GACtCE,EAAW,CACP,eAAS,aACVmB,EAAcrB,UAAW,cAAU,GACtCE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,aAAS,GACrCE,EAAW,CACP,eAAS,YACVmB,EAAcrB,UAAW,kBAAc,GAC1CE,EAAW,CACP,eAAS,YACVmB,EAAcrB,UAAW,kBAAc,GAC1CE,EAAW,CACP,eAAS,UACVmB,EAAcrB,UAAW,oBAAgB,GAC5CE,EAAW,CACP,eAAS,QACVmB,EAAcrB,UAAW,sBAAkB,GAC9CE,EAAW,CACP,eAASd,EAAYwL,QACtBvJ,EAAcrB,UAAW,mBAAe,GAC3CE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,gBAAY,GACxCE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,aAAS,GACrCE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,aAAS,GACrCE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,cAAU,GACtCE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,cAAU,GACtCE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,uBAAmB,GAC/CE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,0BAAsB,GAClDE,EAAW,CACP,kBACDmB,EAAcrB,UAAW,uBAAmB,GAC/CqB,EAAgBsC,EAAkBzD,EAAW,CACzC,QACDmB,GACIA,EA5wBuB,CA6wBhC,S,kCCn1BF,8DAAIhC,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBtG,OAAOyG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,KAClEN,EAAcC,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASM,IAAOlJ,KAAKmJ,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAES,UAAkB,OAANR,EAAaxG,OAAOiH,OAAOT,IAAMM,EAAGE,UAAYR,EAAEQ,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQtD,EAAKuD,GAC7E,IAA2Hd,EAAvHe,EAAIC,UAAUrK,OAAQsK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOrH,OAAOyH,yBAAyBL,EAAQtD,GAAOuD,EACrH,GAAuB,kBAAZK,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQtD,EAAKuD,QACpH,IAAK,IAAIpK,EAAIkK,EAAWjK,OAAS,EAAGD,GAAK,EAAGA,KAASsJ,EAAIY,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEa,EAAQtD,EAAK0D,GAAKjB,EAAEa,EAAQtD,KAAS0D,GAChJ,OAAOF,EAAI,GAAKE,GAAKxH,OAAO4H,eAAeR,EAAQtD,EAAK0D,GAAIA,GAQ5DqK,EAAO,8BACPC,EAAW,qBACXC,EAAS,YACTC,EAAW,cACXC,EAAQ,UACRC,EAAY,YACZC,EAAY,YACZC,EAAY,IAAIrK,OAAO,gBACvBsK,EAAmB,IACnBC,EAAY,mBACZC,EAAU,YACVC,EAAgB,gBAChBC,EAAgB,mBAChBC,EAAoB,CAAC,QAAS,QAAS,SACvCC,EAAmB,EAanBC,EAAgC,SAAUtK,GAQ1C,SAASsK,EAAerK,EAASnM,GAC7B,IAAIoM,EAAQF,EAAOG,KAAK7K,KAAM2K,EAASnM,IAAYwB,KAMnD,OALA4K,EAAMqK,OAAQ,EACdrK,EAAMsK,eAAgB,EACtBtK,EAAMuK,WAAY,EAClBvK,EAAMwK,iBAAkB,EACxBxK,EAAMyK,eAAiB1K,EAChBC,EA4yCX,OA1zCAnC,EAAUuM,EAAgBtK,GAgB1BsK,EAAe5L,UAAUkM,UAAY,WACjCtV,KAAKuV,eAAgB,EACrBvV,KAAKwV,iBAAmB,IAExBxV,KAAKyV,UAAY,IAAItL,OAAO,gBAC5BnK,KAAK0V,UAAW,EAChB,IAAIC,EAAa,eAAS,gBAAiB3V,KAAKxB,SAKhD,GAJAwB,KAAK4V,aAAe5V,KAAKxB,QAAQqX,WAAU,GAC3C,gBAAY,CAAC7V,KAAK4V,cAAe,CAACjB,EAASD,EAAW,UACtD1U,KAAK8V,eAAiB,KACtB9V,KAAK+V,QAAU,eAAQ/V,KAAKxB,QAAS,QACR,uBAAzBwB,KAAKxB,QAAQQ,QAAkC,CAC/CgB,KAAK8V,eAAiB9V,KAAKxB,QAAQQ,QACnC,IAAIoH,EAAQpG,KAAKoE,cAAc,SAC3BgD,EAAQ,EACZ,IAAKA,EAAOA,EAAQpH,KAAKxB,QAAQwX,WAAW1W,OAAQ8H,IAAS,CACzD,IAAI6O,EAAgBjW,KAAKxB,QAAQwX,WAAW5O,GAAO8O,SAC7B,OAAlBD,GAA4C,UAAlBA,GAC1B7P,EAAMlH,aAAac,KAAKxB,QAAQwX,WAAW5O,GAAO8O,SAAUlW,KAAKxB,QAAQwX,WAAW5O,GAAO+O,WAC3F/P,EAAM/B,UAAYrE,KAAKxB,QAAQ6F,WAER,UAAlB4R,GACL7P,EAAMlH,aAAa+W,EAAejW,KAAKxB,QAAQ2C,UAAUwD,MAAM,KAAK4I,QAAO,SAAU6I,GAAQ,OAA+B,IAAxBA,EAAK9I,QAAQ,UAAiB+I,KAAK,MAG3IrW,KAAKxB,QAAQsU,aAAa,SAC1B9S,KAAKxB,QAAQkD,gBAAgB,QAEjC1B,KAAKxB,QAAQW,UAAUiB,OAAO,YAAa,oBAC3CJ,KAAKxB,QAAQG,YAAYyH,GACzBpG,KAAKxB,QAAU4H,EACf,gBAAS,gBAAiBuP,EAAY3V,KAAKxB,SAE/C,eAAWwB,KAAKxB,QAAS,CAAE,KAAQ,aAAc,SAAY,IAAK,aAAgB,QAClF,IAAI8X,EAAa,CACbC,eAAgB,kBAAmBC,eAAgB,kBAAmBjV,YAAavB,KAAKuB,aAE5FvB,KAAKuM,KAAO,IAAI,OAAK,iBAAkB+J,EAAYtW,KAAKwM,QACX,KAAzCxM,KAAKuM,KAAKgC,YAAY,gBACtBvO,KAAKyW,cAAc,CAAElV,YAAavB,KAAKuB,aAAevB,KAAKuM,KAAKgC,YAAY,iBAAkB,GAE7FvO,KAAKxB,QAAQsU,aAAa,OAC3B9S,KAAKxB,QAAQU,aAAa,KAAM,eAAY,mBAEhDc,KAAK0W,cAAe,EACpB1W,KAAK2W,WAAa,KAClB3W,KAAKuR,UAAY,KACjBvR,KAAK4W,YAAc,GACnB5W,KAAK6W,kBACL7W,KAAK8W,kBACL9W,KAAK+W,UAAY/W,KAAKO,MACtBP,KAAKgX,0BACLhX,KAAKiX,iBAAgB,GACjBjX,KAAK+V,UACL/V,KAAKkX,cAAgBlX,KAAKO,OAE9BP,KAAKmX,iBACLnX,KAAKoX,eACoB,OAArBpX,KAAKuB,aACLvB,KAAKqX,qBASbrC,EAAe5L,UAAUkO,OAAS,WACa,UAAvCtX,KAAKxB,QAAQQ,QAAQgJ,gBACrBhI,KAAKuX,gBACDvX,KAAKwX,gBACLxX,KAAKyX,kBAETzX,KAAK0X,gBAAgB1X,KAAKmF,OACrBnF,KAAK9B,UAAUiB,UAAUC,SAAS,kBACnCY,KAAK9B,UAAUiB,UAAUc,IAAI,iBAEjCD,KAAK2X,YAA2B,OAAf3X,KAAKO,OAAkBgT,MAAMvT,KAAKO,OAC/C,KAAOP,KAAK4X,WAAa5X,KAAK6X,UAAU7X,KAAKO,OAASP,KAAKO,OAC/DP,KAAK8M,aACc,OAAf9M,KAAKO,OAAmBgT,MAAMvT,KAAKO,QAC/BP,KAAK8X,UACL9X,KAAKyW,cAAc,CAAElW,MAAOP,KAAK+X,YAAY/X,KAAKO,MAAOP,KAAK8X,YAAa,IAG/E9X,KAAKxB,QAAQuD,aAAa,UAAY/B,KAAKO,SAC3CP,KAAKxB,QAAQU,aAAa,QAASc,KAAKxB,QAAQ+B,OAChDP,KAAKsE,YAAYpF,aAAa,QAASc,KAAKsE,YAAY/D,QAE5DP,KAAKgY,iBAAmBhY,KAAKxB,QAAQ+B,MACjCP,KAAKxB,QAAQsU,aAAa,aAC1B9S,KAAKxB,QAAQU,aAAa,WAAY,UAErC,eAAkB,eAAQc,KAAKxB,QAAS,cAAgB,eAAQwB,KAAKxB,QAAS,YAAYyZ,WAC3FjY,KAAK0C,SAAU,GAEnB1C,KAAKkY,mBAGblD,EAAe5L,UAAU6N,gBAAkB,SAAUkB,GAGjD,IAFA,IAAInC,EAAamC,EAAY,eAAkBnY,KAAKoY,gBAAkB,GAAKhW,OAAOC,KAAKrC,KAAKoY,gBACxF,CAAC,QAAS,MAAO,MAAO,OAAQ,WAAY,WAAY,QAAS,OAAQ,eACpElW,EAAK,EAAGmW,EAAerC,EAAY9T,EAAKmW,EAAa/Y,OAAQ4C,IAAM,CACxE,IAAII,EAAO+V,EAAanW,GACxB,IAAK,eAAkBlC,KAAKxB,QAAQuD,aAAaO,IAC7C,OAAQA,GACJ,IAAK,WACD,GAAK,eAAkBtC,KAAKqV,sBAAuD3R,IAAnC1D,KAAKqV,eAAe,YAA8B8C,EAAW,CACzG,IAAIzV,EAA8C,aAApC1C,KAAKxB,QAAQuD,aAAaO,IAA4D,KAApCtC,KAAKxB,QAAQuD,aAAaO,IAC/C,SAApCtC,KAAKxB,QAAQuD,aAAaO,GACjCtC,KAAKyW,cAAc,CAAE/T,QAASA,IAAYyV,GAE9C,MACJ,IAAK,WACD,GAAK,eAAkBnY,KAAKqV,sBAAwD3R,IAApC1D,KAAKqV,eAAe,aAA+B8C,EAAW,CAC1G,IAAIpV,EAA+C,aAApC/C,KAAKxB,QAAQuD,aAAaO,IAA4D,KAApCtC,KAAKxB,QAAQuD,aAAaO,IAChD,SAApCtC,KAAKxB,QAAQuD,aAAaO,GACjCtC,KAAKyW,cAAc,CAAE1T,SAAUA,IAAaoV,GAEhD,MACJ,IAAK,eACI,eAAkBnY,KAAKqV,sBAA2D3R,IAAvC1D,KAAKqV,eAAe,gBAAkC8C,IAClGnY,KAAKyW,cAAc,CAAElV,YAAavB,KAAKxB,QAAQ+C,cAAgB4W,GAEnE,MACJ,IAAK,QACD,GAAK,eAAkBnY,KAAKqV,sBAAqD3R,IAAjC1D,KAAKqV,eAAe,UAA4B8C,EAAW,CACvG,IAAIG,EAAYtY,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQuD,aAAaO,IACzFtC,KAAKyW,cAAc,gBAASnU,EAAMgW,EAAW,KAAMH,GAEvD,MACJ,IAAK,MACD,GAAK,eAAkBnY,KAAKqV,sBAAmD3R,IAA/B1D,KAAKqV,eAAe,QAA0B8C,EAAW,CACrG,IAAIO,EAAW1Y,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQuD,aAAaO,IACvE,OAAboW,GAAsBnF,MAAMmF,IAC5B1Y,KAAKyW,cAAc,gBAASnU,EAAMoW,EAAU,KAAMP,GAG1D,MACJ,IAAK,MACD,GAAK,eAAkBnY,KAAKqV,sBAAmD3R,IAA/B1D,KAAKqV,eAAe,QAA0B8C,EAAW,CACrG,IAAIQ,EAAW3Y,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQuD,aAAaO,IACvE,OAAbqW,GAAsBpF,MAAMoF,IAC5B3Y,KAAKyW,cAAc,gBAASnU,EAAMqW,EAAU,KAAMR,GAG1D,MACJ,IAAK,OACD,GAAK,eAAkBnY,KAAKqV,sBAAoD3R,IAAhC1D,KAAKqV,eAAe,SAA2B8C,EAAW,CACtG,IAAIS,EAAY5Y,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQuD,aAAaO,IACvE,OAAdsW,GAAuBrF,MAAMqF,IAC7B5Y,KAAKyW,cAAc,gBAASnU,EAAMsW,EAAW,KAAMT,GAG3D,MACJ,IAAK,QACDnY,KAAK2W,WAAa3W,KAAKxB,QAAQuD,aAAaO,GAC5C,MACJ,IAAK,OACDtC,KAAKuR,UAAYvR,KAAKxB,QAAQuD,aAAaO,GAC3C,MACJ,QAEQ,IAAI/B,EAAQP,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQuD,aAAaO,KACtE,OAAV/B,IAAmBgT,MAAMhT,IAAqB,UAAT+B,IACtCtC,KAAKyW,cAAc,gBAASnU,EAAM/B,EAAO,KAAK,GAGtD,SAKpByU,EAAe5L,UAAUiO,kBAAoB,WACzCrX,KAAKyW,cAAc,CAAElV,YAAavB,KAAKuM,KAAKgC,YAAY,iBAAkB,IAE9EyG,EAAe5L,UAAU0N,gBAAkB,WACvC9W,KAAKuY,SAAW,IAAI,OAAqBvY,KAAKwM,SAElDwI,EAAe5L,UAAUyN,gBAAkB,WACvC7W,KAAK4W,YAAY6B,OAASzY,KAAKyY,OACI,OAA/B,eAAS,WAAYzY,QACrB,gBAAS,WAAYA,KAAK6Y,SAAU7Y,KAAK4W,aACzC5W,KAAKyW,cAAc,CAAEqC,aAAc9Y,KAAK6Y,WAAY,KAI5D7D,EAAe5L,UAAUmO,cAAgB,WACrC,IAAIwB,EAAuB/Y,KAAKwC,SAC3B,eAAkBxC,KAAKwC,WAA+B,KAAlBxC,KAAKwC,WAC1CuW,EAAuB/Y,KAAKgZ,yBAAyBhZ,KAAKwC,WAE9D,IAAIgE,EAAW,OAAM3I,YAAY,CAC7BW,QAASwB,KAAKxB,QACdH,eAAgB2B,KAAK3B,eACrBS,WAAY,CACRiE,SAAU/C,KAAK+C,SACfxB,YAAavB,KAAKuB,YAClBiB,SAAUuW,EACVnW,UAAW5C,KAAK4C,UAChB7D,gBAAiBiB,KAAKjB,gBACtB2D,QAAS1C,KAAK0C,UAEnB1C,KAAKoE,eACRpE,KAAKiZ,aAAezS,EACpBxG,KAAK9B,UAAYsI,EAAStI,UAC1B8B,KAAK9B,UAAUgB,aAAa,QAAS+U,EAAO,IAAMjU,KAAK9B,UAAU6D,aAAa,UAC9E/B,KAAKkZ,0BACDlZ,KAAK+C,UACL,eAAW/C,KAAKxB,QAAS,CAAE,gBAAiB,SAEhDwB,KAAKsE,YAAetE,KAAKoE,cAAc,QAAS,CAAE6B,MAAO,CAAEhE,KAAM,OACzD,eAAkB,OAAQ,MAAS4S,KAC3C7U,KAAKuR,UAA+B,OAAnBvR,KAAKuR,UAAqBvR,KAAKuR,UAAYvR,KAAKxB,QAAQ6C,GACzErB,KAAKxB,QAAQkD,gBAAgB,QACzB1B,KAAKmV,WAAqC,uBAAxBnV,KAAK8V,gBAA2C9V,KAAK4V,aAAavU,GAAG/B,OAAS,EAChG,eAAWU,KAAKsE,YAAa,CAAE,KAAQtE,KAAK4V,aAAavU,KAGzD,eAAWrB,KAAKsE,YAAa,CAAE,KAAQtE,KAAKuR,YAEhDvR,KAAK9B,UAAUQ,aAAasB,KAAKsE,YAAatE,KAAK9B,UAAUib,WAAW,IACxEnZ,KAAKoZ,qBAAoB,GACD,OAApBpZ,KAAK2W,YACL,eAAW3W,KAAK9B,UAAW,CAAE,MAAS8B,KAAK2W,cAGnD3B,EAAe5L,UAAUgQ,oBAAsB,SAAUjB,GACrD,IAAIkB,EAAO,GACX,GAAKlB,EAMDkB,EAAOrZ,KAAKoY,oBALZ,IAAK,IAAIkB,EAAI,EAAGA,EAAItZ,KAAKxB,QAAQwX,WAAW1W,OAAQga,IAChDD,EAAKrZ,KAAKxB,QAAQwX,WAAWsD,GAAGrM,MAAQjN,KAAKxB,QAAQuD,aAAa/B,KAAKxB,QAAQwX,WAAWsD,GAAGrM,MAMrG,IAAK,IAAI/K,EAAK,EAAGC,EAAKC,OAAOC,KAAKgX,GAAOnX,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC3D,IAAIgE,EAAM/D,EAAGD,GACe,IAAxBgE,EAAIoH,QAAQ,SACZtN,KAAKsE,YAAYpF,aAAagH,EAAKmT,EAAK,GAAKnT,MAIzD8O,EAAe5L,UAAU4N,wBAA0B,WAC/C,IAAK,eAAkBhX,KAAKoY,gBACxB,IAAK,IAAIlW,EAAK,EAAGC,EAAKC,OAAOC,KAAKrC,KAAKoY,gBAAiBlW,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC1E,IAAIqX,EAAMpX,EAAGD,GACT4S,EAAkBxH,QAAQiM,GAAO,GACjCvZ,KAAKxB,QAAQU,aAAaqa,EAAKvZ,KAAKoY,eAAe,GAAKmB,MAKxEvE,EAAe5L,UAAUoQ,eAAiB,SAAUC,EAAU/U,GAC1D,OAAMnC,YAAYvC,KAAKgZ,yBAAyBS,GAAW,CAACzZ,KAAK9B,WAAY8B,KAAKgZ,yBAAyBtU,KAE/GsQ,EAAe5L,UAAU4P,yBAA2B,SAAUU,GAC1D,IAAIxV,EAASwV,EAIb,OAHK,eAAkBA,IAA0C,KAArBA,IACxCxV,EAAUwV,EAAiBpY,QAAQ,OAAQ,KAAMqY,QAE9CzV,GAEX8Q,EAAe5L,UAAU8P,wBAA0B,WAC/C,IAAK,eAAkBlZ,KAAKoY,gBACxB,IAAK,IAAIlW,EAAK,EAAGC,EAAKC,OAAOC,KAAKrC,KAAKoY,gBAAiBlW,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC1E,IAAIqX,EAAMpX,EAAGD,GACb,GAAI4S,EAAkBxH,QAAQiM,IAAQ,EAClC,GAAY,UAARA,EAAiB,CACjB,IAAIK,EAAoB5Z,KAAKgZ,yBAAyBhZ,KAAKoY,eAAe,GAAKmB,IACrD,KAAtBK,GACA,eAAS,CAAC5Z,KAAK9B,WAAY0b,EAAkBjV,MAAM,WAGtD,GAAY,UAAR4U,EAAiB,CACtB,IAAIM,EAAe7Z,KAAK9B,UAAU6D,aAAawX,GAC/CM,EAAgB,eAAkBA,GAC9B7Z,KAAKoY,eAAe,GAAKmB,GADsBM,EAAe7Z,KAAKoY,eAAe,GAAKmB,GAE3FvZ,KAAK9B,UAAUgB,aAAaqa,EAAKM,QAGjC7Z,KAAK9B,UAAUgB,aAAaqa,EAAKvZ,KAAKoY,eAAe,GAAKmB,MAM9EvE,EAAe5L,UAAUsO,gBAAkB,SAAUvS,GAC5C,eAAkBA,KACE,kBAAVA,EACPnF,KAAK9B,UAAUkH,MAAMD,MAAQ,eAAWA,GAElB,kBAAVA,IACZnF,KAAK9B,UAAUkH,MAAMD,MAASA,EAAME,MAAM,WAAc,EAAW,cAAD,CAAYF,MAK1F6P,EAAe5L,UAAUqO,gBAAkB,WACvCzX,KAAK8Z,SAAW,OAAMta,WAAW0U,EAAW,IAAME,EAAUpU,KAAK9B,UAAW8B,KAAKoE,eACjF,eAAWpE,KAAK8Z,SAAU,CACtB,MAAS9Z,KAAKuM,KAAKgC,YAAY,oBAEnCvO,KAAK+Z,OAAS,OAAMva,WAAW0U,EAAW,IAAMC,EAAQnU,KAAK9B,UAAW8B,KAAKoE,eAC7E,eAAWpE,KAAK+Z,OAAQ,CACpB,MAAS/Z,KAAKuM,KAAKgC,YAAY,oBAEnCvO,KAAKga,qBAEThF,EAAe5L,UAAU+N,eAAiB,YACV,kBAAdnX,KAAQ,KAAmBuT,MAAMvT,KAAKkM,OAChDlM,KAAKyW,cAAc,CAAEvK,KAAOyH,OAAgB,YAAK,IAEzB,kBAAd3T,KAAQ,KAAmBuT,MAAMvT,KAAKiM,OAChDjM,KAAKyW,cAAc,CAAExK,IAAK0H,OAAOsG,YAAa,GAE5B,OAAlBja,KAAK8X,WACD9X,KAAKkM,OAAUyH,OAAgB,WAC/B3T,KAAKyW,cAAc,CAAEvK,IAAKlM,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKka,eAAela,KAAK8X,SAAU9X,KAAKkM,QAAS,GAE1HlM,KAAKiM,MAAS0H,OAAgB,WAC9B3T,KAAKyW,cAAc,CAAExK,IAAKjM,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKka,eAAela,KAAK8X,SAAU9X,KAAKiM,QAAS,IAGlIjM,KAAKyW,cAAc,CAAEvK,IAAKlM,KAAKkM,IAAMlM,KAAKiM,IAAMjM,KAAKiM,IAAMjM,KAAKkM,MAAO,GACnElM,KAAKkM,OAAUyH,OAAgB,WAC/B,eAAW3T,KAAKxB,QAAS,CAAE,gBAAiBwB,KAAKkM,IAAIjF,aAErDjH,KAAKiM,MAAS0H,OAAgB,WAC9B,eAAW3T,KAAKxB,QAAS,CAAE,gBAAiBwB,KAAKiM,IAAIhF,cAG7D+N,EAAe5L,UAAU8Q,eAAiB,SAAUpC,EAAUvX,GAC1D,OAAOP,KAAKuY,SAAS4B,gBAAgB,CACjCC,sBAAuBtC,EACvBuC,sBAAuBvC,EAAUwC,aAAa,GAF3Cta,CAGJO,IAEPyU,EAAe5L,UAAUgO,aAAe,WACd,OAAlBpX,KAAK8X,UACL9X,KAAKyW,cAAc,CAAE8D,KAAMva,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKka,eAAela,KAAK8X,SAAU9X,KAAKua,SAAU,IAGpIvF,EAAe5L,UAAUoR,OAAS,SAAUC,EAAW3Y,GACnD9B,KAAK0a,YAAa,EAClB,IAAIna,EAAQP,KAAK2a,UAAY3a,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQ+B,OAASP,KAAKO,MACvGP,KAAK2X,YAAY3X,KAAK4a,cAAcra,EAAOP,KAAKua,KAAME,IACtDza,KAAK6a,iBAAiB/Y,IAE1BkT,EAAe5L,UAAU0R,gBAAkB,WACnC9a,KAAK0W,aACL,gBAAY,CAAC1W,KAAK9B,WAAYmW,GAG9B,eAAS,CAACrU,KAAK9B,WAAYmW,GAE/B,eAAWrU,KAAKxB,QAAS,CAAE,eAAgBwB,KAAK0W,aAAe,QAAU,UAE7E1B,EAAe5L,UAAU2R,eAAiB,WAClC/a,KAAKjB,iBACL,OAAakB,IAAID,KAAKiZ,aAAa7a,YAAa,uBAAwB4B,KAAKwQ,aAAcxQ,OAGnGgV,EAAe5L,UAAUoH,aAAe,SAAUE,GAC9CA,EAAE9M,iBACI5D,KAAKiZ,aAAa7a,YAAYe,UAAUC,SAAS,uBAAyBY,KAAKiZ,aAAa/a,UAAUiB,UAAUC,SAAS,mBAC3HY,KAAKgb,MAAMtK,GAEf1Q,KAAK0a,YAAa,EAClB1a,KAAK6a,iBAAiBnK,IAG1BsE,EAAe5L,UAAU4R,MAAQ,SAAUlZ,GACvC9B,KAAKyW,cAAc,CAAElW,MAAO,OAAQ,GACpCP,KAAKib,gBAAgB,IACrBjb,KAAKsE,YAAY/D,MAAQ,GACzB,IAAI6R,EAAc,eAAQpS,KAAKxB,QAAS,QACxC,GAAI4T,EAAa,CACb,IAAI5T,EAAUwB,KAAKxB,QAAQ0c,mBACvBC,EAAahY,SAASiY,YAAY,iBACtCD,EAAWE,UAAU,SAAS,GAAO,GACrC7c,EAAQ8c,cAAcH,KAG9BnG,EAAe5L,UAAUmS,iBAAmB,WACX,uBAAzBvb,KAAKxB,QAAQQ,QACbgB,KAAKwb,YAAY,MAGjBxb,KAAKwb,YAAYxb,KAAKkX,gBAG9BlC,EAAe5L,UAAUqS,cAAgB,WAChC,eAAkBzb,KAAK8Z,WACxB,eAAW9Z,KAAK8Z,SAAU,CACtB,MAAS9Z,KAAKuM,KAAKgC,YAAY,kBAC/B,aAAcvO,KAAKuM,KAAKgC,YAAY,oBAGvC,eAAkBvO,KAAK+Z,SACxB,eAAW/Z,KAAK+Z,OAAQ,CACpB,MAAS/Z,KAAKuM,KAAKgC,YAAY,kBAC/B,aAAcvO,KAAKuM,KAAKgC,YAAY,qBAIhDyG,EAAe5L,UAAU0D,WAAa,WAClC,OAAa7M,IAAID,KAAKxB,QAAS,QAASwB,KAAK0b,aAAc1b,MAC3D,OAAaC,IAAID,KAAKxB,QAAS,OAAQwB,KAAKqQ,gBAAiBrQ,MAC7D,OAAaC,IAAID,KAAKxB,QAAS,UAAWwB,KAAK2b,eAAgB3b,MAC/D,OAAaC,IAAID,KAAKxB,QAAS,QAASwB,KAAKsQ,aAActQ,MAC3D,OAAaC,IAAID,KAAKxB,QAAS,QAASwB,KAAK4b,aAAc5b,MAC3D,OAAaC,IAAID,KAAKxB,QAAS,WAAYwB,KAAK6b,gBAAiB7b,MACjE,OAAaC,IAAID,KAAKxB,QAAS,SAAUwB,KAAKoQ,cAAepQ,MAC7D,OAAaC,IAAID,KAAKxB,QAAS,QAASwB,KAAK8b,aAAc9b,MACvDA,KAAK0C,UACL1C,KAAK+a,iBACD/a,KAAK+V,SACL,OAAa9V,IAAID,KAAK+V,QAAS,QAAS/V,KAAKub,iBAAkBvb,QAI3EgV,EAAe5L,UAAU4Q,kBAAoB,WAEzC,OAAa/Z,IAAID,KAAK+Z,OAAQ,OAAQgC,gBAAiB/b,KAAKgc,mBAAoBhc,MAChF,OAAaC,IAAID,KAAK8Z,SAAU,OAAQiC,gBAAiB/b,KAAKgc,mBAAoBhc,MAClF,OAAaC,IAAID,KAAK+Z,OAAQ,OAAQkC,cAAejc,KAAKkc,iBAAkBlc,MAC5E,OAAaC,IAAID,KAAK8Z,SAAU,OAAQmC,cAAejc,KAAKkc,iBAAkBlc,MAC9E,OAAaC,IAAID,KAAK+Z,OAAQ,OAAQoC,eAAgBnc,KAAKoc,mBAAoBpc,MAC/E,OAAaC,IAAID,KAAK8Z,SAAU,OAAQqC,eAAgBnc,KAAKoc,mBAAoBpc,OAErFgV,EAAe5L,UAAU0E,aAAe,WACpC,OAAa1N,OAAOJ,KAAKxB,QAAS,QAASwB,KAAK0b,cAChD,OAAatb,OAAOJ,KAAKxB,QAAS,OAAQwB,KAAKqQ,iBAC/C,OAAajQ,OAAOJ,KAAKxB,QAAS,QAASwB,KAAKsQ,cAChD,OAAalQ,OAAOJ,KAAKxB,QAAS,QAASwB,KAAK4b,cAChD,OAAaxb,OAAOJ,KAAKxB,QAAS,UAAWwB,KAAK2b,gBAClD,OAAavb,OAAOJ,KAAKxB,QAAS,WAAYwB,KAAK6b,iBACnD,OAAazb,OAAOJ,KAAKxB,QAAS,SAAUwB,KAAKoQ,eACjD,OAAahQ,OAAOJ,KAAKxB,QAAS,QAASwB,KAAK8b,cAC5C9b,KAAK+V,SACL,OAAa3V,OAAOJ,KAAK+V,QAAS,QAAS/V,KAAKub,mBAGxDvG,EAAe5L,UAAUiT,oBAAsB,WAE3C,OAAajc,OAAOJ,KAAK+Z,OAAQ,OAAQgC,gBAAiB/b,KAAKgc,oBAC/D,OAAa5b,OAAOJ,KAAK8Z,SAAU,OAAQiC,gBAAiB/b,KAAKgc,oBACjE,OAAa5b,OAAOJ,KAAK+Z,OAAQ,OAAQkC,cAAejc,KAAKkc,kBAC7D,OAAa9b,OAAOJ,KAAK8Z,SAAU,OAAQmC,cAAejc,KAAKkc,kBAC/D,OAAa9b,OAAOJ,KAAK+Z,OAAQ,OAAQoC,eAAgBnc,KAAKoc,oBAC9D,OAAahc,OAAOJ,KAAK8Z,SAAU,OAAQqC,eAAgBnc,KAAKoc,qBAEpEpH,EAAe5L,UAAUgH,cAAgB,SAAUtO,GAC/CA,EAAMwa,kBACDtc,KAAKxB,QAAQ+B,MAAMjB,QACpBU,KAAKyW,cAAc,CAAElW,MAAO,OAAQ,GAExC,IAAIgc,EAAcvc,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQ+B,OAC9EP,KAAKwb,YAAYe,EAAaza,IAElCkT,EAAe5L,UAAUyR,iBAAmB,SAAU/Y,GAClD,GAAI9B,KAAK+W,YAAc/W,KAAKO,OAASP,KAAK+W,YAAc/W,KAAKM,WAAY,CACrE,IAAIgR,EAAY,GAChBtR,KAAKwc,gBAAkB,CAAEjc,MAAOP,KAAKO,MAAOkc,cAAezc,KAAK+W,UAAW2F,aAAc1c,KAAK0a,WAC1FiC,cAAe3c,KAAK0a,WAAY5Y,MAAOA,GACvCA,IACA9B,KAAKwc,gBAAgB1a,MAAQA,QAEE4B,IAA/B1D,KAAKwc,gBAAgB1a,QACrB9B,KAAKwc,gBAAgBE,cAAe,EACpC1c,KAAKwc,gBAAgBG,eAAgB,GAEzC,eAAMrL,EAAWtR,KAAKwc,iBACtBxc,KAAK+W,UAAY/W,KAAKO,MACtBP,KAAK0a,YAAa,EAClB1a,KAAKgY,iBAAmBhY,KAAKxB,QAAQ+B,MACrCP,KAAKkV,eAAgB,EACrBlV,KAAK2Q,QAAQ,SAAUW,KAG/B0D,EAAe5L,UAAU0S,aAAe,WACpC,IAAIlR,EAAQ5K,KACZ,GAAKA,KAAK0C,UAAW1C,KAAK+C,SAA1B,CAGA,IAAI6Z,EAAe5c,KAAKxB,QAAQ+B,MAChCL,YAAW,WACF0K,EAAMiS,eAAenJ,KAAK9I,EAAMpM,QAAQ+B,QACzCqK,EAAMqQ,gBAAgB2B,QAIlC5H,EAAe5L,UAAU0T,eAAiB,WACtC,IAAIlS,EAAQ5K,KACR+c,IAAQC,UAAUC,UAAY,mBAAmBvJ,KAAKsJ,UAAUC,UACpE/c,YAAW,WACP,GAAI0K,EAAMpM,QAAQ0e,eAAiB,EAAG,CAClC,IAAIC,EAAavS,EAAMpM,QAAQ0e,eAC3BE,EAAUxS,EAAMpM,QAAQ0e,eAAiB,EACzCG,EAAQ,EACRC,EAAW1S,EAAMpM,QAAQ+B,MAAMoE,MAAM,IACrC4Y,EAAgB,eAAiB3S,EAAM4B,QACvCgJ,EAAmB,eAAS,UAAW+H,GACvCC,EAAgBhI,EAAiBiI,WAAW,GACX,MAAjC7S,EAAMpM,QAAQ+B,MAAM6c,IAAoBxS,EAAMpM,QAAQ0e,eAAiB,IAAMH,GACzE,eAAkBnS,EAAM8S,SACxB9S,EAAMpM,QAAQ+B,MAAQqK,EAAMpM,QAAQ+B,MAAMoZ,OAEzB,IAAZyD,EACLxS,EAAMpM,QAAQ+B,MAAQqK,EAAM8S,QAEX,IAAZN,IACLxS,EAAMpM,QAAQ+B,MAAQqK,EAAMpM,QAAQ+B,MAAMoZ,QAE9C/O,EAAMpM,QAAQmf,kBAAkBP,EAASA,IAEpC7J,MAAMO,WAAWlJ,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,MACD,KAAxEtS,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,GAAGO,WAAW,IAC5DH,EAAShQ,QAAQ1C,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,MACrEI,EAASM,YAAYhT,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,KACxEtS,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,GAAGO,WAAW,KAAOD,GACxE5S,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,GAAGO,WAAW,KAAOD,KACxE5S,EAAMpM,QAAQ+B,MAAQqK,EAAMpM,QAAQ+B,MAAMsd,UAAU,EAAGT,GACnDxS,EAAMpM,QAAQ+B,MAAMsd,UAAUV,EAAYvS,EAAMpM,QAAQ+B,MAAMjB,QAClEsL,EAAMpM,QAAQmf,kBAAkBP,EAASA,GACrC7J,MAAMO,WAAWlJ,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,MAAQtS,EAAMpM,QAAQ0e,eAAiB,GACxGtS,EAAMpM,QAAQ+B,MAAMjB,QACvBsL,EAAMkS,kBAITvJ,MAAMO,WAAWlJ,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,MAAQtS,EAAMpM,QAAQ0e,eAAiB,GACxC,KAAxEtS,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,GAAGO,WAAW,KAC5DH,EAAShQ,QAAQ1C,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,MACrEI,EAASM,YAAYhT,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,KACxEtS,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,GAAGO,WAAW,KAAOD,GACxE5S,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,GAAGO,WAAW,KAAOD,KACxE5S,EAAMpM,QAAQmf,kBAAkBP,EAASA,GACzCxS,EAAMkT,QAAUlT,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,gBAClDtS,EAAMmT,kBAAmB,EACzBnT,EAAMkS,mBAGiB,IAA3BlS,EAAMmT,kBAA6BnT,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,kBAAoBtS,EAAMkT,SAC/FvK,MAAMO,WAAWlJ,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,OACpEtS,EAAMpM,QAAQmf,kBAAkB/S,EAAMpM,QAAQ0e,eAAiB,EAAGtS,EAAMpM,QAAQ0e,eAAiB,GACjGtS,EAAMmT,kBAAmB,EACzBnT,EAAMkT,QAAU,MAEe,KAA/BlT,EAAMpM,QAAQ+B,MAAMoZ,QACpB/O,EAAMpM,QAAQmf,kBAAkBN,EAAOA,GAEvCzS,EAAMpM,QAAQ0e,eAAiB,IAC8C,KAAxEtS,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,GAAGO,WAAW,IAAc7S,EAAMpM,QAAQ0e,eAAiB,IAC3G,eAAkBtS,EAAM8S,SAExB9S,EAAMpM,QAAQ+B,MAAQqK,EAAMpM,QAAQ+B,MAGpCqK,EAAMpM,QAAQ+B,MAAQqK,EAAM8S,QAEhC9S,EAAMpM,QAAQmf,kBAAkB/S,EAAMpM,QAAQ0e,eAAgBtS,EAAMpM,QAAQ0e,iBAE5EtS,EAAMpM,QAAQ+B,MAAMqK,EAAMpM,QAAQ0e,eAAiB,KAAO1H,GAAuC,IAAnB5K,EAAMkN,UAAkBlN,EAAMoT,wBAC5GpT,EAAMpM,QAAQ+B,MAAQqK,EAAMpM,QAAQ+B,MAAMsd,UAAU,EAAGT,GACnDxS,EAAMpM,QAAQ+B,MAAMsd,UAAUV,EAAYvS,EAAMpM,QAAQ+B,MAAMjB,UAG1EsL,EAAM8S,QAAU9S,EAAMpM,QAAQ+B,WAI1CyU,EAAe5L,UAAUkH,aAAe,WACpC,GAAKtQ,KAAK0C,UAAW1C,KAAK+C,SAA1B,CAGA,IAAIga,IAAQC,UAAUC,UAAY,mBAAmBvJ,KAAKsJ,UAAUC,WAC/DF,GAAO,OAAQkB,UAChBje,KAAK8c,iBAET,IAAIoB,EAAale,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQ+B,OAC7E2d,EAA4B,OAAfA,GAAuB3K,MAAM2K,GAAc,KAAOA,EAC/Dle,KAAKsE,YAAY/D,MAAQ2d,GAA6B,IAAfA,EAAmBA,EAAWjX,WAAa,KAClF,IAAImL,EAAc,eAAQpS,KAAKxB,QAAS,QACxC,GAAI4T,EAAa,CACb,IAAI5T,EAAUwB,KAAKxB,QAAQ0c,mBACvBC,EAAahY,SAASiY,YAAY,iBACtCD,EAAWE,UAAU,SAAS,GAAO,GACrC7c,EAAQ8c,cAAcH,MAG9BnG,EAAe5L,UAAUwS,aAAe,SAAU9Z,GAE9C,IAAIqc,EAAoBne,KACxB,GAAKA,KAAK0C,UAAW1C,KAAK+C,SAA1B,CAGA,IAAIga,IAAQC,UAAUC,UAAY,mBAAmBvJ,KAAKsJ,UAAUC,UAChEmB,EAAUpB,UAAUqB,UAAUrW,cAAcsF,QAAQ,YAAc,EAKtE,IAJK8Q,GAAWrB,IAAQ,OAAQkB,UAC5Bje,KAAK8c,iBAGL9c,KAAKmV,WACFnV,KAAKxB,QAAQ+B,QAAU,eAAS,UAAW,eAAiBP,KAAKwM,UACjExM,KAAKxB,QAAQ+B,QAAU,eAAS,YAAa,eAAiBP,KAAKwM,SAAU,CAChF,IAAI8R,EAActe,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQ+B,OAC9E+d,EAAc/K,MAAM+K,GAAe,KAAOA,EAC1CH,EAAkBI,YAAY,CAAEhe,MAAO+d,IACvCte,KAAKkV,eAAgB,EAEzB,GAAIlV,KAAKiV,MAAO,CACZ,IAAIuJ,EAAUxe,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQ+B,OACtEke,EAAWze,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKgY,kBAE/D0G,EAAe,IAAIvU,OAAO,aAC1BuU,EAAahL,KAAK1T,KAAKxB,QAAQ+B,UAAoD,IAAxCP,KAAKgY,iBAAiB1K,QAAQ,OAAuD,IAAxCtN,KAAKgY,iBAAiB1K,QAAQ,OAAsE,MAAtDtN,KAAKxB,QAAQ+B,MAAMP,KAAKxB,QAAQ+B,MAAMjB,OAAS,MACrLkf,EAAUxe,KAAKO,OAEnB,IAAI+Q,EAAY,CACZxP,MAAOA,EACPvB,MAAoB,OAAZie,GAAoBjL,MAAMiL,GAAW,KAAOA,EACpD/B,cAA6B,OAAbgC,GAAqBlL,MAAMkL,GAAY,KAAOA,GAElEze,KAAKkV,eAAgB,EACrBlV,KAAKgY,iBAAmBhY,KAAKxB,QAAQ+B,MACrCP,KAAK2Q,QAAQ,QAASW,MAG9B0D,EAAe5L,UAAUuS,eAAiB,SAAU7Z,GAChD,IAAK9B,KAAK+C,SACN,OAAQjB,EAAM6c,SACV,KAAK,GACD7c,EAAM8B,iBACN5D,KAAKwa,OAAOlG,EAAWxS,GACvB,MACJ,KAAK,GACDA,EAAM8B,iBACN5D,KAAKwa,OAAOjG,EAAWzS,GACvB,MACJ,QAAS,QAIrBkT,EAAe5L,UAAUwR,cAAgB,SAAUra,EAAOga,EAAME,IAC9C,OAAVla,GAAkBgT,MAAMhT,MACxBA,EAAQ,GAEZ,IAAIqe,EAAenE,IAAcnG,EAAY/T,EAAQga,EAAOha,EAAQga,EAEpE,OADAqE,EAAe5e,KAAK6e,gBAAgBte,EAAOga,EAAMqE,GAC1C5e,KAAK4X,WAAa5X,KAAK6X,UAAU+G,GAAgBA,GAE5D5J,EAAe5L,UAAUyV,gBAAkB,SAAUte,EAAOga,EAAMrW,GAC9D,IAAI4a,EAAW,IAAI3U,OAAO,YACtB4U,EAAaD,EAASpL,KAAKnT,EAAM0G,YACjC+X,EAAYF,EAASpL,KAAK6G,EAAKtT,YACnC,GAAI8X,GAAcC,EAAW,CACzB,IAAIC,EAAaF,EAAaD,EAASI,KAAK3e,EAAM0G,YAAY,GAAG3H,OAAS,EACtE6f,EAAYH,EAAYF,EAASI,KAAK3E,EAAKtT,YAAY,GAAG3H,OAAS,EACnE2M,EAAMmT,KAAKnT,IAAIgT,EAAYE,GAC/B,OAAenf,KAAKqf,WAAWnb,EAAQ+H,GAE3C,OAAO/H,GAEX8Q,EAAe5L,UAAUiW,WAAa,SAAUnb,EAAQob,GACpDA,EAAYA,GAAa,EACzB,IAAIC,EAASH,KAAKI,IAAI,GAAIF,GAC1B,OAAOpb,GAAUqb,EAAiBH,KAAKK,MAAMvb,GAAUqb,GAE3DvK,EAAe5L,UAAUoS,YAAc,SAAUjb,EAAOuB,GAChDA,IACA9B,KAAK0a,YAAa,GAER,OAAVna,GAAmBgT,MAAMhT,IACrBP,KAAK8X,WACLvX,EAAQP,KAAK+X,YAAYxX,EAAOP,KAAK8X,WAG7C9X,KAAKM,WAAaC,EAClBP,KAAK2X,YAAsB,OAAVpX,GAAkBgT,MAAMhT,GAAS,KAAOP,KAAK4X,WAAa5X,KAAK6X,UAAUtX,GAASA,GAE9FP,KAAKoV,iBACNpV,KAAK6a,iBAAiB/Y,IAG9BkT,EAAe5L,UAAUsW,eAAiB,SAAUpd,EAAMqd,GACtD,gBAASrd,EAAMqd,EAAS3f,KAAK4W,aAC7B5W,KAAKwb,YAAYxb,KAAKO,QAE1ByU,EAAe5L,UAAUuO,YAAc,SAAUpX,GAC7C,GAAMA,GAAmB,IAAVA,EAIV,CACD,IAAIqf,EAAmB5f,KAAK6f,oBAAoBtf,GAChDP,KAAKyW,cAAc,CAAElW,MAAOP,KAAK+X,YAAYxX,EAAOqf,KAAqB,QALzErf,EAAQ,KACRP,KAAKyW,cAAc,CAAElW,MAAOA,IAAS,GAMzCP,KAAK8f,aACA9f,KAAK4X,YACN5X,KAAK+f,iBAGb/K,EAAe5L,UAAU0W,WAAa,WAClC,GAAI9f,KAAKO,OAAwB,IAAfP,KAAKO,MAAa,CAChC,IAAIA,EAAQP,KAAKggB,eACbC,EAAejgB,KAAK2a,UAAYpa,EAAQP,KAAKuY,SAAS4B,gBAAgBna,KAAK4W,YAAnC5W,CAAgDA,KAAKO,OACjGP,KAAKib,gBAAgBgF,GACrB,eAAWjgB,KAAKxB,QAAS,CAAE,gBAAiB+B,IAC5CP,KAAKsE,YAAY/D,MAAQP,KAAKO,MAAM0G,WACjB,OAAfjH,KAAKO,OAAkBP,KAAKkgB,yBAC5BlgB,KAAKsE,YAAY/D,MAAQP,KAAKsE,YAAY/D,MAAMe,QAAQ,IAAKtB,KAAKkgB,8BAItElgB,KAAKib,gBAAgB,IACrBjb,KAAKxB,QAAQkD,gBAAgB,iBAC7B1B,KAAKsE,YAAY/D,MAAQ,MAGjCyU,EAAe5L,UAAU6R,gBAAkB,SAAUkF,EAAK3hB,GACtD,OAAMgG,SAAS2b,EAAM3hB,GAAoBwB,KAAKxB,QAAUwB,KAAK3B,eAAgB2B,KAAKjB,kBAEtFiW,EAAe5L,UAAU2W,cAAgB,WACrC/f,KAAK0W,cAAe,GAChB1W,KAAKO,OAAwB,IAAfP,KAAKO,SACnBP,KAAK0W,eAAiB1W,KAAKO,MAAQP,KAAKiM,KAAOjM,KAAKO,MAAQP,KAAKkM,MAErElM,KAAK8a,mBAET9F,EAAe5L,UAAUyW,oBAAsB,SAAUtf,GACrD,IAAIqf,EAEAQ,EAAY,IAAIjW,OAAO,qBACvBkW,EAAc9f,EAAM0G,WACxB,GAAImZ,EAAU1M,KAAK2M,GAAc,CAC7B,IAAInc,EAASkc,EAAUlB,KAAKmB,GACvB,eAAkBnc,KACnBmc,EAAc9f,EAAM+f,QAAQlB,KAAKlT,IAAInH,SAASb,EAAO,GAAI,IAAK,MAGtE,IAAIqc,EAAcF,EAAY1b,MAAM,KAAK,GAKzC,OAJAib,EAAoBW,GAAgBA,EAAYjhB,OAAaihB,EAAYjhB,OAAhB,EACnC,OAAlBU,KAAK8X,WACL8H,EAAmBA,EAAmB5f,KAAK8X,SAAW8H,EAAmB5f,KAAK8X,UAE3E8H,GAEX5K,EAAe5L,UAAU4W,aAAe,WACpC,IAAIJ,EAAmB5f,KAAK6f,oBAAoB7f,KAAKO,OACrD,OAAOP,KAAKuY,SAAS4B,gBAAgB,CACjCC,sBAAuBwF,EACvBvF,sBAAuBuF,EAAkBtF,aAAa,GAFnDta,CAGJA,KAAKO,QAEZyU,EAAe5L,UAAUyO,UAAY,SAAUtX,GAC3C,OAAIA,EAAQP,KAAKiM,IACNjM,KAAKiM,IAEZ1L,EAAQP,KAAKkM,IACNlM,KAAKkM,IAET3L,GAEXyU,EAAe5L,UAAU2O,YAAc,SAAUxX,EAAO+e,GACpD,IAAIpb,EAAS3D,EACTuX,EAAWwH,GAAa,EACxBkB,EAAUtc,EAAO+C,WAAWtC,MAAM,KACtCT,EAASkb,KAAKK,MAAM9L,OAAO6M,EAAQ,GAAK,KAAOA,EAAQ,GAAM7M,OAAO6M,EAAQ,IAAM1I,EAAYA,KAC9F,IAAI2I,EAAUvc,EAAO+C,WAAWtC,MAAM,KAEtC,OADAT,EAASyP,OAAO8M,EAAQ,GAAK,KAAOA,EAAQ,GAAM9M,OAAO8M,EAAQ,IAAM3I,GAAaA,IAC7EnE,OAAOzP,EAAOoc,QAAQxI,KAEjC9C,EAAe5L,UAAUsX,YAAc,SAAU5e,GAE7C,OADAA,EAAM8B,kBACC,GAEXoR,EAAe5L,UAAUyS,gBAAkB,SAAU/Z,GACjD,IAAK9B,KAAK0C,SAAW1C,KAAK+C,SACtB,OAAO,EAEX,IAAK,OAAQkb,UAAqC,SAAzB,OAAQ0C,KAAKC,SAAwC,KAAlB9e,EAAM6c,QAAgB,CAC9E,IAAIpC,EAAcvc,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQ+B,OAE9E,OADAP,KAAKwb,YAAYe,EAAaza,IACvB,EAEX,GAAoB,IAAhBA,EAAM+O,OAAe/O,EAAM+e,SAAW/e,EAAMgf,SAA6B,IAAlBhf,EAAM6c,SAAmC,KAAlB7c,EAAM6c,QACpF,OAAO,EAEX,IAAIoC,EAAcC,OAAOC,aAAanf,EAAM+O,OACxC2E,EAAmB,eAAS,UAAW,eAAiBxV,KAAKwM,SAC7D0U,EAA0C,kBAAfpf,EAAMqf,MAA4BJ,IAAgBvL,EAE7E0L,IACAH,EAAcvL,GAElB,IAAI4L,EAAOphB,KAAKxB,QAAQ+B,MAExB,GADA6gB,EAAOA,EAAKvD,UAAU,EAAG7d,KAAKxB,QAAQ0e,gBAAkB6D,EAAcK,EAAKvD,UAAU7d,KAAKxB,QAAQ6iB,cAC7FrhB,KAAK6c,eAAenJ,KAAK0N,GAKzB,CAED,GAAIF,EAA0B,CAC1B,IAAI7D,EAAQrd,KAAKxB,QAAQ0e,eAAiB,EAC1Cld,KAAKxB,QAAQ+B,MAAQ6gB,EACrBphB,KAAKxB,QAAQmf,kBAAkBN,EAAOA,GACtCvb,EAAM8B,iBACN9B,EAAMwa,kBAEV,OAAO,EAXP,OAFAxa,EAAM8B,iBACN9B,EAAMwa,mBACC,GAcftH,EAAe5L,UAAUyT,aAAe,WACpC,IAAIU,EAAgB,eAAiBvd,KAAKwM,QACtCgJ,EAAmB,eAAS,UAAW+H,GACvC+D,EAAe,IAInB,OAHI9L,IAAqBf,IACrBe,EAAmB,KAAOA,GAER,IAAlBxV,KAAK8X,UAAkB9X,KAAKge,sBACrBxJ,GAEPxU,KAAK8X,UAAY9X,KAAKge,wBACtBsD,EAAe,MAAQthB,KAAK8X,SAAW,KAGpC,IAAI3N,OAAO,gBAAkBqL,EAAmB,MAAQ8L,EAC3D,QAAU9L,EAAmB,MAAQ8L,EAAe,WAE5DtM,EAAe5L,UAAUmY,WAAa,SAAUzf,GAE5C,IAAI0f,EADJ1f,EAAM8B,iBAGN,IAAI6d,EAAW3f,EACX2f,EAASC,WACTF,EAAQC,EAASC,WAAa,IAEzBD,EAASE,SACdH,GAASC,EAASE,OAAS,GAE3BH,EAAQ,EACRxhB,KAAKwa,OAAOlG,EAAWxS,GAElB0f,EAAQ,GACbxhB,KAAKwa,OAAOjG,EAAWzS,GAE3B9B,KAAK0gB,YAAY5e,IAErBkT,EAAe5L,UAAUsS,aAAe,SAAU5Z,GAC9C,IAAI8I,EAAQ5K,KAIZ,GAHA4hB,aAAa7M,GACb/U,KAAK6hB,eAAiB,CAAE/f,MAAOA,EAAOvB,MAAOP,KAAKO,MAAOrC,UAAW8B,KAAK9B,WACzE8B,KAAK2Q,QAAQ,QAAS3Q,KAAK6hB,gBACtB7hB,KAAK0C,UAAW1C,KAAK+C,SAA1B,CAMA,GAHA/C,KAAK2a,WAAY,EACjB,gBAAY,CAAC3a,KAAK9B,WAAYmW,GAC9BrU,KAAK+W,UAAY/W,KAAKO,MACjBP,KAAKO,OAAwB,IAAfP,KAAKO,MAAc,CAClC,IAAIuhB,EAAgB9hB,KAAKggB,eAEzB,GADAhgB,KAAKib,gBAAgB6G,IAChB9hB,KAAKuV,cACN,GAAK,OAAQ0I,UAAqC,SAAzB,OAAQ0C,KAAKC,QAGjC,CACD,IAAImB,EAAS,OAAQ9D,UAAY,OAAQ+D,MAAS,IAAM,EACxDjN,EAAmB7U,YAAW,WAC1B0K,EAAMpM,QAAQmf,kBAAkB,EAAGmE,EAAcxiB,UAClDyiB,QANH/hB,KAAKxB,QAAQmf,kBAAkB,EAAGmE,EAAcxiB,QAUvD,OAAQ2e,UACT,OAAahe,IAAID,KAAKxB,QAAS,4BAA6BwB,KAAKuhB,WAAYvhB,QAGrFgV,EAAe5L,UAAUiH,gBAAkB,SAAUvO,GACjD,IAAI8I,EAAQ5K,KAGZ,GAFAA,KAAKiiB,cAAgB,CAAEngB,MAAOA,EAAOvB,MAAOP,KAAKO,MAAOrC,UAAW8B,KAAK9B,WACxE8B,KAAK2Q,QAAQ,OAAQ3Q,KAAKiiB,eACrBjiB,KAAK0C,UAAW1C,KAAK+C,SAA1B,CAGA,GAAI/C,KAAKuV,eAEL,GADAzT,EAAM8B,iBACF,OAAQqa,SAAU,CAClB,IAAIiE,EAAUliB,KAAKxB,QAAQ+B,MAC3BP,KAAKxB,QAAQqF,QACb7D,KAAKuV,eAAgB,EACrB,IAAI4M,EAAQniB,KAAKxB,QACjB0B,YAAW,WACP0K,EAAMqQ,gBAAgBiH,EAASC,KAChC,UAGN,CACDniB,KAAK2a,WAAY,EACZ3a,KAAKxB,QAAQ+B,MAAMjB,QACpBU,KAAKyW,cAAc,CAAElW,MAAO,OAAQ,GAExC,IAAIgc,EAAcvc,KAAKuY,SAASC,gBAAgB,CAAEC,OAAQ,KAAxCzY,CAA+CA,KAAKxB,QAAQ+B,OAC9EP,KAAKwb,YAAYe,GACZ,OAAQ0B,UACT,OAAa7d,OAAOJ,KAAKxB,QAAS,4BAA6BwB,KAAKuhB,YAG5E,IAAInP,EAAc,eAAQpS,KAAKxB,QAAS,QACxC,GAAI4T,EAAa,CACb,IAAI5T,EAAUwB,KAAKxB,QAAQ0c,mBACvBkH,EAAajf,SAASiY,YAAY,cACtCgH,EAAW/G,UAAU,YAAY,GAAO,GACxC7c,EAAQ8c,cAAc8G,MAG9BpN,EAAe5L,UAAU4S,mBAAqB,SAAUla,GACpD,IAAI8I,EAAQ5K,KAKZ,GAJIA,KAAK2a,YACL3a,KAAKuV,eAAgB,EACrBzT,EAAM8B,kBAEL5D,KAAKqiB,eAAevgB,GAAzB,CAIa9B,KAAKqiB,eAAevgB,GAAjC,IACI0H,EAAS1H,EAAMwgB,cACf9H,EAAUhR,EAAOrK,UAAUC,SAAS+U,GAAWG,EAAYC,EAC/D,OAAatU,IAAIuJ,EAAQ,aAAcxJ,KAAKuiB,aAAcviB,MAC1DA,KAAKwiB,QAAUC,aAAY,WACvB7X,EAAM8K,UAAW,EACjB9K,EAAM4P,OAAOA,EAAQ1Y,KACtB,KACH,OAAa7B,IAAIkD,SAAU,UAAWnD,KAAKuiB,aAAcviB,QAE7DgV,EAAe5L,UAAUgT,mBAAqB,SAAUta,GACpD,IAAI0H,EACJ,GAAmB,cAAf1H,EAAMG,KAAsB,CAC5B,IAAIygB,EAAa5gB,EAAM6gB,QACvBnZ,EAASkZ,EAAWpjB,QAAU6D,SAASyf,iBAAiBF,EAAW,GAAGG,MAAOH,EAAW,GAAGI,YAG3FtZ,EAASrG,SAASyf,iBAAiB9gB,EAAMihB,QAASjhB,EAAMkhB,SAEtDxZ,EAAOrK,UAAUC,SAAS8U,IAC5B+O,cAAcjjB,KAAKwiB,UAG3BxN,EAAe5L,UAAU8S,iBAAmB,SAAUpa,GAWlD,GAVA9B,KAAK+W,UAAY/W,KAAKO,MAClBP,KAAKuV,gBACLvV,KAAKxB,QAAQqF,QACR,OAAQoa,WACTje,KAAKuV,eAAgB,IAGxB,OAAQ0I,UACTnc,EAAM8B,iBAEL5D,KAAKqiB,eAAevgB,GAAzB,CAGA,IAAI0H,EAAS1H,EAAMwgB,cACf9H,EAAUhR,EAAOrK,UAAUC,SAAS+U,GAAWG,EAAYC,EAC/D,OAAanU,OAAOoJ,EAAQ,aAAcxJ,KAAKuiB,cAC1CviB,KAAK0V,UACN1V,KAAKwa,OAAOA,EAAQ1Y,GAExB9B,KAAK0V,UAAW,EAChB,OAAatV,OAAO+C,SAAU,UAAWnD,KAAKuiB,cAC9C,IAAInQ,EAAc,eAAQpS,KAAKxB,QAAS,QACxC,GAAI4T,EAAa,CACb,IAAI5T,EAAUwB,KAAKxB,QAAQ0c,mBACvBC,EAAahY,SAASiY,YAAY,iBACtCD,EAAWE,UAAU,SAAS,GAAO,GACrC7c,EAAQ8c,cAAcH,MAG9BnG,EAAe5L,UAAUiZ,eAAiB,SAAUvgB,GAChD,QAAKA,EAAM+O,OAAyB,IAAhB/O,EAAM+O,OAAiB/O,EAAMmB,QAA2B,IAAjBnB,EAAMmB,SACzDjD,KAAK0C,SAAW1C,KAAK+C,YAG7BkgB,cAAcjjB,KAAKwiB,UACZ,IAEXxN,EAAe5L,UAAU8Z,qBAAuB,WAC5C,OAAM/c,eAAenG,KAAKiZ,cAC1B,IAAI3U,EAActE,KAAKsE,YACvBtE,KAAKsE,YAAYlE,SACjB,OAAMkG,YAAYtG,KAAKxB,QAASwB,KAAK3B,eAAgB2B,KAAKuB,YAAavB,KAAKoE,eAC5EpE,KAAK9B,UAAUQ,aAAa4F,EAAatE,KAAK9B,UAAUib,WAAW,KAEvEnE,EAAe5L,UAAUmZ,aAAe,SAAUzgB,GAC9CA,EAAMwa,kBACN2G,cAAcjjB,KAAKwiB,SACnBxiB,KAAK0V,UAAW,EAChB,OAAatV,OAAOJ,KAAK+Z,OAAQ,aAAc/Z,KAAKuiB,cACpD,OAAaniB,OAAOJ,KAAK8Z,SAAU,aAAc9Z,KAAKuiB,eAS1DvN,EAAe5L,UAAU+Z,UAAY,SAAU5I,QAC9B,IAATA,IAAmBA,EAAOva,KAAKua,MACnCva,KAAK0a,YAAa,EAClB1a,KAAK2X,YAAY3X,KAAK4a,cAAc5a,KAAKO,MAAOga,EAAMjG,IACtDtU,KAAK6a,oBAST7F,EAAe5L,UAAUga,UAAY,SAAU7I,QAC9B,IAATA,IAAmBA,EAAOva,KAAKua,MACnCva,KAAK0a,YAAa,EAClB1a,KAAK2X,YAAY3X,KAAK4a,cAAc5a,KAAKO,MAAOga,EAAMhG,IACtDvU,KAAK6a,oBAST7F,EAAe5L,UAAUtF,QAAU,WAC/B9D,KAAK8N,eACL,eAAO9N,KAAKsE,aACRtE,KAAKwX,iBACLxX,KAAKqc,sBACL,eAAOrc,KAAK+Z,QACZ,eAAO/Z,KAAK8Z,WAKhB,IAHA,IAAIuJ,EAAY,CAAC,kBAAmB,OAAQ,eAAgB,gBACxD,gBAAiB,iBAAkB,aAAc,oBAAqB,WACtE,gBAAiB,gBAAiB,gBAAiB,gBAC9ChkB,EAAI,EAAGA,EAAIgkB,EAAU/jB,OAAQD,IAClCW,KAAKxB,QAAQkD,gBAAgB2hB,EAAUhkB,IAE3CW,KAAKxB,QAAQW,UAAUiB,OAAO,WAC9BJ,KAAK9B,UAAUsF,sBAAsB,WAAYxD,KAAKxB,SACtD,eAAOwB,KAAK9B,WACZ8B,KAAK+Z,OAAS,KACd/Z,KAAK8Z,SAAW,KAChB9Z,KAAK9B,UAAY,KACjB8B,KAAKsE,YAAc,KACnBtE,KAAKwc,gBAAkB,KACvBxc,KAAKiiB,cAAgB,KACrBjiB,KAAK6hB,eAAiB,KACtB7hB,KAAKiZ,aAAe,KACpB,OAAMnV,UACN4G,EAAOtB,UAAUtF,QAAQ+G,KAAK7K,OAOlCgV,EAAe5L,UAAUka,QAAU,WAC/B,OAAOtjB,KAAKxB,QAAQ+B,OAQxByU,EAAe5L,UAAUma,QAAU,WAC3BpgB,SAASC,gBAAkBpD,KAAKxB,SAAWwB,KAAK0C,UAChD1C,KAAKxB,QAAQqF,QACb,eAAS,CAAC7D,KAAK9B,WAAY,CAAC0W,MAQpCI,EAAe5L,UAAUoa,SAAW,WAC5BrgB,SAASC,gBAAkBpD,KAAKxB,SAAWwB,KAAK0C,UAChD1C,KAAKxB,QAAQilB,OACb,gBAAY,CAACzjB,KAAK9B,WAAY,CAAC0W,MASvCI,EAAe5L,UAAUsa,eAAiB,WACtC,IAAIC,EAAY,CAAC,SACjB,OAAO3jB,KAAK4jB,aAAaD,IAW7B3O,EAAe5L,UAAU+E,kBAAoB,SAAUC,EAASC,GAC5D,IAAK,IAAInM,EAAK,EAAGC,EAAKC,OAAOC,KAAK+L,GAAUlM,EAAKC,EAAG7C,OAAQ4C,IAAM,CAC9D,IAAII,EAAOH,EAAGD,GACd,OAAQI,GACJ,IAAK,QACDtC,KAAK0X,gBAAgBtJ,EAAQjJ,OAC7B,OAAMhF,eAAeH,KAAKxB,QAASwB,KAAK9B,WACxC,MACJ,IAAK,WACD8B,KAAKwZ,eAAepL,EAAQ5L,SAAU6L,EAAQ7L,UAC9C,MACJ,IAAK,UACD,OAAMC,WAAW2L,EAAQ1L,QAAS1C,KAAKxB,SACvCwB,KAAK+a,iBACL,MACJ,IAAK,YACD,OAAMpY,aAAayL,EAAQxL,UAAW,CAAC5C,KAAK9B,YAC5C,MACJ,IAAK,WACD,OAAM4E,YAAYsL,EAAQrL,SAAU/C,KAAKxB,SACrCwB,KAAK+C,SACL,eAAW/C,KAAKxB,QAAS,CAAE,gBAAiB,SAG5CwB,KAAKxB,QAAQkD,gBAAgB,iBAEjC,MACJ,IAAK,iBACD1B,KAAKgX,0BACLhX,KAAKkZ,0BACLlZ,KAAKoZ,qBAAoB,GACzBpZ,KAAKiX,iBAAgB,GACrB,OAAMxX,kBAAkBO,KAAK9B,UAAW8B,KAAKxB,SAC7C,MACJ,IAAK,cACD,OAAMqE,eAAeuL,EAAQ7M,YAAavB,KAAKxB,SAC/C,OAAM2B,eAAeH,KAAKxB,QAASwB,KAAK9B,WACxC,MACJ,IAAK,OACD8B,KAAKua,KAAOnM,EAAQmM,KACpBva,KAAKoX,eACL,MACJ,IAAK,iBACDpX,KAAK6jB,iBAAiBzV,GACtB,MACJ,IAAK,kBACDpO,KAAK8jB,kBAAkB1V,GACvB,MACJ,IAAK,iBACDpO,KAAK3B,eAAiB+P,EAAQ/P,eAC9B2B,KAAKkjB,uBACL,MACJ,IAAK,QACDljB,KAAKoV,iBAAmBpV,KAAKmV,WAAanV,KAAKiV,QAAUjV,KAAKkV,cAC9DlV,KAAKwb,YAAYpN,EAAQ7N,OACrBP,KAAKoV,kBACLpV,KAAKkV,eAAgB,EACrBlV,KAAKoV,iBAAkB,GAE3B,MACJ,IAAK,MACL,IAAK,MACD,gBAAS9S,EAAM,eAASA,EAAM8L,GAAUpO,MACxCA,KAAKmX,iBACLnX,KAAKwb,YAAYxb,KAAKO,OACtB,MACJ,IAAK,aACDP,KAAK4X,WAAaxJ,EAAQwJ,WAC1B5X,KAAKwb,YAAYxb,KAAKO,OACtBP,KAAK+f,gBACL,MACJ,IAAK,SACD/f,KAAK8W,kBACL9W,KAAKuM,KAAK+B,UAAUtO,KAAKwM,QACzBxM,KAAKyb,gBACLzb,KAAKqX,oBACL,OAAMxU,eAAe7C,KAAKuB,YAAavB,KAAKxB,SAC5CwB,KAAKwb,YAAYxb,KAAKO,OACtB,MACJ,IAAK,WAEG,IAAIof,EAAU,eAASrd,EAAM8L,GAC7BpO,KAAKyW,cAAc,CAAEqC,aAAc6G,IAAW,GAC9C3f,KAAK0f,eAAepd,EAAMqd,GAE9B,MACJ,IAAK,eAEG,IAAIoE,EAAY,eAASzhB,EAAM8L,GAC/BpO,KAAKyW,cAAc,CAAEoC,SAAUkL,IAAa,GAC5C/jB,KAAK0f,eAAe,WAAYqE,GAEpC,MACJ,IAAK,SACD,gBAASzhB,EAAM,eAASA,EAAM8L,GAAUpO,MACxCA,KAAK6W,kBACL7W,KAAKwb,YAAYxb,KAAKO,OACtB,MACJ,IAAK,WACDP,KAAK8X,SAAW1J,EAAQ0J,SACxB9X,KAAKwb,YAAYxb,KAAKO,UAItCyU,EAAe5L,UAAU0a,kBAAoB,SAAU1V,GACnD,OAAMnP,eAAemP,EAAQrP,gBAAiBiB,KAAKxB,QAASwB,KAAKiZ,kBAAcvV,EAAW1D,KAAKoE,eAC/FpE,KAAK+a,kBAET/F,EAAe5L,UAAUya,iBAAmB,SAAUzV,GAC9CA,EAAQoJ,eACRxX,KAAKyX,mBAGL,eAAOzX,KAAK+Z,QACZ,eAAO/Z,KAAK8Z,YASpB9E,EAAe5L,UAAUoF,cAAgB,WACrC,MAAO,kBAEXlF,EAAW,CACP,eAAS,KACV0L,EAAe5L,UAAW,gBAAY,GACzCE,EAAW,CACP,eAAS,OACV0L,EAAe5L,UAAW,aAAS,GACtCE,EAAW,CACP,gBAAWqK,OAAgB,YAC5BqB,EAAe5L,UAAW,WAAO,GACpCE,EAAW,CACP,eAASqK,OAAOsG,YACjBjF,EAAe5L,UAAW,WAAO,GACpCE,EAAW,CACP,eAAS,IACV0L,EAAe5L,UAAW,YAAQ,GACrCE,EAAW,CACP,eAAS,OACV0L,EAAe5L,UAAW,aAAS,GACtCE,EAAW,CACP,eAAS,OACV0L,EAAe5L,UAAW,mBAAe,GAC5CE,EAAW,CACP,eAAS,KACV0L,EAAe5L,UAAW,sBAAkB,GAC/CE,EAAW,CACP,gBAAS,IACV0L,EAAe5L,UAAW,sBAAkB,GAC/CE,EAAW,CACP,gBAAS,IACV0L,EAAe5L,UAAW,gBAAY,GACzCE,EAAW,CACP,gBAAS,IACV0L,EAAe5L,UAAW,eAAW,GACxCE,EAAW,CACP,gBAAS,IACV0L,EAAe5L,UAAW,uBAAmB,GAChDE,EAAW,CACP,gBAAS,IACV0L,EAAe5L,UAAW,yBAAqB,GAClDE,EAAW,CACP,eAAS,OACV0L,EAAe5L,UAAW,cAAU,GACvCE,EAAW,CACP,eAAS,OACV0L,EAAe5L,UAAW,gBAAY,GACzCE,EAAW,CACP,eAAS,OACV0L,EAAe5L,UAAW,gBAAY,GACzCE,EAAW,CACP,eAAS,OACV0L,EAAe5L,UAAW,oBAAgB,GAC7CE,EAAW,CACP,gBAAS,IACV0L,EAAe5L,UAAW,kBAAc,GAC3CE,EAAW,CACP,gBAAS,IACV0L,EAAe5L,UAAW,6BAAyB,GACtDE,EAAW,CACP,eAAS,UACV0L,EAAe5L,UAAW,sBAAkB,GAC/CE,EAAW,CACP,kBACD0L,EAAe5L,UAAW,eAAW,GACxCE,EAAW,CACP,kBACD0L,EAAe5L,UAAW,iBAAa,GAC1CE,EAAW,CACP,kBACD0L,EAAe5L,UAAW,cAAU,GACvCE,EAAW,CACP,kBACD0L,EAAe5L,UAAW,aAAS,GACtCE,EAAW,CACP,kBACD0L,EAAe5L,UAAW,YAAQ,GACrC4L,EAAiB1L,EAAW,CACxB,QACD0L,GACIA,EA3zCwB,CA4zCjC","file":"js/chunk-vendors~086a7f07.6caaf916.4.2.0.js","sourcesContent":["/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n FLOATTEXTCONTENT: 'e-float-text-content',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n createSpanElement(inputObject.container, makeElement);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement, args.element);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button, readonly) {\n if (!isNullOrUndefined(button)) {\n if (value && !readonly) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n function updateLabelState(value, label, element) {\n if (element === void 0) { element = null; }\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n var isNotFocused = element != null ? element !== document.activeElement : true;\n if (isNotFocused) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (!isNullOrUndefined(button) && (isBindClearAction === undefined || isBindClearAction)) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button, element.readOnly);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n if (!isNullOrUndefined(button)) {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n button = !isNullOrUndefined(element) && element.classList.contains('e-combobox') ? null : button;\n }\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function destroy() {\n privateInputObj = null;\n }\n Input.destroy = destroy;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label, element);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n calculateWidth(element, element.parentElement);\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && !isNullOrUndefined(parentElement) && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the placeholder when it overflows on the button such as spinbutton, clearbutton, icon etc\n * ```\n * E.g : Input.calculateWidth(element, container);\n * ```\n *\n * @param {any} element - Input element which is need to add.\n * @param {HTMLElement} container - The parent element which is need to get the label span to calculate width\n */\n function calculateWidth(element, container, moduleName) {\n var elementWidth = moduleName === 'multiselect' ? element : element.clientWidth - parseInt(getComputedStyle(element, null).getPropertyValue('padding-left'), 10);\n if (!isNullOrUndefined(container.getElementsByClassName('e-float-text-content')[0])) {\n if (container.getElementsByClassName('e-float-text-content')[0].classList.contains('e-float-text-overflow')) {\n container.getElementsByClassName('e-float-text-content')[0].classList.remove('e-float-text-overflow');\n }\n if (elementWidth < container.getElementsByClassName('e-float-text-content')[0].clientWidth || elementWidth === container.getElementsByClassName('e-float-text-content')[0].clientWidth) {\n container.getElementsByClassName('e-float-text-content')[0].classList.add('e-float-text-overflow');\n }\n }\n }\n Input.calculateWidth = calculateWidth;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n calculateWidth(container.firstChild, container);\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName('e-float-text-content')[0] ? parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].children[0].textContent = placeholder : parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName('e-float-text-content')[0] ? parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].children[0].textContent = '' : parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[\"\" + key];\n }\n else {\n element.setAttribute(key, attrs[\"\" + key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n createSpanElement(inputObj.container, makeElement);\n calculateWidth(args.element, inputObj.container);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Create the span inside the label and add the label text into the span textcontent\n * ```\n * E.g : Input.createSpanElement(inputObject, makeElement);\n * ```\n *\n * @param {InputObject} inputObject\n * - Element which is need to get the label\n * @param {createElementParams} makeElement\n * - Element which is need to create the span\n */\n function createSpanElement(inputObject, makeElement) {\n if (inputObject.classList.contains('e-outline') && inputObject.getElementsByClassName('e-float-text')[0]) {\n var labelSpanElement = makeElement('span', { className: CLASSNAMES.FLOATTEXTCONTENT });\n labelSpanElement.innerHTML = inputObject.getElementsByClassName('e-float-text')[0].innerHTML;\n inputObject.getElementsByClassName('e-float-text')[0].innerHTML = '';\n inputObject.getElementsByClassName('e-float-text')[0].appendChild(labelSpanElement);\n }\n }\n Input.createSpanElement = createSpanElement;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[parseInt(i.toString())].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString())].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[parseInt(index.toString())].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString())].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[parseInt(index.toString())].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n if (container.getElementsByClassName('e-input-group-icon')[0] && container.getElementsByClassName('e-float-text-overflow')[0]) {\n container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n innerWrapper.appendChild(result[parseInt(i.toString())]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n /* eslint-disable-next-line security/detect-unsafe-regex */\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
\n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[\"\" + name], rules, {});\n }\n else {\n this.rules[\"\" + name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[\"\" + name] && !rules) {\n delete this.rules[\"\" + name];\n }\n else if (!isNullOrUndefined(this.rules[\"\" + name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[\"\" + name][rules[parseInt(i.toString())]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[\"\" + key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][\"\" + ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[\"\" + ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[\"\" + name]) {\n return;\n }\n var rules = Object.keys(this.rules[\"\" + name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[\"\" + name][\"\" + rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[\"\" + name][\"\" + rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[\"\" + name][\"\" + rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[\"\" + rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[\"\" + rule] : this.defaultMessages[\"\" + rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[parseInt(i.toString())] : ruleValue;\n message = message.replace(formats[parseInt(i.toString())], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[parseInt(i.toString())];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\nvar selectionTimeOut = 0;\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isVue = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n else if (attributeName === 'class') {\n input.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('numerictextbox'));\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n if (this.isAngular && this.angularTagName === 'EJS-NUMERICTEXTBOX' && this.cloneElement.id.length > 0) {\n attributes(this.hiddenInput, { 'name': this.cloneElement.id });\n }\n else {\n attributes(this.hiddenInput, { 'name': this.inputName });\n }\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[\"\" + key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[\"\" + pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[\"\" + pro]) :\n this.htmlAttributes[\"\" + pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n if (this.min !== -(Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemin': this.min.toString() });\n }\n if (this.max !== (Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemax': this.max.toString() });\n }\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide')) || this.inputWrapper.container.classList.contains('e-static-clear')) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value || this.prevValue !== this.inputValue) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n if (_this.element.value[_this.element.selectionStart - 1] === decimalSeparator && _this.decimals === 0 && _this.validateDecimalOnType) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n //EJ2-54963-if type \".\" or \".0\" or \"-.0\" it converts to \"0\" automatically when binding v-model\n var nonZeroRegex = new RegExp('[^0-9]+$');\n if (nonZeroRegex.test(this.element.value) || ((this.elementPrevValue.indexOf('.') !== -1 || this.elementPrevValue.indexOf('-') !== -1) && this.element.value[this.element.value.length - 1] === '0')) {\n current = this.value;\n }\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.inputValue = value;\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n var isAlterNumPadDecimalChar = event.code === 'NumpadDecimal' && currentChar !== decimalSeparator;\n //EJ2-59813-replace the culture decimal separator value with numberpad decimal separator value when culture decimal separator and numberpad decimal separator are different\n if (isAlterNumPadDecimalChar) {\n currentChar = decimalSeparator;\n }\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n //EJ2-59813-update the numberpad decimal separator and update the cursor position\n if (isAlterNumPadDecimalChar) {\n var start = this.element.selectionStart + 1;\n this.element.value = text;\n this.element.setSelectionRange(start, start);\n event.preventDefault();\n event.stopPropagation();\n }\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n clearTimeout(selectionTimeOut);\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n selectionTimeOut = setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === 'touchmove') {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n this.prevValue = this.value;\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'tabindex',\n 'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n this.spinUp = null;\n this.spinDown = null;\n this.container = null;\n this.hiddenInput = null;\n this.changeEventArgs = null;\n this.blurEventArgs = null;\n this.focusEventArgs = null;\n this.inputWrapper = null;\n Input.destroy();\n _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n"],"sourceRoot":""}