{"version":3,"file":"tabb.min.js","sources":["tabb.js"],"sourcesContent":["/* eslint-disable */\r\n\r\n/**\r\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\r\n * @version v5.1.0\r\n * @link https://github.com/ten1seven/what-input\r\n * @license MIT\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n if (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = factory();\r\n else if (typeof define === 'function' && define.amd)\r\n define(\"whatInput\", [], factory);\r\n else if (typeof exports === 'object')\r\n exports[\"whatInput\"] = factory();\r\n else\r\n root[\"whatInput\"] = factory();\r\n})(this, function () {\r\n return /******/ (function (modules) { // webpackBootstrap\r\n/******/ \t// The module cache\r\n/******/ \tvar installedModules = {};\r\n\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif (installedModules[moduleId])\r\n/******/ \t\t\treturn installedModules[moduleId].exports;\r\n\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = installedModules[moduleId] = {\r\n/******/ \t\t\texports: {},\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false\r\n /******/\r\n};\r\n\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n /******/\r\n}\r\n\r\n\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = modules;\r\n\r\n/******/ \t// expose the module cache\r\n/******/ \t__webpack_require__.c = installedModules;\r\n\r\n/******/ \t// __webpack_public_path__\r\n/******/ \t__webpack_require__.p = \"\";\r\n\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __webpack_require__(0);\r\n /******/\r\n})\r\n/************************************************************************/\r\n/******/([\r\n/* 0 */\r\n/***/ (function (module, exports) {\r\n\r\n 'use strict';\r\n\r\n module.exports = function () {\r\n /*\r\n * bail out if there is no document or window\r\n * (i.e. in a node/non-DOM environment)\r\n *\r\n * Return a stubbed API instead\r\n */\r\n if (typeof document === 'undefined' || typeof window === 'undefined') {\r\n return {\r\n // always return \"initial\" because no interaction will ever be detected\r\n ask: function ask() {\r\n return 'initial';\r\n },\r\n\r\n // always return null\r\n element: function element() {\r\n return null;\r\n },\r\n\r\n // no-op\r\n ignoreKeys: function ignoreKeys() { },\r\n\r\n // no-op\r\n registerOnChange: function registerOnChange() { },\r\n\r\n // no-op\r\n unRegisterOnChange: function unRegisterOnChange() { }\r\n };\r\n }\r\n\r\n /*\r\n * variables\r\n */\r\n\r\n // cache document.documentElement\r\n var docElem = document.documentElement;\r\n\r\n // currently focused dom element\r\n var currentElement = null;\r\n\r\n // last used input type\r\n var currentInput = 'initial';\r\n\r\n // last used input intent\r\n var currentIntent = currentInput;\r\n\r\n // check for sessionStorage support\r\n // then check for session variables and use if available\r\n if (window.sessionStorage) {\r\n if (window.sessionStorage.getItem('what-input')) {\r\n currentInput = window.sessionStorage.getItem('what-input');\r\n }\r\n\r\n if (window.sessionStorage.getItem('what-intent')) {\r\n currentIntent = window.sessionStorage.getItem('what-intent');\r\n }\r\n }\r\n\r\n // event buffer timer\r\n var eventTimer = null;\r\n\r\n // form input types\r\n var formInputs = ['input', 'select', 'textarea'];\r\n\r\n // empty array for holding callback functions\r\n var functionList = [];\r\n\r\n // list of modifier keys commonly used with the mouse and\r\n // can be safely ignored to prevent false keyboard detection\r\n var ignoreMap = [16, // shift\r\n 17, // control\r\n 18, // alt\r\n 91, // Windows key / left Apple cmd\r\n 93 // Windows menu / right Apple cmd\r\n ];\r\n\r\n // mapping of events to input types\r\n var inputMap = {\r\n keydown: 'keyboard',\r\n keyup: 'keyboard',\r\n mousedown: 'mouse',\r\n mousemove: 'mouse',\r\n MSPointerDown: 'pointer',\r\n MSPointerMove: 'pointer',\r\n pointerdown: 'pointer',\r\n pointermove: 'pointer',\r\n touchstart: 'touch'\r\n\r\n // boolean: true if touch buffer is active\r\n }; var isBuffering = false;\r\n\r\n // boolean: true if the page is being scrolled\r\n var isScrolling = false;\r\n\r\n // store current mouse position\r\n var mousePos = {\r\n x: null,\r\n y: null\r\n\r\n // map of IE 10 pointer events\r\n }; var pointerMap = {\r\n 2: 'touch',\r\n 3: 'touch', // treat pen like touch\r\n 4: 'mouse'\r\n\r\n // check support for passive event listeners\r\n }; var supportsPassive = false;\r\n\r\n try {\r\n var opts = Object.defineProperty({}, 'passive', {\r\n get: function get() {\r\n supportsPassive = true;\r\n }\r\n });\r\n\r\n window.addEventListener('test', null, opts);\r\n } catch (e) { }\r\n\r\n /*\r\n * set up\r\n */\r\n\r\n var setUp = function setUp() {\r\n // add correct mouse wheel event mapping to `inputMap`\r\n inputMap[detectWheel()] = 'mouse';\r\n\r\n addListeners();\r\n doUpdate('input');\r\n doUpdate('intent');\r\n };\r\n\r\n /*\r\n * events\r\n */\r\n\r\n var addListeners = function addListeners() {\r\n // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\r\n // can only demonstrate potential, but not actual, interaction\r\n // and are treated separately\r\n var options = supportsPassive ? { passive: true } : false;\r\n\r\n // pointer events (mouse, pen, touch)\r\n if (window.PointerEvent) {\r\n window.addEventListener('pointerdown', setInput);\r\n window.addEventListener('pointermove', setIntent);\r\n } else if (window.MSPointerEvent) {\r\n window.addEventListener('MSPointerDown', setInput);\r\n window.addEventListener('MSPointerMove', setIntent);\r\n } else {\r\n // mouse events\r\n window.addEventListener('mousedown', setInput);\r\n window.addEventListener('mousemove', setIntent);\r\n\r\n // touch events\r\n if ('ontouchstart' in window) {\r\n window.addEventListener('touchstart', eventBuffer, options);\r\n window.addEventListener('touchend', setInput);\r\n }\r\n }\r\n\r\n // mouse wheel\r\n window.addEventListener(detectWheel(), setIntent, options);\r\n\r\n // keyboard events\r\n window.addEventListener('keydown', eventBuffer);\r\n window.addEventListener('keyup', eventBuffer);\r\n\r\n // focus events\r\n window.addEventListener('focusin', setElement);\r\n window.addEventListener('focusout', clearElement);\r\n };\r\n\r\n // checks conditions before updating new input\r\n var setInput = function setInput(event) {\r\n // only execute if the event buffer timer isn't running\r\n if (!isBuffering) {\r\n var eventKey = event.which;\r\n var value = inputMap[event.type];\r\n\r\n if (value === 'pointer') {\r\n value = pointerType(event);\r\n }\r\n\r\n var shouldUpdate = value === 'keyboard' && eventKey && ignoreMap.indexOf(eventKey) === -1 || value === 'mouse' || value === 'touch';\r\n\r\n if (currentInput !== value && shouldUpdate) {\r\n currentInput = value;\r\n\r\n if (window.sessionStorage) {\r\n window.sessionStorage.setItem('what-input', currentInput);\r\n }\r\n\r\n doUpdate('input');\r\n }\r\n\r\n if (currentIntent !== value && shouldUpdate) {\r\n // preserve intent for keyboard typing in form fields\r\n var activeElem = document.activeElement;\r\n var notFormInput = activeElem && activeElem.nodeName && formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1;\r\n\r\n if (notFormInput) {\r\n currentIntent = value;\r\n\r\n if (window.sessionStorage) {\r\n window.sessionStorage.setItem('what-intent', currentIntent);\r\n }\r\n\r\n doUpdate('intent');\r\n }\r\n }\r\n }\r\n };\r\n\r\n // updates the doc and `inputTypes` array with new input\r\n var doUpdate = function doUpdate(which) {\r\n docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\r\n\r\n fireFunctions(which);\r\n };\r\n\r\n // updates input intent for `mousemove` and `pointermove`\r\n var setIntent = function setIntent(event) {\r\n // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\r\n detectScrolling(event);\r\n\r\n // only execute if the event buffer timer isn't running\r\n // or scrolling isn't happening\r\n if (!isBuffering && !isScrolling) {\r\n var value = inputMap[event.type];\r\n if (value === 'pointer') {\r\n value = pointerType(event);\r\n }\r\n\r\n if (currentIntent !== value) {\r\n currentIntent = value;\r\n\r\n if (window.sessionStorage) {\r\n window.sessionStorage.setItem('what-intent', currentIntent);\r\n }\r\n\r\n doUpdate('intent');\r\n }\r\n }\r\n };\r\n\r\n var setElement = function setElement(event) {\r\n if (!event.target.nodeName) {\r\n // If nodeName is undefined, clear the element\r\n // This can happen if click inside an element.\r\n clearElement();\r\n return;\r\n }\r\n\r\n currentElement = event.target.nodeName.toLowerCase();\r\n docElem.setAttribute('data-whatelement', currentElement);\r\n\r\n if (event.target.classList && event.target.classList.length) {\r\n docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\r\n }\r\n };\r\n\r\n var clearElement = function clearElement() {\r\n currentElement = null;\r\n\r\n docElem.removeAttribute('data-whatelement');\r\n docElem.removeAttribute('data-whatclasses');\r\n };\r\n\r\n // buffers events that frequently also fire mouse events\r\n var eventBuffer = function eventBuffer(event) {\r\n // set the current input\r\n setInput(event);\r\n\r\n // clear the timer if it happens to be running\r\n window.clearTimeout(eventTimer);\r\n\r\n // set the isBuffering to `true`\r\n isBuffering = true;\r\n\r\n // run the timer\r\n eventTimer = window.setTimeout(function () {\r\n // if the timer runs out, set isBuffering back to `false`\r\n isBuffering = false;\r\n }, 100);\r\n };\r\n\r\n /*\r\n * utilities\r\n */\r\n\r\n var pointerType = function pointerType(event) {\r\n if (typeof event.pointerType === 'number') {\r\n return pointerMap[event.pointerType];\r\n } else {\r\n // treat pen like touch\r\n return event.pointerType === 'pen' ? 'touch' : event.pointerType;\r\n }\r\n };\r\n\r\n // detect version of mouse wheel event to use\r\n // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r\n var detectWheel = function detectWheel() {\r\n var wheelType = void 0;\r\n\r\n // Modern browsers support \"wheel\"\r\n if ('onwheel' in document.createElement('div')) {\r\n wheelType = 'wheel';\r\n } else {\r\n // Webkit and IE support at least \"mousewheel\"\r\n // or assume that remaining browsers are older Firefox\r\n wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n }\r\n\r\n return wheelType;\r\n };\r\n\r\n // runs callback functions\r\n var fireFunctions = function fireFunctions(type) {\r\n for (var i = 0, len = functionList.length; i < len; i++) {\r\n if (functionList[i].type === type) {\r\n functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\r\n }\r\n }\r\n };\r\n\r\n // finds matching element in an object\r\n var objPos = function objPos(match) {\r\n for (var i = 0, len = functionList.length; i < len; i++) {\r\n if (functionList[i].fn === match) {\r\n return i;\r\n }\r\n }\r\n };\r\n\r\n var detectScrolling = function detectScrolling(event) {\r\n if (mousePos['x'] !== event.screenX || mousePos['y'] !== event.screenY) {\r\n isScrolling = false;\r\n\r\n mousePos['x'] = event.screenX;\r\n mousePos['y'] = event.screenY;\r\n } else {\r\n isScrolling = true;\r\n }\r\n };\r\n\r\n /*\r\n * init\r\n */\r\n\r\n // don't start script unless browser cuts the mustard\r\n // (also passes if polyfills are used)\r\n if ('addEventListener' in window && Array.prototype.indexOf) {\r\n setUp();\r\n }\r\n\r\n /*\r\n * api\r\n */\r\n\r\n return {\r\n // returns string: the current input type\r\n // opt: 'intent'|'input'\r\n // 'input' (default): returns the same value as the `data-whatinput` attribute\r\n // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\r\n ask: function ask(opt) {\r\n return opt === 'intent' ? currentIntent : currentInput;\r\n },\r\n\r\n // returns string: the currently focused element or null\r\n element: function element() {\r\n return currentElement;\r\n },\r\n\r\n // overwrites ignored keys with provided array\r\n ignoreKeys: function ignoreKeys(arr) {\r\n ignoreMap = arr;\r\n },\r\n\r\n // attach functions to input and intent \"events\"\r\n // funct: function to fire on change\r\n // eventType: 'input'|'intent'\r\n registerOnChange: function registerOnChange(fn, eventType) {\r\n functionList.push({\r\n fn: fn,\r\n type: eventType || 'input'\r\n });\r\n },\r\n\r\n unRegisterOnChange: function unRegisterOnChange(fn) {\r\n var position = objPos(fn);\r\n\r\n if (position || position === 0) {\r\n functionList.splice(position, 1);\r\n }\r\n }\r\n };\r\n }();\r\n\r\n /***/\r\n})\r\n/******/])\r\n});\r\n;\r\n\r\n/* eslint-enable */\r\n"],"names":["root","factory","exports","module","define","amd","this","modules","document","window","ask","element","ignoreKeys","registerOnChange","unRegisterOnChange","docElem","documentElement","currentElement","currentInput","currentIntent","eventTimer","sessionStorage","getItem","formInputs","functionList","ignoreMap","inputMap","keydown","keyup","mousedown","mousemove","MSPointerDown","MSPointerMove","pointerdown","pointermove","touchstart","isBuffering","isScrolling","mousePos","x","y","pointerMap","2","3","4","supportsPassive","opts","Object","defineProperty","get","addEventListener","e","addListeners","options","passive","PointerEvent","setInput","setIntent","MSPointerEvent","eventBuffer","detectWheel","setElement","clearElement","doUpdate","which","setAttribute","fireFunctions","pointerType","event","detectScrolling","screenX","screenY","value","activeElem","eventKey","shouldUpdate","type","indexOf","setItem","activeElement","nodeName","toLowerCase","target","classList","length","toString","replace","removeAttribute","clearTimeout","setTimeout","createElement","undefined","onmousewheel","i","len","fn","call","Array","prototype","opt","arr","eventType","push","position","match","splice","installedModules","__webpack_require__","m","c","p","moduleId","id","loaded"],"mappings":"AAQA,CAAA,SAA2CA,EAAMC,GACtB,UAAnB,OAAOC,SAA0C,UAAlB,OAAOC,OACtCA,OAAOD,QAAUD,EAAQ,EACF,YAAlB,OAAOG,QAAyBA,OAAOC,IAC5CD,OAAO,YAAa,GAAIH,CAAO,EACP,UAAnB,OAAOC,QACZA,QAAmB,UAAID,EAAQ,EAE/BD,EAAgB,UAAIC,EAAQ,CACnC,EAAEK,KAAM,WACL,OAA2BC,EA6CtB,CAEH,SAAWJ,EAAQD,GAET,aAEAC,EAAOD,QAAU,WAOb,GAAwB,aAApB,OAAOM,UAA8C,aAAlB,OAAOC,OAC1C,MAAO,CAEHC,IAAK,WACD,MAAO,SACX,EAGAC,QAAS,WACL,OAAO,IACX,EAGAC,WAAY,aAGZC,iBAAkB,aAGlBC,mBAAoB,YACxB,EAQJ,IAAIC,EAAUP,SAASQ,gBAGnBC,EAAiB,KAGjBC,EAAe,UAGfC,EAAgBD,EAehBE,GAXAX,OAAOY,iBACHZ,OAAOY,eAAeC,QAAQ,YAAY,IAC1CJ,EAAeT,OAAOY,eAAeC,QAAQ,YAAY,GAGzDb,OAAOY,eAAeC,QAAQ,aAAa,KAC3CH,EAAgBV,OAAOY,eAAeC,QAAQ,aAAa,GAKlD,MAGbC,EAAa,CAAC,QAAS,SAAU,YAGjCC,EAAe,GAIfC,EAAY,CAAC,GACb,GACA,GACA,GACA,IAIAC,EAAW,CACXC,QAAS,WACTC,MAAO,WACPC,UAAW,QACXC,UAAW,QACXC,cAAe,UACfC,cAAe,UACfC,YAAa,UACbC,YAAa,UACbC,WAAY,OAGhB,EAAOC,EAAc,CAAA,EAGjBC,EAAc,CAAA,EAGdC,EAAW,CACXC,EAAG,KACHC,EAAG,IAGP,EAAOC,EAAa,CAChBC,EAAG,QACHC,EAAG,QACHC,EAAG,OAGP,EAAOC,EAAkB,CAAA,EAEzB,IACI,IAAIC,EAAOC,OAAOC,eAAe,GAAI,UAAW,CAC5CC,IAAK,WACDJ,EAAkB,CAAA,CACtB,CACJ,CAAC,EAEDpC,OAAOyC,iBAAiB,OAAQ,KAAMJ,CAAI,CAChC,CAAZ,MAAOK,IAmBU,SAAfC,IAIA,IAAIC,EAAUR,CAAAA,CAAAA,GAAkB,CAAES,QAAS,CAAA,CAAK,EAG5C7C,OAAO8C,cACP9C,OAAOyC,iBAAiB,cAAeM,CAAQ,EAC/C/C,OAAOyC,iBAAiB,cAAeO,CAAS,GACzChD,OAAOiD,gBACdjD,OAAOyC,iBAAiB,gBAAiBM,CAAQ,EACjD/C,OAAOyC,iBAAiB,gBAAiBO,CAAS,IAGlDhD,OAAOyC,iBAAiB,YAAaM,CAAQ,EAC7C/C,OAAOyC,iBAAiB,YAAaO,CAAS,EAG1C,iBAAkBhD,SAClBA,OAAOyC,iBAAiB,aAAcS,EAAaN,CAAO,EAC1D5C,OAAOyC,iBAAiB,WAAYM,CAAQ,IAKpD/C,OAAOyC,iBAAiBU,EAAY,EAAGH,EAAWJ,CAAO,EAGzD5C,OAAOyC,iBAAiB,UAAWS,CAAW,EAC9ClD,OAAOyC,iBAAiB,QAASS,CAAW,EAG5ClD,OAAOyC,iBAAiB,UAAWW,CAAU,EAC7CpD,OAAOyC,iBAAiB,WAAYY,CAAY,CACpD,CA4Ce,SAAXC,EAA6BC,GAC7BjD,EAAQkD,aAAa,YAAcD,EAAiB,UAAVA,EAAoB9C,EAAeC,CAAa,EAE1F+C,EAAcF,CAAK,CACvB,CAwEkB,SAAdG,EAAmCC,GACnC,MAAiC,UAA7B,OAAOA,EAAMD,YACN1B,EAAW2B,EAAMD,aAGK,QAAtBC,EAAMD,YAAwB,QAAUC,EAAMD,WAE7D,CAqCsB,SAAlBE,EAA2CD,GACvC9B,EAAY,IAAM8B,EAAME,SAAWhC,EAAY,IAAM8B,EAAMG,SAC3DlC,EAAc,CAAA,EAEdC,EAAY,EAAI8B,EAAME,QACtBhC,EAAY,EAAI8B,EAAMG,SAEtBlC,EAAc,CAAA,CAEtB,CA7NA,IAmDImB,EAAW,SAAkBY,GAE7B,IAEQI,EAoBIC,EAtBPrC,IACGsC,EAAWN,EAAMJ,MAOjBW,EAAyB,cAHzBH,EADU,aAFVA,EAAQ9C,EAAS0C,EAAMQ,OAGfT,EAAYC,CAAK,EAGVI,IAAwBE,GAA4C,CAAC,IAAjCjD,EAAUoD,QAAQH,CAAQ,GAAsB,UAAVF,GAA+B,UAAVA,EAE9GtD,IAAiBsD,GAASG,IAC1BzD,EAAesD,EAEX/D,OAAOY,gBACPZ,OAAOY,eAAeyD,QAAQ,aAAc5D,CAAY,EAG5D6C,EAAS,OAAO,GAGhB5C,IAAkBqD,GAASG,IAEvBF,EAAajE,SAASuE,gBACON,EAAWO,UAAsE,CAAC,IAA3DzD,EAAWsD,QAAQJ,EAAWO,SAASC,YAAY,CAAC,IAGxG9D,EAAgBqD,EAEZ/D,OAAOY,gBACPZ,OAAOY,eAAeyD,QAAQ,cAAe3D,CAAa,EAG9D4C,EAAS,QAAQ,GAIjC,EAUIN,EAAY,SAAmBW,GAM/B,IACQI,EALRH,EAAgBD,CAAK,EAIhBhC,GAAgBC,IAEH,aADVmC,EAAQ9C,EAAS0C,EAAMQ,SAEvBJ,EAAQL,EAAYC,CAAK,GAGzBjD,IAAkBqD,IAClBrD,EAAgBqD,EAEZ/D,OAAOY,gBACPZ,OAAOY,eAAeyD,QAAQ,cAAe3D,CAAa,EAG9D4C,EAAS,QAAQ,GAG7B,EAEIF,EAAa,SAAoBO,GAC5BA,EAAMc,OAAOF,UAOlB/D,EAAiBmD,EAAMc,OAAOF,SAASC,YAAY,EACnDlE,EAAQkD,aAAa,mBAAoBhD,CAAc,EAEnDmD,EAAMc,OAAOC,WAAaf,EAAMc,OAAOC,UAAUC,QACjDrE,EAAQkD,aAAa,mBAAoBG,EAAMc,OAAOC,UAAUE,SAAS,EAAEC,QAAQ,IAAK,GAAG,CAAC,GAR5FxB,EAAa,CAUrB,EAEIA,EAAe,WACf7C,EAAiB,KAEjBF,EAAQwE,gBAAgB,kBAAkB,EAC1CxE,EAAQwE,gBAAgB,kBAAkB,CAC9C,EAGI5B,EAAc,SAAqBS,GAEnCZ,EAASY,CAAK,EAGd3D,OAAO+E,aAAapE,CAAU,EAG9BgB,EAAc,CAAA,EAGdhB,EAAaX,OAAOgF,WAAW,WAE3BrD,EAAc,CAAA,CAClB,EAAG,GAAG,CACV,EAiBIwB,EAAc,WAYd,MARI,YAAapD,SAASkF,cAAc,KAAK,EAC7B,QAI0BC,KAAAA,IAA1BnF,SAASoF,aAA6B,aAAe,gBAIzE,EAGI1B,EAAgB,SAAuBU,GACvC,IAAK,IAAIiB,EAAI,EAAGC,EAAMtE,EAAa4D,OAAQS,EAAIC,EAAKD,CAAC,GAC7CrE,EAAaqE,GAAGjB,OAASA,GACzBpD,EAAaqE,GAAGE,GAAGC,KAAKL,KAAAA,EAAoB,UAATf,EAAmB1D,EAAeC,CAAa,CAG9F,EAoCA,MARI,qBAAsBV,QAAUwF,MAAMC,UAAUrB,UAnOhDnD,EAASkC,EAAY,GAAK,QAE1BR,EAAa,EACbW,EAAS,OAAO,EAChBA,EAAS,QAAQ,GAuOd,CAKHrD,IAAK,SAAayF,GACd,MAAe,WAARA,EAAmBhF,EAAgBD,CAC9C,EAGAP,QAAS,WACL,OAAOM,CACX,EAGAL,WAAY,SAAoBwF,GAC5B3E,EAAY2E,CAChB,EAKAvF,iBAAkB,SAA0BkF,EAAIM,GAC5C7E,EAAa8E,KAAK,CACdP,GAAIA,EACJnB,KAAMyB,GAAa,OACvB,CAAC,CACL,EAEAvF,mBAAoB,SAA4BiF,GACxCQ,EA/DC,SAAgBC,GACzB,IAAK,IAAIX,EAAI,EAAGC,EAAMtE,EAAa4D,OAAQS,EAAIC,EAAKD,CAAC,GACjD,GAAIrE,EAAaqE,GAAGE,KAAOS,EACvB,OAAOX,CAGnB,EAyD8BE,CAAE,EAEpBQ,CAAAA,GAAyB,IAAbA,GACZ/E,EAAaiF,OAAOF,EAAU,CAAC,CAEvC,CACJ,CACJ,EAAE,CAGjB,GAhcaG,EAAmB,GA8BvBC,EAAoBC,EAAIrG,EAGxBoG,EAAoBE,EAAIH,EAGxBC,EAAoBG,EAAI,GAGjBH,EAAoB,CAAC,EApC5B,SAASA,EAAoBI,GAG5B,IAII5G,EAJJ,OAAIuG,EAAiBK,KAIjB5G,EAASuG,EAAiBK,GAAY,CACzC7G,QAAS,GACT8G,GAAID,EACJE,OAAQ,CAAA,CAEpB,EAGW1G,EAAQwG,GAAUf,KAAK7F,EAAOD,QAASC,EAAQA,EAAOD,QAASyG,CAAmB,EAGlFxG,EAAO8G,OAAS,CAAA,EAGT9G,IAjB4BD,OAmB9C,CA5BoB,IAAWK,EAEjBmG,CAkcd,CAAC"}