UNPKG

27.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"persist.js","sources":["../src/browser.js","../src/consts.js","../src/storageManager.js","../src/utils.js","../src/Persist.js","../src/index.umd.js"],"sourcesContent":["const win = (typeof window !== `undefined` && window) || {};\n\nexport {win as window};\nexport const console = win.console;\nexport const document = win.document;\nexport const history = win.history;\nexport const location = win.location;\nexport const navigator = win.navigator;\nexport const parseFloat = win.parseFloat;\nexport const performance = win.performance;\n\nlet localStorage = null;\n\nlet sessionStorage = null;\n\ntry {\n\tlocalStorage = win.localStorage;\n\tsessionStorage = win.sessionStorage;\n} catch (e) {\n}\n\nexport {\n\tlocalStorage,\n\tsessionStorage,\n};\n","import {performance} from \"./browser\";\n\nexport const CONST_PERSIST = \"___persist___\";\nexport const CONST_PERSIST_STATE = `state${CONST_PERSIST}`;\nexport const CONST_DEPTHS = \"depths\";\nexport const CONST_LAST_URL = \"lastUrl\";\nconst navigation = performance && performance.navigation;\n\nexport const TYPE_NAVIGATE = (navigation && navigation.TYPE_NAVIGATE) || 0;\nexport const TYPE_RELOAD = (navigation && navigation.TYPE_RELOAD) || 1;\nexport const TYPE_BACK_FORWARD = (navigation && navigation.TYPE_BACK_FORWARD) || 2;\n","import {window, history, location, sessionStorage, localStorage} from \"./browser\";\nimport {CONST_PERSIST} from \"./consts\";\n\nconst isSupportState = history && \"replaceState\" in history && \"state\" in history;\n\nfunction isStorageAvailable(storage) {\n\tif (!storage) {\n\t\treturn undefined;\n\t}\n\tconst TMP_KEY = `__tmp__${CONST_PERSIST}`;\n\n\ttry {\n\t\t// In case of iOS safari private mode, calling setItem on storage throws error\n\t\tstorage.setItem(TMP_KEY, CONST_PERSIST);\n\n\t\t// In Chrome incognito mode, can not get saved value\n\t\t// In IE8, calling storage.getItem occasionally makes \"Permission denied\" error\n\t\treturn storage.getItem(TMP_KEY) === CONST_PERSIST;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\nconst storage = (function() {\n\tlet strg;\n\n\tif (isStorageAvailable(sessionStorage)) {\n\t\tstrg = sessionStorage;\n\t} else if (isStorageAvailable(localStorage)) {\n\t\tstrg = localStorage;\n\t}\n\n\treturn strg;\n})();\n\nfunction warnInvalidStorageValue() {\n\t/* eslint-disable no-console */\n\tconsole.warn(\"window.history or session/localStorage has no valid \" +\n\t\t\t\"format data to be handled in persist.\");\n\t/* eslint-enable no-console */\n}\n\nfunction getStorage() {\n\treturn storage;\n}\n\n/*\n * Get state value\n */\nfunction getState(key) {\n\tlet state;\n\n\tlet stateStr;\n\n\tif (storage) {\n\t\tstateStr = storage.getItem(key);\n\t} else if (history.state) {\n\t\tif (typeof history.state === \"object\" && history.state !== null) {\n\t\t\tstateStr = history.state[key];\n\t\t} else {\n\t\t\twarnInvalidStorageValue();\n\t\t}\n\t} else {\n\t\tstateStr = history.state;\n\t}\n\n\t// the storage is clean\n\tif (stateStr === null) {\n\t\treturn {};\n\t}\n\n\t// \"null\" is not a valid\n\tconst isValidStateStr = typeof stateStr === \"string\" &&\n\t\t\t\t\t\t\t\tstateStr.length > 0 && stateStr !== \"null\";\n\n\ttry {\n\t\tstate = JSON.parse(stateStr);\n\n\t\t// like '[ ... ]', '1', '1.234', '\"123\"' is also not valid\n\t\tconst isValidType = !(typeof state !== \"object\" || state instanceof Array);\n\n\t\tif (!isValidStateStr || !isValidType) {\n\t\t\tthrow new Error();\n\t\t}\n\t} catch (e) {\n\t\twarnInvalidStorageValue();\n\t\tstate = {};\n\t}\n\n\t// Note2 (Android 4.3) return value is null\n\treturn state;\n}\n\nfunction getStateByKey(key, valueKey) {\n\tif (!isSupportState && !storage) {\n\t\treturn undefined;\n\t}\n\n\tlet result = getState(key)[valueKey];\n\n\t// some device returns \"null\" or undefined\n\tif (result === \"null\" || typeof result === \"undefined\") {\n\t\tresult = null;\n\t}\n\treturn result;\n}\n\n/*\n * Set state value\n */\nfunction setState(key, state) {\n\tif (storage) {\n\t\tif (state) {\n\t\t\tstorage.setItem(\n\t\t\t\tkey, JSON.stringify(state));\n\t\t} else {\n\t\t\tstorage.removeItem(key);\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tconst historyState = !history || history.state == null ? {} : history.state;\n\n\t\t\tif (history && typeof historyState === \"object\") {\n\t\t\t\thistoryState[key] = JSON.stringify(state);\n\t\t\t\thistory.replaceState(\n\t\t\t\t\thistoryState,\n\t\t\t\t\tdocument.title,\n\t\t\t\t\tlocation.href\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t/* eslint-disable no-console */\n\t\t\t\tconsole.warn(\"To use a history object, it must be an object that is not a primitive type.\");\n\t\t\t\t/* eslint-enable no-console */\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t/* eslint-disable no-console */\n\t\t\tconsole.warn(e.message);\n\t\t\t/* eslint-enable no-console */\n\t\t}\n\t}\n\n\tstate ? window[CONST_PERSIST] = true : delete window[CONST_PERSIST];\n}\n\nfunction setStateByKey(key, valueKey, data) {\n\tif (!isSupportState && !storage) {\n\t\treturn;\n\t}\n\n\tconst beforeData = getState(key);\n\n\tbeforeData[valueKey] = data;\n\tsetState(key, beforeData);\n}\n\n/*\n * flush current history state\n */\nfunction reset(key) {\n\tsetState(key, null);\n}\n\nexport {\n\treset,\n\tsetStateByKey,\n\tgetStateByKey,\n\tgetStorage,\n};\n","import {navigator, parseFloat, performance, location} from \"./browser\";\nimport {CONST_PERSIST} from \"./consts\";\n\nconst userAgent = navigator ? navigator.userAgent : \"\";\n\nconst isNeeded = (function() {\n\tconst isIOS = (new RegExp(\"iPhone|iPad\", \"i\")).test(userAgent);\n\tconst isMacSafari = (new RegExp(\"Mac\", \"i\")).test(userAgent) &&\n\t\t!(new RegExp(\"Chrome\", \"i\")).test(userAgent) &&\n\t\t(new RegExp(\"Apple\", \"i\")).test(userAgent);\n\tconst isAndroid = (new RegExp(\"Android \", \"i\")).test(userAgent);\n\tconst isWebview = (new RegExp(\"wv; |inapp;\", \"i\")).test(userAgent);\n\tconst androidVersion = isAndroid ? parseFloat(new RegExp(\n\t\t\"(Android)\\\\s([\\\\d_\\\\.]+|\\\\d_0)\", \"i\"\n\t).exec(userAgent)[2]) : undefined;\n\n\treturn !(isIOS ||\n\t\t\tisMacSafari ||\n\t\t\t(isAndroid &&\n\t\t\t\t((androidVersion <= 4.3 && isWebview) || androidVersion < 3)));\n})();\n\n// In case of IE8, TYPE_BACK_FORWARD is undefined.\nfunction getNavigationType() {\n\treturn performance && performance.navigation &&\n\t\tperformance.navigation.type;\n}\nfunction getUrl() {\n\treturn location ? location.href.split(\"#\")[0] : \"\";\n}\nfunction getStorageKey(name) {\n\treturn name + CONST_PERSIST;\n}\n\nexport {\n\tgetUrl,\n\tgetStorageKey,\n\tgetNavigationType,\n\tisNeeded,\n};\n","/* eslint-disable no-use-before-define */\nimport {\n\treset,\n\tsetStateByKey,\n\tgetStateByKey,\n\tgetStorage,\n} from \"./storageManager\";\nimport {isNeeded, getUrl, getStorageKey, getNavigationType} from \"./utils\";\nimport {console, window} from \"./browser\";\nimport {TYPE_BACK_FORWARD, TYPE_NAVIGATE, CONST_PERSIST_STATE, CONST_DEPTHS, CONST_LAST_URL} from \"./consts\";\n\nlet currentUrl = \"\";\n\n\nfunction execRec(obj, path, func) {\n\tlet _obj = obj;\n\n\tif (!_obj) {\n\t\t_obj = isNaN(path[0]) ? {} : [];\n\t}\n\n\tconst head = path.shift();\n\n\tif (path.length === 0) {\n\t\tif (_obj instanceof Array && isNaN(head)) {\n\t\t\tconsole.warn(\"Don't use key string on array\");\n\t\t}\n\t\tfunc(_obj, head);\n\t\treturn _obj;\n\t}\n\n\t_obj[head] = execRec(_obj[head], path, func);\n\treturn _obj;\n}\n\nfunction setPersistState(key, value) {\n\ttry {\n\t\tsetStateByKey(CONST_PERSIST_STATE, key, value);\n\t} catch (e) {\n\t\tif (clearFirst()) {\n\t\t\tif (key === CONST_LAST_URL) {\n\t\t\t\tsetPersistState(key, value);\n\t\t\t} else if (key === CONST_DEPTHS) {\n\t\t\t\tsetPersistState(key, value && value.slice(1));\n\t\t\t}\n\t\t} else {\n\t\t\t// There is no more size to fit in.\n\t\t\tthrow e;\n\t\t}\n\t}\n}\nfunction getPersistState(key) {\n\treturn getStateByKey(CONST_PERSIST_STATE, key);\n}\nfunction updateDepth(type = 0) {\n\tconst url = getUrl();\n\n\tif (currentUrl === url) {\n\t\treturn;\n\t}\n\t// url is not the same for the first time, pushState, or replaceState.\n\tcurrentUrl = url;\n\tconst depths = getPersistState(CONST_DEPTHS) || [];\n\n\tif (type === TYPE_BACK_FORWARD) {\n\t\t// Change current url only\n\t\tconst currentIndex = depths.indexOf(currentUrl);\n\n\t\t~currentIndex && setPersistState(CONST_LAST_URL, currentUrl);\n\t} else {\n\t\tconst prevLastUrl = getPersistState(CONST_LAST_URL);\n\n\t\treset(getStorageKey(currentUrl));\n\n\t\tif (type === TYPE_NAVIGATE && url !== prevLastUrl) {\n\t\t\t// Remove all url lists with higher index than current index\n\t\t\tconst prevLastIndex = depths.indexOf(prevLastUrl);\n\t\t\tconst removedList = depths.splice(prevLastIndex + 1, depths.length);\n\n\t\t\tremovedList.forEach(removedUrl => {\n\t\t\t\treset(getStorageKey(removedUrl));\n\t\t\t});\n\t\t\t// If the type is NAVIGATE and there is information about current url, delete it.\n\t\t\tconst currentIndex = depths.indexOf(currentUrl);\n\n\t\t\t~currentIndex && depths.splice(currentIndex, 1);\n\t\t}\n\t\t// Add depth for new address.\n\t\tif (depths.indexOf(url) < 0) {\n\t\t\tdepths.push(url);\n\t\t}\n\t\tsetPersistState(CONST_DEPTHS, depths);\n\t\tsetPersistState(CONST_LAST_URL, url);\n\t}\n}\n\nfunction clearFirst() {\n\tconst depths = getPersistState(CONST_DEPTHS) || [];\n\tconst removed = depths.splice(0, 1);\n\n\tif (!removed.length) {\n\t\t// There is an error because there is no depth to add data.\n\t\treturn false;\n\t}\n\tconst removedUrl = removed[0];\n\n\treset(getStorageKey(removedUrl));\n\tif (currentUrl === removedUrl) {\n\t\tcurrentUrl = \"\";\n\t\tsetPersistState(CONST_LAST_URL, \"\");\n\t\tif (!depths.length) {\n\t\t\t// I tried to add myself, but it didn't add up, so I got an error.\n\t\t\treturn false;\n\t\t}\n\t}\n\tsetPersistState(CONST_DEPTHS, depths);\n\t// Clear the previous record and try to add data again.\n\treturn true;\n}\nfunction clear() {\n\tconst depths = getPersistState(CONST_DEPTHS) || [];\n\n\tdepths.forEach(url => {\n\t\treset(getStorageKey(url));\n\t});\n\n\treset(CONST_PERSIST_STATE);\n\n\tcurrentUrl = \"\";\n}\nif (\"onpopstate\" in window) {\n\twindow.addEventListener(\"popstate\", () => {\n\t\t// popstate event occurs when backward or forward\n\t\tupdateDepth(TYPE_BACK_FORWARD);\n\t});\n}\n\n/**\n * Get or store the current state of the web page using JSON.\n * @ko 웹 페이지의 현재 상태를 JSON 형식으로 저장하거나 읽는다.\n * @alias eg.Persist\n *\n * @support {\"ie\": \"9+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\" , \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.3+ (except 3.x)\"}\n */\nclass Persist {\n\tstatic VERSION = \"#__VERSION__#\";\n\tstatic StorageManager = {\n\t\treset,\n\t\tsetStateByKey,\n\t\tgetStateByKey,\n\t\tgetStorage,\n\t};\n\t/**\n\t * @static\n\t * Clear all information in Persist\n\t */\n\tstatic clear() {\n\t\tclear();\n\t}\n\t/**\n\t * @static\n\t * Return whether you need \"Persist\" module by checking the bfCache support of the current browser\n\t * @return {Boolean}\n\t */\n\tstatic isNeeded() {\n\t\treturn isNeeded;\n\t}\n\t/**\n\t* Constructor\n\t* @param {String} key The key of the state information to be stored <ko>저장할 상태 정보의 키</ko>\n\t**/\n\tconstructor(key) {\n\t\tthis.key = key || \"\";\n\t}\n\n\t/**\n\t * Read value\n\t * @param {String?} path target path\n\t * @return {String|Number|Boolean|Object|Array}\n\t */\n\tget(path) {\n\t\t// update url for pushState, replaceState\n\t\tupdateDepth(TYPE_NAVIGATE);\n\n\t\t// find path\n\t\tconst urlKey = getStorageKey(getUrl());\n\t\tconst globalState =\tgetStateByKey(urlKey, this.key);\n\n\n\t\tif (!path || path.length === 0) {\n\t\t\treturn globalState;\n\t\t}\n\n\t\tconst pathToken = path.split(\".\");\n\n\t\tlet currentItem = globalState;\n\n\t\tlet isTargetExist = true;\n\n\t\tfor (let i = 0; i < pathToken.length; i++) {\n\t\t\tif (!currentItem) {\n\t\t\t\tisTargetExist = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrentItem = currentItem[pathToken[i]];\n\t\t}\n\t\tif (!isTargetExist || currentItem == null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn currentItem;\n\t}\n\t/**\n\t * Save value\n\t * @param {String} path target path\n\t * @param {String|Number|Boolean|Object|Array} value value to save\n\t * @return {Persist}\n\t */\n\tset(path, value) {\n\t\t// update url for pushState, replaceState\n\t\tupdateDepth(TYPE_NAVIGATE);\n\t\t// find path\n\t\tconst key = this.key;\n\t\tconst urlKey = getStorageKey(getUrl());\n\t\tconst globalState =\tgetStateByKey(urlKey, key);\n\n\t\ttry {\n\t\t\tif (path.length === 0) {\n\t\t\t\tsetStateByKey(urlKey, key, value);\n\t\t\t} else {\n\t\t\t\tconst allValue = execRec(globalState, path.split(\".\"), (obj, head) => {\n\t\t\t\t\tobj[head] = value;\n\t\t\t\t});\n\n\t\t\t\tsetStateByKey(\n\t\t\t\t\turlKey,\n\t\t\t\t\tkey,\n\t\t\t\t\tallValue\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (clearFirst(e)) {\n\t\t\t\tthis.set(path, value);\n\t\t\t} else {\n\t\t\t\t// There is no more size to fit in.\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Remove value\n\t * @param {String} path target path\n\t * @return {Persist}\n\t */\n\tremove(path) {\n\t\t// update url for pushState, replaceState\n\t\tupdateDepth(TYPE_NAVIGATE);\n\n\t\t// find path\n\t\tconst key = this.key;\n\t\tconst urlKey = getStorageKey(getUrl());\n\t\tconst globalState =\tgetStateByKey(urlKey, key);\n\n\t\ttry {\n\t\t\tif (path.length === 0) {\n\t\t\t\tsetStateByKey(urlKey, key, null);\n\t\t\t} else {\n\t\t\t\tconst value = execRec(globalState, path.split(\".\"), (obj, head) => {\n\t\t\t\t\tif (typeof obj === \"object\") {\n\t\t\t\t\t\tdelete obj[head];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tsetStateByKey(\n\t\t\t\t\turlKey,\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (clearFirst(e)) {\n\t\t\t\tthis.remove(path);\n\t\t\t} else {\n\t\t\t\t// There is no more size to fit in.\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}\n\n// If navigation's type is not TYPE_BACK_FORWARD, delete information about current url.\nupdateDepth(getNavigationType());\n\nexport {\n\tupdateDepth,\n};\n\nexport default Persist;\n","import Persist, {updateDepth} from \"./Persist\";\n\n// eslint-disable-next-line import/no-named-as-default-member\nPersist.updateDepth = updateDepth;\n\nexport default Persist;\n"],"names":["win","window","console","document","history","location","navigator","parseFloat","performance","localStorage","sessionStorage","e","CONST_PERSIST","CONST_PERSIST_STATE","CONST_DEPTHS","CONST_LAST_URL","navigation","TYPE_NAVIGATE","TYPE_RELOAD","TYPE_BACK_FORWARD","isSupportState","isStorageAvailable","storage","undefined","TMP_KEY","setItem","getItem","strg","warnInvalidStorageValue","warn","getStorage","getState","key","state","stateStr","isValidStateStr","length","JSON","parse","isValidType","Array","Error","getStateByKey","valueKey","result","setState","stringify","removeItem","historyState","replaceState","title","href","message","setStateByKey","data","beforeData","reset","userAgent","isNeeded","isIOS","RegExp","test","isMacSafari","isAndroid","isWebview","androidVersion","exec","getNavigationType","type","getUrl","split","getStorageKey","name","currentUrl","execRec","obj","path","func","_obj","isNaN","head","shift","setPersistState","value","clearFirst","slice","getPersistState","updateDepth","url","depths","currentIndex","indexOf","prevLastUrl","prevLastIndex","removedList","splice","forEach","removedUrl","push","removed","clear","addEventListener","Persist","get","urlKey","globalState","pathToken","currentItem","isTargetExist","i","set","allValue","remove","VERSION","StorageManager"],"mappings":";;;;;;;;;;;;;;;CAAA,IAAMA,GAAG,GAAI,OAAOC,MAAP,oBAAiCA,MAAlC,IAA6C,EAAzD;AAEA,CACO,IAAMC,SAAO,GAAGF,GAAG,CAACE,OAApB;AACP,CAAO,IAAMC,UAAQ,GAAGH,GAAG,CAACG,QAArB;AACP,CAAO,IAAMC,OAAO,GAAGJ,GAAG,CAACI,OAApB;AACP,CAAO,IAAMC,QAAQ,GAAGL,GAAG,CAACK,QAArB;AACP,CAAO,IAAMC,SAAS,GAAGN,GAAG,CAACM,SAAtB;AACP,CAAO,IAAMC,UAAU,GAAGP,GAAG,CAACO,UAAvB;AACP,CAAO,IAAMC,WAAW,GAAGR,GAAG,CAACQ,WAAxB;CAEP,IAAIC,YAAY,GAAG,IAAnB;CAEA,IAAIC,cAAc,GAAG,IAArB;;CAEA,IAAI;CACHD,EAAAA,YAAY,GAAGT,GAAG,CAACS,YAAnB;CACAC,EAAAA,cAAc,GAAGV,GAAG,CAACU,cAArB;CACA,CAHD,CAGE,OAAOC,CAAP,EAAU;;CChBL,IAAMC,aAAa,GAAG,eAAtB;AACP,CAAO,IAAMC,mBAAmB,aAAWD,aAApC;AACP,CAAO,IAAME,YAAY,GAAG,QAArB;AACP,CAAO,IAAMC,cAAc,GAAG,SAAvB;CACP,IAAMC,UAAU,GAAGR,WAAW,IAAIA,WAAW,CAACQ,UAA9C;AAEA,CAAO,IAAMC,aAAa,GAAID,UAAU,IAAIA,UAAU,CAACC,aAA1B,IAA4C,CAAlE;AACP,CAAO,IAAMC,WAAW,GAAIF,UAAU,IAAIA,UAAU,CAACE,WAA1B,IAA0C,CAA9D;AACP,CAAO,IAAMC,iBAAiB,GAAIH,UAAU,IAAIA,UAAU,CAACG,iBAA1B,IAAgD,CAA1E;;CCPP,IAAMC,cAAc,GAAGhB,OAAO,IAAI,kBAAkBA,OAA7B,IAAwC,WAAWA,OAA1E;;CAEA,SAASiB,kBAAT,CAA4BC,OAA5B,EAAqC;CACpC,MAAI,CAACA,OAAL,EAAc;CACb,WAAOC,SAAP;CACA;;CACD,MAAMC,OAAO,eAAaZ,aAA1B;;CAEA,MAAI;CACH;CACAU,IAAAA,OAAO,CAACG,OAAR,CAAgBD,OAAhB,EAAyBZ,aAAzB,EAFG;CAKH;;CACA,WAAOU,OAAO,CAACI,OAAR,CAAgBF,OAAhB,MAA6BZ,aAApC;CACA,GAPD,CAOE,OAAOD,CAAP,EAAU;CACX,WAAO,KAAP;CACA;CACD;;CAED,IAAMW,OAAO,GAAI,YAAW;CAC3B,MAAIK,IAAJ;;CAEA,MAAIN,kBAAkB,CAACX,cAAD,CAAtB,EAAwC;CACvCiB,IAAAA,IAAI,GAAGjB,cAAP;CACA,GAFD,MAEO,IAAIW,kBAAkB,CAACZ,YAAD,CAAtB,EAAsC;CAC5CkB,IAAAA,IAAI,GAAGlB,YAAP;CACA;;CAED,SAAOkB,IAAP;CACA,CAVe,EAAhB;;CAYA,SAASC,uBAAT,GAAmC;CAClC;CACA1B,EAAAA,OAAO,CAAC2B,IAAR,CAAa,yDACX,uCADF;CAEA;CACA;;CAED,SAASC,UAAT,GAAsB;CACrB,SAAOR,OAAP;CACA;CAED;;;;;CAGA,SAASS,QAAT,CAAkBC,GAAlB,EAAuB;CACtB,MAAIC,KAAJ;CAEA,MAAIC,QAAJ;;CAEA,MAAIZ,OAAJ,EAAa;CACZY,IAAAA,QAAQ,GAAGZ,OAAO,CAACI,OAAR,CAAgBM,GAAhB,CAAX;CACA,GAFD,MAEO,IAAI5B,OAAO,CAAC6B,KAAZ,EAAmB;CACzB,QAAI,OAAO7B,OAAO,CAAC6B,KAAf,KAAyB,QAAzB,IAAqC7B,OAAO,CAAC6B,KAAR,KAAkB,IAA3D,EAAiE;CAChEC,MAAAA,QAAQ,GAAG9B,OAAO,CAAC6B,KAAR,CAAcD,GAAd,CAAX;CACA,KAFD,MAEO;CACNJ,MAAAA,uBAAuB;CACvB;CACD,GANM,MAMA;CACNM,IAAAA,QAAQ,GAAG9B,OAAO,CAAC6B,KAAnB;CACA,GAfqB;;;CAkBtB,MAAIC,QAAQ,KAAK,IAAjB,EAAuB;CACtB,WAAO,EAAP;CACA,GApBqB;;;CAuBtB,MAAMC,eAAe,GAAG,OAAOD,QAAP,KAAoB,QAApB,IACjBA,QAAQ,CAACE,MAAT,GAAkB,CADD,IACMF,QAAQ,KAAK,MAD3C;;CAGA,MAAI;CACHD,IAAAA,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,QAAX,CAAR,CADG;;CAIH,QAAMK,WAAW,GAAG,EAAE,OAAON,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,YAAYO,KAAhD,CAApB;;CAEA,QAAI,CAACL,eAAD,IAAoB,CAACI,WAAzB,EAAsC;CACrC,YAAM,IAAIE,KAAJ,EAAN;CACA;CACD,GATD,CASE,OAAO9B,CAAP,EAAU;CACXiB,IAAAA,uBAAuB;CACvBK,IAAAA,KAAK,GAAG,EAAR;CACA,GAtCqB;;;CAyCtB,SAAOA,KAAP;CACA;;CAED,SAASS,aAAT,CAAuBV,GAAvB,EAA4BW,QAA5B,EAAsC;CACrC,MAAI,CAACvB,cAAD,IAAmB,CAACE,OAAxB,EAAiC;CAChC,WAAOC,SAAP;CACA;;CAED,MAAIqB,MAAM,GAAGb,QAAQ,CAACC,GAAD,CAAR,CAAcW,QAAd,CAAb,CALqC;;CAQrC,MAAIC,MAAM,KAAK,MAAX,IAAqB,OAAOA,MAAP,KAAkB,WAA3C,EAAwD;CACvDA,IAAAA,MAAM,GAAG,IAAT;CACA;;CACD,SAAOA,MAAP;CACA;CAED;;;;;CAGA,SAASC,QAAT,CAAkBb,GAAlB,EAAuBC,KAAvB,EAA8B;CAC7B,MAAIX,OAAJ,EAAa;CACZ,QAAIW,KAAJ,EAAW;CACVX,MAAAA,OAAO,CAACG,OAAR,CACCO,GADD,EACMK,IAAI,CAACS,SAAL,CAAeb,KAAf,CADN;CAEA,KAHD,MAGO;CACNX,MAAAA,OAAO,CAACyB,UAAR,CAAmBf,GAAnB;CACA;CACD,GAPD,MAOO;CACN,QAAI;CACH,UAAMgB,YAAY,GAAG,CAAC5C,OAAD,IAAYA,OAAO,CAAC6B,KAAR,IAAiB,IAA7B,GAAoC,EAApC,GAAyC7B,OAAO,CAAC6B,KAAtE;;CAEA,UAAI7B,OAAO,IAAI,OAAO4C,YAAP,KAAwB,QAAvC,EAAiD;CAChDA,QAAAA,YAAY,CAAChB,GAAD,CAAZ,GAAoBK,IAAI,CAACS,SAAL,CAAeb,KAAf,CAApB;CACA7B,QAAAA,OAAO,CAAC6C,YAAR,CACCD,YADD,EAEC7C,QAAQ,CAAC+C,KAFV,EAGC7C,QAAQ,CAAC8C,IAHV;CAKA,OAPD,MAOO;CACN;CACAjD,QAAAA,OAAO,CAAC2B,IAAR,CAAa,6EAAb;CACA;CACA;CACD,KAfD,CAeE,OAAOlB,CAAP,EAAU;CACX;CACAT,MAAAA,OAAO,CAAC2B,IAAR,CAAalB,CAAC,CAACyC,OAAf;CACA;CACA;CACD;;CAEDnB,EAAAA,KAAK,GAAGhC,GAAM,CAACW,aAAD,CAAN,GAAwB,IAA3B,GAAkC,OAAOX,GAAM,CAACW,aAAD,CAApD;CACA;;CAED,SAASyC,aAAT,CAAuBrB,GAAvB,EAA4BW,QAA5B,EAAsCW,IAAtC,EAA4C;CAC3C,MAAI,CAAClC,cAAD,IAAmB,CAACE,OAAxB,EAAiC;CAChC;CACA;;CAED,MAAMiC,UAAU,GAAGxB,QAAQ,CAACC,GAAD,CAA3B;CAEAuB,EAAAA,UAAU,CAACZ,QAAD,CAAV,GAAuBW,IAAvB;CACAT,EAAAA,QAAQ,CAACb,GAAD,EAAMuB,UAAN,CAAR;CACA;CAED;;;;;CAGA,SAASC,KAAT,CAAexB,GAAf,EAAoB;CACnBa,EAAAA,QAAQ,CAACb,GAAD,EAAM,IAAN,CAAR;CACA;;CC7JD,IAAMyB,SAAS,GAAGnD,SAAS,GAAGA,SAAS,CAACmD,SAAb,GAAyB,EAApD;;CAEA,IAAMC,QAAQ,GAAI,YAAW;CAC5B,MAAMC,KAAK,GAAI,IAAIC,MAAJ,CAAW,aAAX,EAA0B,GAA1B,CAAD,CAAiCC,IAAjC,CAAsCJ,SAAtC,CAAd;CACA,MAAMK,WAAW,GAAI,IAAIF,MAAJ,CAAW,KAAX,EAAkB,GAAlB,CAAD,CAAyBC,IAAzB,CAA8BJ,SAA9B,KACnB,CAAE,IAAIG,MAAJ,CAAW,QAAX,EAAqB,GAArB,CAAD,CAA4BC,IAA5B,CAAiCJ,SAAjC,CADkB,IAElB,IAAIG,MAAJ,CAAW,OAAX,EAAoB,GAApB,CAAD,CAA2BC,IAA3B,CAAgCJ,SAAhC,CAFD;CAGA,MAAMM,SAAS,GAAI,IAAIH,MAAJ,CAAW,UAAX,EAAuB,GAAvB,CAAD,CAA8BC,IAA9B,CAAmCJ,SAAnC,CAAlB;CACA,MAAMO,SAAS,GAAI,IAAIJ,MAAJ,CAAW,aAAX,EAA0B,GAA1B,CAAD,CAAiCC,IAAjC,CAAsCJ,SAAtC,CAAlB;CACA,MAAMQ,cAAc,GAAGF,SAAS,GAAGxD,UAAU,CAAC,IAAIqD,MAAJ,CAC7C,gCAD6C,EACX,GADW,EAE5CM,IAF4C,CAEvCT,SAFuC,EAE5B,CAF4B,CAAD,CAAb,GAERlC,SAFxB;CAIA,SAAO,EAAEoC,KAAK,IACZG,WADO,IAENC,SAAS,KACPE,cAAc,IAAI,GAAlB,IAAyBD,SAA1B,IAAwCC,cAAc,GAAG,CADjD,CAFL,CAAP;CAIA,CAfgB,EAAjB;;;CAkBA,SAASE,iBAAT,GAA6B;CAC5B,SAAO3D,WAAW,IAAIA,WAAW,CAACQ,UAA3B,IACNR,WAAW,CAACQ,UAAZ,CAAuBoD,IADxB;CAEA;;CACD,SAASC,MAAT,GAAkB;CACjB,SAAOhE,QAAQ,GAAGA,QAAQ,CAAC8C,IAAT,CAAcmB,KAAd,CAAoB,GAApB,EAAyB,CAAzB,CAAH,GAAiC,EAAhD;CACA;;CACD,SAASC,aAAT,CAAuBC,IAAvB,EAA6B;CAC5B,SAAOA,IAAI,GAAG5D,aAAd;CACA;;CChCD;AACA,CAUA,IAAI6D,UAAU,GAAG,EAAjB;;CAGA,SAASC,OAAT,CAAiBC,GAAjB,EAAsBC,IAAtB,EAA4BC,IAA5B,EAAkC;CACjC,MAAIC,IAAI,GAAGH,GAAX;;CAEA,MAAI,CAACG,IAAL,EAAW;CACVA,IAAAA,IAAI,GAAGC,KAAK,CAACH,IAAI,CAAC,CAAD,CAAL,CAAL,GAAiB,EAAjB,GAAsB,EAA7B;CACA;;CAED,MAAMI,IAAI,GAAGJ,IAAI,CAACK,KAAL,EAAb;;CAEA,MAAIL,IAAI,CAACxC,MAAL,KAAgB,CAApB,EAAuB;CACtB,QAAI0C,IAAI,YAAYtC,KAAhB,IAAyBuC,KAAK,CAACC,IAAD,CAAlC,EAA0C;CACzC9E,MAAAA,SAAO,CAAC2B,IAAR,CAAa,+BAAb;CACA;;CACDgD,IAAAA,IAAI,CAACC,IAAD,EAAOE,IAAP,CAAJ;CACA,WAAOF,IAAP;CACA;;CAEDA,EAAAA,IAAI,CAACE,IAAD,CAAJ,GAAaN,OAAO,CAACI,IAAI,CAACE,IAAD,CAAL,EAAaJ,IAAb,EAAmBC,IAAnB,CAApB;CACA,SAAOC,IAAP;CACA;;CAED,SAASI,eAAT,CAAyBlD,GAAzB,EAA8BmD,KAA9B,EAAqC;CACpC,MAAI;CACH9B,IAAAA,aAAa,CAACxC,mBAAD,EAAsBmB,GAAtB,EAA2BmD,KAA3B,CAAb;CACA,GAFD,CAEE,OAAOxE,CAAP,EAAU;CACX,QAAIyE,UAAU,EAAd,EAAkB;CACjB,UAAIpD,GAAG,KAAKjB,cAAZ,EAA4B;CAC3BmE,QAAAA,eAAe,CAAClD,GAAD,EAAMmD,KAAN,CAAf;CACA,OAFD,MAEO,IAAInD,GAAG,KAAKlB,YAAZ,EAA0B;CAChCoE,QAAAA,eAAe,CAAClD,GAAD,EAAMmD,KAAK,IAAIA,KAAK,CAACE,KAAN,CAAY,CAAZ,CAAf,CAAf;CACA;CACD,KAND,MAMO;CACN;CACA,YAAM1E,CAAN;CACA;CACD;CACD;;CACD,SAAS2E,eAAT,CAAyBtD,GAAzB,EAA8B;CAC7B,SAAOU,aAAa,CAAC7B,mBAAD,EAAsBmB,GAAtB,CAApB;CACA;;CACD,SAASuD,WAAT,CAAqBnB,IAArB,EAA+B;CAAA,MAAVA,IAAU;CAAVA,IAAAA,IAAU,GAAH,CAAG;CAAA;;CAC9B,MAAMoB,GAAG,GAAGnB,MAAM,EAAlB;;CAEA,MAAII,UAAU,KAAKe,GAAnB,EAAwB;CACvB;CACA,GAL6B;;;CAO9Bf,EAAAA,UAAU,GAAGe,GAAb;CACA,MAAMC,MAAM,GAAGH,eAAe,CAACxE,YAAD,CAAf,IAAiC,EAAhD;;CAEA,MAAIsD,IAAI,KAAKjD,iBAAb,EAAgC;CAC/B;CACA,QAAMuE,YAAY,GAAGD,MAAM,CAACE,OAAP,CAAelB,UAAf,CAArB;CAEA,KAACiB,YAAD,IAAiBR,eAAe,CAACnE,cAAD,EAAiB0D,UAAjB,CAAhC;CACA,GALD,MAKO;CACN,QAAMmB,WAAW,GAAGN,eAAe,CAACvE,cAAD,CAAnC;CAEAyC,IAAAA,KAAK,CAACe,aAAa,CAACE,UAAD,CAAd,CAAL;;CAEA,QAAIL,IAAI,KAAKnD,aAAT,IAA0BuE,GAAG,KAAKI,WAAtC,EAAmD;CAClD;CACA,UAAMC,aAAa,GAAGJ,MAAM,CAACE,OAAP,CAAeC,WAAf,CAAtB;CACA,UAAME,WAAW,GAAGL,MAAM,CAACM,MAAP,CAAcF,aAAa,GAAG,CAA9B,EAAiCJ,MAAM,CAACrD,MAAxC,CAApB;CAEA0D,MAAAA,WAAW,CAACE,OAAZ,CAAoB,UAAAC,UAAU,EAAI;CACjCzC,QAAAA,KAAK,CAACe,aAAa,CAAC0B,UAAD,CAAd,CAAL;CACA,OAFD,EALkD;;CASlD,UAAMP,aAAY,GAAGD,MAAM,CAACE,OAAP,CAAelB,UAAf,CAArB;;CAEA,OAACiB,aAAD,IAAiBD,MAAM,CAACM,MAAP,CAAcL,aAAd,EAA4B,CAA5B,CAAjB;CACA,KAjBK;;;CAmBN,QAAID,MAAM,CAACE,OAAP,CAAeH,GAAf,IAAsB,CAA1B,EAA6B;CAC5BC,MAAAA,MAAM,CAACS,IAAP,CAAYV,GAAZ;CACA;;CACDN,IAAAA,eAAe,CAACpE,YAAD,EAAe2E,MAAf,CAAf;CACAP,IAAAA,eAAe,CAACnE,cAAD,EAAiByE,GAAjB,CAAf;CACA;CACD;;CAED,SAASJ,UAAT,GAAsB;CACrB,MAAMK,MAAM,GAAGH,eAAe,CAACxE,YAAD,CAAf,IAAiC,EAAhD;CACA,MAAMqF,OAAO,GAAGV,MAAM,CAACM,MAAP,CAAc,CAAd,EAAiB,CAAjB,CAAhB;;CAEA,MAAI,CAACI,OAAO,CAAC/D,MAAb,EAAqB;CACpB;CACA,WAAO,KAAP;CACA;;CACD,MAAM6D,UAAU,GAAGE,OAAO,CAAC,CAAD,CAA1B;CAEA3C,EAAAA,KAAK,CAACe,aAAa,CAAC0B,UAAD,CAAd,CAAL;;CACA,MAAIxB,UAAU,KAAKwB,UAAnB,EAA+B;CAC9BxB,IAAAA,UAAU,GAAG,EAAb;CACAS,IAAAA,eAAe,CAACnE,cAAD,EAAiB,EAAjB,CAAf;;CACA,QAAI,CAAC0E,MAAM,CAACrD,MAAZ,EAAoB;CACnB;CACA,aAAO,KAAP;CACA;CACD;;CACD8C,EAAAA,eAAe,CAACpE,YAAD,EAAe2E,MAAf,CAAf,CAnBqB;;CAqBrB,SAAO,IAAP;CACA;;CACD,SAASW,MAAT,GAAiB;CAChB,MAAMX,MAAM,GAAGH,eAAe,CAACxE,YAAD,CAAf,IAAiC,EAAhD;CAEA2E,EAAAA,MAAM,CAACO,OAAP,CAAe,UAAAR,GAAG,EAAI;CACrBhC,IAAAA,KAAK,CAACe,aAAa,CAACiB,GAAD,CAAd,CAAL;CACA,GAFD;CAIAhC,EAAAA,KAAK,CAAC3C,mBAAD,CAAL;CAEA4D,EAAAA,UAAU,GAAG,EAAb;CACA;;CACD,IAAI,gBAAgBxE,GAApB,EAA4B;CAC3BA,EAAAA,GAAM,CAACoG,gBAAP,CAAwB,UAAxB,EAAoC,YAAM;CACzC;CACAd,IAAAA,WAAW,CAACpE,iBAAD,CAAX;CACA,GAHD;CAIA;CAED;;;;;;;;;KAOMmF;;;OAAAA;;;CAQL;;;;aAIOF,yBAAQ;CACdA,MAAAA,MAAK;CACL;CACD;;;;;;;aAKO1C,kCAAW;CACjB,aAAOA,QAAP;CACA;CACD;;;;;;CAIA,qBAAY1B,GAAZ,EAAiB;CAChB,WAAKA,GAAL,GAAWA,GAAG,IAAI,EAAlB;CACA;CAED;;;;;;;;;YAKAuE,mBAAI3B,MAAM;CACT;CACAW,MAAAA,WAAW,CAACtE,aAAD,CAAX,CAFS;;CAKT,UAAMuF,MAAM,GAAGjC,aAAa,CAACF,MAAM,EAAP,CAA5B;CACA,UAAMoC,WAAW,GAAG/D,aAAa,CAAC8D,MAAD,EAAS,KAAKxE,GAAd,CAAjC;;CAGA,UAAI,CAAC4C,IAAD,IAASA,IAAI,CAACxC,MAAL,KAAgB,CAA7B,EAAgC;CAC/B,eAAOqE,WAAP;CACA;;CAED,UAAMC,SAAS,GAAG9B,IAAI,CAACN,KAAL,CAAW,GAAX,CAAlB;CAEA,UAAIqC,WAAW,GAAGF,WAAlB;CAEA,UAAIG,aAAa,GAAG,IAApB;;CAEA,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,SAAS,CAACtE,MAA9B,EAAsCyE,CAAC,EAAvC,EAA2C;CAC1C,YAAI,CAACF,WAAL,EAAkB;CACjBC,UAAAA,aAAa,GAAG,KAAhB;CACA;CACA;;CACDD,QAAAA,WAAW,GAAGA,WAAW,CAACD,SAAS,CAACG,CAAD,CAAV,CAAzB;CACA;;CACD,UAAI,CAACD,aAAD,IAAkBD,WAAW,IAAI,IAArC,EAA2C;CAC1C,eAAO,IAAP;CACA;;CACD,aAAOA,WAAP;CACA;CACD;;;;;;;;YAMAG,mBAAIlC,MAAMO,OAAO;CAChB;CACAI,MAAAA,WAAW,CAACtE,aAAD,CAAX,CAFgB;;CAIhB,UAAMe,GAAG,GAAG,KAAKA,GAAjB;CACA,UAAMwE,MAAM,GAAGjC,aAAa,CAACF,MAAM,EAAP,CAA5B;CACA,UAAMoC,WAAW,GAAG/D,aAAa,CAAC8D,MAAD,EAASxE,GAAT,CAAjC;;CAEA,UAAI;CACH,YAAI4C,IAAI,CAACxC,MAAL,KAAgB,CAApB,EAAuB;CACtBiB,UAAAA,aAAa,CAACmD,MAAD,EAASxE,GAAT,EAAcmD,KAAd,CAAb;CACA,SAFD,MAEO;CACN,cAAM4B,QAAQ,GAAGrC,OAAO,CAAC+B,WAAD,EAAc7B,IAAI,CAACN,KAAL,CAAW,GAAX,CAAd,EAA+B,UAACK,GAAD,EAAMK,IAAN,EAAe;CACrEL,YAAAA,GAAG,CAACK,IAAD,CAAH,GAAYG,KAAZ;CACA,WAFuB,CAAxB;CAIA9B,UAAAA,aAAa,CACZmD,MADY,EAEZxE,GAFY,EAGZ+E,QAHY,CAAb;CAKA;CACD,OAdD,CAcE,OAAOpG,CAAP,EAAU;CACX,YAAIyE,UAAU,CAACzE,CAAD,CAAd,EAAmB;CAClB,eAAKmG,GAAL,CAASlC,IAAT,EAAeO,KAAf;CACA,SAFD,MAEO;CACN;CACA,gBAAMxE,CAAN;CACA;CACD;;CACD,aAAO,IAAP;CACA;CACD;;;;;;;YAKAqG,yBAAOpC,MAAM;CACZ;CACAW,MAAAA,WAAW,CAACtE,aAAD,CAAX,CAFY;;CAKZ,UAAMe,GAAG,GAAG,KAAKA,GAAjB;CACA,UAAMwE,MAAM,GAAGjC,aAAa,CAACF,MAAM,EAAP,CAA5B;CACA,UAAMoC,WAAW,GAAG/D,aAAa,CAAC8D,MAAD,EAASxE,GAAT,CAAjC;;CAEA,UAAI;CACH,YAAI4C,IAAI,CAACxC,MAAL,KAAgB,CAApB,EAAuB;CACtBiB,UAAAA,aAAa,CAACmD,MAAD,EAASxE,GAAT,EAAc,IAAd,CAAb;CACA,SAFD,MAEO;CACN,cAAMmD,KAAK,GAAGT,OAAO,CAAC+B,WAAD,EAAc7B,IAAI,CAACN,KAAL,CAAW,GAAX,CAAd,EAA+B,UAACK,GAAD,EAAMK,IAAN,EAAe;CAClE,gBAAI,OAAOL,GAAP,KAAe,QAAnB,EAA6B;CAC5B,qBAAOA,GAAG,CAACK,IAAD,CAAV;CACA;CACD,WAJoB,CAArB;CAMA3B,UAAAA,aAAa,CACZmD,MADY,EAEZxE,GAFY,EAGZmD,KAHY,CAAb;CAKA;CACD,OAhBD,CAgBE,OAAOxE,CAAP,EAAU;CACX,YAAIyE,UAAU,CAACzE,CAAD,CAAd,EAAmB;CAClB,eAAKqG,MAAL,CAAYpC,IAAZ;CACA,SAFD,MAEO;CACN;CACA,gBAAMjE,CAAN;CACA;CACD;;CACD,aAAO,IAAP;CACA;;;;;CAhJI2F,EAAAA,QACEW,UAAU;CADZX,EAAAA,QAEEY,iBAAiB;CACvB1D,IAAAA,KAAK,EAALA,KADuB;CAEvBH,IAAAA,aAAa,EAAbA,aAFuB;CAGvBX,IAAAA,aAAa,EAAbA,aAHuB;CAIvBZ,IAAAA,UAAU,EAAVA;CAJuB;UAFnBwE;;;;CAoJNf,WAAW,CAACpB,iBAAiB,EAAlB,CAAX;;CCjSAmC,OAAO,CAACf,WAAR,GAAsBA,WAAtB;;;;;;;;"}
\No newline at end of file