{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-augment/src/client/lively.js"],"names":["_","scripts","messaging","preferences","persistence","html","reflection","files","paths","contextmenu","keys","components","authGithub","authDropbox","authGoogledrive","expose","toArray","generateUUID","uuid","wait","pt","rect","Dialog","ViewNav","SystemjsWorker","focalStorage","Selection","windows","events","$","window","debugLogHightlights","WeakMap","exportmodules","LivelyNotification","constructor","data","displayOnConsole","console","log","Lively","location","url","findDirectDependentModules","path","mod","System","normalizeSync","Object","values","loads","filter","ea","key","match","dependencies","find","dep","map","findDependedModules","recursive","all","dependentModules","forEach","module","includes","push","findDependedModulesGraph","tree","name","children","unloadModule","normalizedPath","get","import","then","__unload__","e","registry","delete","undefined","reloadModule","force","changedModule","load","warn","dependedModules","lively","Promise","dependentModule","eaPath","concat","found","getTemplatePaths","templatePath","moduleName","replace","defaultClass","default","updatePrototype","templateURL","setTimeout","loadFile","sourceCode","updateTemplate","notify","loadJavaScriptThroughDOM","src","type","resolve","scriptNode","document","querySelector","remove","script","createElement","id","charset","Date","now","onload","head","appendChild","loadCSSThroughDOM","href","linkNode","link","rel","fillTemplateStyle","element","fetch","r","text","css","innerHTML","fillTemplateStyles","root","debugInfo","baseURL","lively4url","promises","allSrc","querySelectorAll","getAttribute","cssURL","normalizeURL","showError","error","handleError","LastError","message","stack","__karma__","openComponentInWindow","comp","parentElement","setAttribute","style","height","bounds","getBoundingClientRect","width","loaded","onerror","source","lineno","colno","unhandledRejectionEventLister","evt","reason","addEventListener","exportModules","lively4chrome","body","eval","m","clipboard","asUL","anyList","ul","minWidth","minHeight","backgroundColor","item","textContent","value","openWorkspace","string","pos","worldContext","mode","container","setGlobalPosition","focus","openInspector","object","str","inspector","windowTitle","inspect","ensureSpawnArea","spawnId","spawn","display","isMetaNode","create","parent","openIn","x","y","setPosition","obj","point","animateDuration","SVGElement","SVGSVGElement","transform","baseVal","t","consolidate","setTranslate","Error","old","getPosition","position","left","top","dispatchEvent","CustomEvent","animate","duration","matrix","p","DOMPoint","matrixTransform","w","clientX","clientY","parseFloat","KeyboardEvent","getGlobalPosition","target","isNaN","getComputedStyle","getExtent","node","innerWidth","innerHeight","setExtent","extent","setWidth","setHeight","noevent","delta","subPt","moveBy","getGlobalCenter","addPt","scaleBy","setGlobalCenter","getBounds","setBounds","topLeft","getGlobalBounds","getTotalGlobalBounds","Array","from","max","min","bottomRight","minPt","maxPt","getScroll","scrollingElement","scrollLeft","scrollTop","openFile","hostname","followPath","pathname","editFile","editor","openInWindow","setURL","hideContextMenu","composedPath","hide","openContextMenu","HaloService","areHalosActive","halosHidden","that","nativeNotify","title","timeout","cb","notifications","time","Notification","permission","requestPermission","length","notification","icon","onclick","close","titleOrOptions","color","more","details","unsavedChanges","notificationList","addNotification","duplicateNotification","counter","render","success","ensureHand","hand","visibility","selection","current","initializeEvents","doc","onMouseDown","onContextMenu","handle","onKeyUp","installHooks","initializeDocument","loadedAsExtension","loadContainer","modulesExported","loadByName","initializeHalos","stopPropagation","preventDefault","lively4stamp","loadLivelyContentForURL","loadPreferences","existingContainers","tip","textAlign","titleTag","enable","deferredUpdateScroll","performance","lively4performance","start","toFixed","showMainContainer","becomeMainContainer","openInBody","unload","tagName","reloadComponent","objectToMigrate","halo","shadowRoot","oldInstance","__ignoreUpdates","livelyUpdateStrategy","owner","parentNode","newInstance","livelyPreMigrate","replaceChild","childNodes","attributes","livelyMigrate","targetObject","findAllElements","toUpperCase","livelyUpdate","showInfoBox","info","classList","add","update","stop","removeEventListener","showPoint","removeAfterTime","showRect","showEvent","padding","zIndex","bodyBounds","showPath","printArrow","createPath","pointerEvents","touchAction","label","createElementNS","dpath","i","join","defs","last","showSource","HTMLElement","localName","openBrowser","searchTemplateFilename","showClassSource","templateFile","template","parseHTML","moduleURL","showElement","elem","offset","border","showLog","lastDebugLayer","debugText","debugLayer","set","showProgress","progressContainer","progress","allProperties","result","getOwnPropertyNames","__proto__","templateClassNameToTemplateName","className","toLowerCase","registerTemplate","currentScript","ownerDocument","clone","importNode","content","proto","baseName","prototype","register","eventListeners","livelyEventListeners","list","domain","listener","options","openSearchWidget","searchContext","pattern","searchFile","query","getURL","toString","base","repo","searchRoot","hideSearchWidget","openIssue","number","open","openHelpWindow","getHelp","globalPos","findPositionForWindow","ensureWindowTitle","p1","p2","eaPos","lessPt","eqPt","edit","patternOrPostion","replaceExisting","line","lineAndColumn","livelyContainer","containerPromise","isSearchBrowser","lastWindow","first","hideNavbar","asyncGet","livelyEditor","codeMirror","awaitEditor","setSelection","ch","column","scrollIntoView","getCursor","openDebugger","lively4ChromeDebugger","getCurrentDebuggingTarget","res","createWindow","targetId","parseInt","screen","catch","confirm","msg","prompt","customizeCB","findWorldContext","activeElement","findWindow","isWindow","host","print","s","Function","allKeys","hasOwnProperty","__lookupGetter__","currentStack","split","onUnload","saveLivelyContent","onInteractiveLayerPreference","enabled","InteractiveLayer","beGlobal","beNotGlobal","onShowFixedBrowserPreference","onShowDocumentGridPreference","showDocumentGrid","hideDocumentGrid","onOfflineFirstPreference","setItem","navigator","serviceWorker","controller","postMessage","option","onBodyPositionPreference","onBodyScrollPreference","onFileIndexPreference","bool","fileIndexWorker","onSWXKeepAlivePreference","command","sleep","onLogBootPreference","localStorage","isGlobalKeyboardFocusElement","hasGlobalFocus","globalFocus","focusWithoutScroll","preventScroll","ensureID","elementByID","waitOnQuerySelector","selector","maxtime","startTime","reject","check","elementToCSSName","openPart","partName","pasteHTMLDataInto","queryAll","Set","containers","gotoWindow","justFocuWhenInBounds","elementBounds","windowBounds","containsRect","allPreferences","regexp","bench","func","instance","lastScrollTop","lastScrollLeft","shiftKey","items","menu","halt","sleepUntil","step","allElements","deep","allTextNodes","n","walk","createTreeWalker","NodeFilter","SHOW_TEXT","nextNode","filterFunc","allParents","parents","isInBody","showHalo","showHalos","swxURL","allElementsFromPoint","visited","elements","elementsFromPoint","notYetVisited","has","shadowRootElements","registerSWXFetchHandler","ports","method","headers","assign","blob","err","oldLively","previous"],"mappings":";;;;;;;;;AAcOA,O;;AACKC,a;;AACAC,e;;AACLC,iB;;AACAC,iB;;AACAC,U;;AACKC,gB;;AACLC,W;;AACAC,W;;AACAC,iB;;AACAC,U;;AACAC,gB;;AACAC,gB;;AACAC,iB;;AACAC,qB;;AACAC,Y;;AACEC,a,UAAAA,O;AAAiBC,kB,UAARC,I;AAAsBC,U,UAAAA,I;;AAChCC,Q,eAAAA,E;AAAIC,U,eAAAA,I;;AACLC,Y;;AACAC,a;;AACAC,oB;;AAMAC,kB;;AACAC,e;;AACAC,a;;AAEAC,Y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEP,UAAIC,IAAIC,OAAOD,CAAf,C,CAAkB;;;;;;;;;;;;;;;;AAGlB,UAAIE,sBAAsB,IAAIC,OAAJ,EAA1B;;AAEA;AACA;AACA;;;;;;;;;;;;;;AACA,UAAIC,gBAAgB,CAClB,aADkB,EAElB,OAFkB,EAGlB,MAHkB,EAIlB,OAJkB,EAKlB,MALkB,EAMlB,YANkB,EAOlB,YAPkB,EAQlB,aARkB;AASlB;AACA,oBAVkB,EAWlB,YAXkB,EAYlB,aAZkB,EAalB,iBAbkB,EAclB,aAdkB,EAelB,SAfkB,CAApB;;;;;;;;;;;;;;;AAkBA,YAAMC,kBAAN,CAAyB;AACvBC,oBAAYC,IAAZ,EAAkB;AAChB,eAAKA,IAAL,GAAYA,IAAZ;AACD;;AAEDC,2BAAmB;AACjBC,kBAAQC,GAAR,CAAY,uBAAZ,EAAqC,iCAArC,EAAwE,KAAKH,IAA7E;AACD;AAPsB;;AAUzB;;;;;;;;;;;;;;;;;;AAKe,YAAMI,MAAN,CAAa;;AAE1B,mBAAWC,QAAX,GAAsB;AACpB,iBAAOX,OAAOW,QAAd;AACD;;AAED,mBAAWA,QAAX,CAAoBC,GAApB,EAAyB;AACvB,iBAAOZ,OAAOW,QAAP,GAAkBC,GAAzB;AACD;;AAED,eAAOC,0BAAP,CAAkCC,IAAlC,EAAwC;AACrC,cAAIC,MAAMC,OAAOC,aAAP,CAAqBH,IAArB,CAAV;AACA,iBAAOI,OAAOC,MAAP,CAAcH,OAAOI,KAArB,EACLC,MADK,CACGC,MAAM;AACd,gBAAIA,GAAGC,GAAH,CAAOC,KAAP,CAAa,gBAAb,CAAJ,EAAqC;;AAEnC,qBAAO,KAAP;AACD;;AAEA,mBAAOF,GAAGG,YAAH,CAAgBC,IAAhB,CAAqBC,OAAOX,OAAOC,aAAP,CAAqBU,GAArB,EAA0BL,GAAGC,GAA7B,KAAqCR,GAAjE,CAAP;AACD,WARK,EASLa,GATK,CASAN,MAAMA,GAAGC,GATT,CAAP;AAUF;;AAED,eAAOM,mBAAP,CAA2Bf,IAA3B,EAAiCgB,SAAjC,EAA4CC,MAAM,EAAlD,EAAsD;AACpD,cAAIC,mBAAmB,KAAKnB,0BAAL,CAAgCC,IAAhC,CAAvB;AACA,cAAGgB,SAAH,EAAc;AACZE,6BAAiBC,OAAjB,CAAyBC,UAAU;AACjC,kBAAG,CAACH,IAAII,QAAJ,CAAaD,MAAb,CAAJ,EAA0B;AACxBH,oBAAIK,IAAJ,CAASF,MAAT;AACA,qBAAKL,mBAAL,CAAyBK,MAAzB,EAAiC,IAAjC,EAAuCH,GAAvC;AACD;AACF,aALD;AAMA,mBAAOA,GAAP;AACD,WARD,MAQO;AACL,mBAAOC,gBAAP;AACD;AACF;;AAED,eAAOK,wBAAP,CAAgCvB,IAAhC,EAAsCiB,MAAM,EAA5C,EAAgD;;AAE9C,cAAIO,OAAO,EAAX;AAGAA,eAAKC,IAAL,GAAYzB,IAAZ;AACA,cAAIkB,mBAAmB,KAAKnB,0BAAL,CAAgCC,IAAhC,CAAvB;AACAwB,eAAKE,QAAL,GAAgB,EAAhB;;AAEAR,2BAAiBC,OAAjB,CAAyBC,UAAU;AACjC,gBAAG,CAACH,IAAII,QAAJ,CAAaD,MAAb,CAAJ,EAA0B;AACxBH,kBAAIK,IAAJ,CAASF,MAAT;AACAI,mBAAKE,QAAL,CAAcJ,IAAd,CAAmB,KAAKC,wBAAL,CAA8BH,MAA9B,EAAsCH,GAAtC,CAAnB;AACD,aAHD,MAGO;AACLO,mBAAKE,QAAL,CAAcJ,IAAd,CAAmB;AACjBG,sBAAML;AADW,eAAnB;AAGD;AACF,WATD;AAUA,iBAAOI,IAAP;AACD;;AAED;AACA,qBAAaG,YAAb,CAA0B3B,IAA1B,EAAgC;AAC9B,cAAI4B,iBAAiB1B,OAAOC,aAAP,CAAqBH,IAArB,CAArB;AACA,cAAI;AACF;AACA,gBAAIE,OAAO2B,GAAP,CAAWD,cAAX,CAAJ,EAAgC;AAC9B,oBAAM1B,OAAO4B,MAAP,CAAcF,cAAd,EAA8BG,IAA9B,CAAmCX,UAAU;AACjD,oBAAGA,UAAU,OAAOA,OAAOY,UAAd,KAA6B,UAA1C,EAAsD;AACpDZ,yBAAOY,UAAP;AACD;AACF,eAJK,CAAN;AAKD;AACF,WATD,CASE,OAAMC,CAAN,EAAS;AACTvC,oBAAQC,GAAR,CAAY,2CAA2CK,IAAvD;AACD;AACDE,iBAAOgC,QAAP,CAAgBC,MAAhB,CAAuBP,cAAvB;AACA;AACA1B,iBAAO,oBAAP,EAA6B0B,cAA7B,IAA+CQ,SAA/C;AACA,iBAAOlC,OAAOI,KAAP,CAAasB,cAAb,CAAP;AACD;;AAED,qBAAaS,YAAb,CAA0BrC,IAA1B,EAAgCsC,KAAhC,EAAuC;AACrC;AACA;;AAEAtC,iBAAO,KAAKA,IAAZ;AACA,cAAIuC,gBAAgBrC,OAAOC,aAAP,CAAqBH,IAArB,CAApB;AACA,cAAIwC,OAAOtC,OAAOI,KAAP,CAAaiC,aAAb,CAAX;AACA,cAAI,CAACC,IAAD,IAAS,CAACF,KAAd,EAAqB;AACnB,kBAAM,KAAKX,YAAL,CAAkB3B,IAAlB,CAAN,CADmB,CACY;AAC/BN,oBAAQ+C,IAAR,CAAa,gCAAb;AACA;AACD;AACD,gBAAM,KAAKd,YAAL,CAAkB3B,IAAlB,CAAN;AACA,cAAIC,MAAM,MAAMC,OAAO4B,MAAP,CAAc9B,IAAd,CAAhB;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,cAAI0C,eAAJ;AACA,cAAG1C,KAAKU,KAAL,CAAW,iBAAX,CAAH,EAAkC;AAChC;AACAgC,8BAAkBC,OAAO5B,mBAAP,CAA2Bf,IAA3B,EAAiC,IAAjC,CAAlB;AACA0C,8BAAkBA,gBAAgBnC,MAAhB,CAAuBN,OAAOA,IAAIS,KAAJ,CAAU,iBAAV,CAA9B,CAAlB;AACA;AACD,WALD,MAKO,IAAGV,KAAKU,KAAL,CAAW,eAAX,CAAH,EAAgC;AACrC;AACAgC,8BAAkBC,OAAO5B,mBAAP,CAA2Bf,IAA3B,EAAiC,IAAjC,CAAlB;AACA0C,8BAAkBA,gBAAgBnC,MAAhB,CAAuBN,OAAOA,IAAIS,KAAJ,CAAU,eAAV,CAA9B,CAAlB;AACD,WAJM,MAIA;AACL;AACAgC,8BAAkBC,OAAO5B,mBAAP,CAA2Bf,IAA3B,CAAlB;AACD;;AAED;AACA;;;AAGA;AACA,gBAAM4C,QAAQ3B,GAAR,CAAYyB,gBAAgB5B,GAAhB,CAAoB+B,mBAAmB,KAAKlB,YAAL,CAAkBkB,eAAlB,CAAvC,CAAZ,CAAN;;AAEA;AACA;;AAEA,gBAAMD,QAAQ3B,GAAR,CAAYyB,gBAAgB5B,GAAhB,CAAoB+B,mBAAmB3C,OAAO4B,MAAP,CAAce,eAAd,CAAvC,CAAZ,CAAN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAI,IAAIrC,EAAR,IAAckC,eAAd,EAA+B,CAE9B;AADC;;;AAGF;AACA;;AAEA;;;AAGA,eAAK,IAAII,MAAT,IAAmB,CAAC9C,IAAD,EAAO+C,MAAP,CAAcL,eAAd,CAAnB,EAAmD;AACjD;AACA,gBAAIM,QAAQL,OAAO5E,UAAP,CAAkBkF,gBAAlB,GAAqCrC,IAArC,CAA0CsC,gBAAgBJ,OAAOpC,KAAP,CAAawC,YAAb,CAA1D,CAAZ;AACA,gBAAIF,KAAJ,EAAW;AACT;;;AAGA,kBAAIG,aAAaL,OAAOM,OAAP,CAAe,OAAf,EAAuB,EAAvB,CAAjB;AACA,kBAAInD,MAAM,MAAMC,OAAO4B,MAAP,CAAcgB,MAAd,CAAhB;AACA,kBAAIO,eAAepD,IAAIqD,OAAvB;AACA,kBAAID,YAAJ,EAAkB;AAChB3D,wBAAQC,GAAR,CAAY,gCAAgCwD,UAA5C;AACApF,2BAAWwF,eAAX,CAA2BF,YAA3B,EAAyCF,UAAzC;AACD;;AAED,kBAAIK,cAAcV,OAAOM,OAAP,CAAe,OAAf,EAAuB,OAAvB,CAAlB;AACA,kBAAI;AACF1D,wBAAQC,GAAR,CAAY,iCAAiC6D,WAA7C;AACAC,2BAAW,MAAM;AACfd,yBAAOhF,KAAP,CAAa+F,QAAb,CAAsBF,WAAtB,EAAmCzB,IAAnC,CAAyC4B,cACvChB,OAAOiB,cAAP,CAAsBD,UAAtB,CADF;AAED,iBAHD,EAGE,GAHF;AAKD,eAPD,CAOE,OAAM1B,CAAN,EAAS;AACTU,uBAAOkB,MAAP,CAAc,2CAA2CL,WAAzD,EAAsE,KAAGvB,CAAzE;AACD;AACF;AACF;;AAED;AACA;;AAEA,iBAAOhC,GAAP;AACD;;AAED,eAAO6D,wBAAP,CAAgCrC,IAAhC,EAAsCsC,GAAtC,EAA2CzB,QAAM,KAAjD,EAAwD0B,OAAK,iBAA7D,EAAgF;AAC9E,iBAAO,IAAIpB,OAAJ,CAAaqB,OAAD,IAAa;AAC9B,gBAAIC,aAAaC,SAASC,aAAT,CAAuB,MAAI3C,IAA3B,CAAjB;AACA,gBAAI,CAACa,KAAD,IAAU4B,UAAd,EAA0B;AACxBD,sBAAU;AAAV,iBACA;AACD;;AAED,gBAAIC,UAAJ,EAAgB;AACdA,yBAAWG,MAAX;AACD;AACD,gBAAIC,4BAASH,SAASI,aAAT,CAAuB,QAAvB,CAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAJ;AACAD,mBAAOE,EAAP,GAAU/C,IAAV;AACA6C,mBAAOG,OAAP,GAAe,OAAf;AACAH,mBAAON,IAAP,GAAYA,IAAZ;AACA,gBAAI1B,KAAJ,EAAW;AACTyB,oBAAMA,OAAO,MAAMW,KAAKC,GAAL,EAAb,CAAN;AACD;AACDL,mBAAOP,GAAP,GAAYA,GAAZ;AACAO,mBAAOM,MAAP,GAAgB,YAAW;AACzBX;AACD,aAFD;AAGAE,qBAASU,IAAT,CAAcC,WAAd,CAA0BR,MAA1B;AACD,WAtBM,CAAP;AAuBD;;AAGD,eAAOS,iBAAP,CAAyBtD,IAAzB,EAA+BuD,IAA/B,EAAqC1C,KAArC,EAA4C;AAC1C,iBAAO,IAAIM,OAAJ,CAAaqB,OAAD,IAAa;AAC9B,gBAAIgB,WAAWd,SAASC,aAAT,CAAuB,MAAI3C,IAA3B,CAAf;AACA,gBAAIwD,QAAJ,EAAc;AACZA,uBAASZ,MAAT;AACD;AACD,gBAAIa,0BAAOf,SAASI,aAAT,CAAuB,MAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAJ;AACAW,iBAAKC,GAAL,GAAS,YAAT;AACAD,iBAAKV,EAAL,GAAQ/C,IAAR;AACAyD,iBAAKT,OAAL,GAAa,OAAb;AACAS,iBAAKlB,IAAL,GAAU,UAAV;AACA,gBAAI1B,KAAJ,EAAW;AACT0C,sBAAQ,CAAE,GAAF,GAAQN,KAAKC,GAAL,EAAhB;AACD;AACDO,iBAAKF,IAAL,GAAWA,IAAX;AACAE,iBAAKN,MAAL,GAAc,YAAW;AACvBX;AACD,aAFD;AAGAE,qBAASU,IAAT,CAAcC,WAAd,CAA0BI,IAA1B;AACD,WAlBM,CAAP;AAmBD;AACD,qBAAaE,iBAAb,CAA+BC,OAA/B,EAAwCvF,GAAxC,EAA6C;AAC3C;AACA,iBAAOwF,MAAM,YAAYxF,GAAlB,EAAuBiC,IAAvB,CAA4BwD,KAAKA,EAAEC,IAAF,EAAjC,EAA2CzD,IAA3C,CAAgD0D,OAAO;AAC5D;AACAJ,oBAAQK,SAAR,GAAoBD,GAApB;AACD,WAHM,CAAP;AAID;;AAED,qBAAaE,kBAAb,CAAgCC,IAAhC,EAAsCC,SAAtC,EAAiDC,UAAQC,UAAzD,EAAqE;AACnE;;AAEA;AACA,cAAIC,WAAW,EAAf;AACA,cAAIC,SAAS,EAAb;AACAL,eAAKM,gBAAL,CAAsB,OAAtB,EAA+B/E,OAA/B,CAAuCX,MAAM;AAC3C,gBAAIuD,MAAMvD,GAAG2F,YAAH,CAAgB,UAAhB,CAAV;AACA,gBAAIpC,GAAJ,EAAS;;AAEP,kBAAIqC,SAASrC,GAAb;AACA,kBAAI,CAACqC,OAAO1F,KAAP,CAAa,gBAAb,CAAL,EAAqC;AACnC0F,yBAASN,QAAQ1C,OAAR,CAAgB,MAAhB,EAAwB,GAAxB,IAA+BgD,MAAxC;AACD;AACDH,qBAAO3E,IAAP,CAAYyC,GAAZ;AACAvD,iBAAGV,GAAH,GAAS6C,OAAO/E,KAAP,CAAayI,YAAb,CAA0BD,MAA1B,CAAT;AACAJ,uBAAS1E,IAAT,CAAc,KAAK8D,iBAAL,CAAuB5E,EAAvB,EAA2B4F,MAA3B,CAAd;AACD;AACF,WAZD;AAaA,gBAAMxD,QAAQ3B,GAAR,CAAY+E;AAClB;AADM,WAAN;AAED;;AAED,eAAOM,SAAP,CAAiBC,KAAjB,EAAwB;AACtB,eAAKC,WAAL,CAAiBD,KAAjB;AACD;;AAEA,qBAAaC,WAAb,CAAyBD,KAAzB,EAAgC;AAC/B5D,iBAAO8D,SAAP,GAAmBF,KAAnB;AACA,cAAI;AACF,gBAAI,CAACA,KAAL,EAAY,OADV,CACkB;AACpB,gBAAIA,MAAMG,OAAN,CAAchG,KAAd,CAAoB,kCAApB,CAAJ,EAA6D;AAC3DhB,sBAAQC,GAAR,CAAY4G,KAAZ;AACA;AACD;AACD,gBAAIpC,SAASC,aAAT,CAAuB,gBAAvB,CAAJ,EAA8C;AAC5C1E,sBAAQC,GAAR,CAAY4G,KAAZ;AACD,aAFD,MAEO;AACL7G,sBAAQ6G,KAAR,CAAc,UAAd,EAA0BA,KAA1B,EAAiCA,MAAMI,KAAvC;AACA,kBAAI,CAACzH,OAAO0H,SAAZ,EAAuB;AACrB,sBAAMjE,OAAOkB,MAAP,CAAc,SAAd,EAAyB0C,KAAzB,EAAgC,EAAhC,EAAoC,MAAM;AAC5C5D,yBAAOkE,qBAAP,CAA6B,cAA7B,EAA6C9E,IAA7C,CAAmD+E,QAAQ;AACzDA,yBAAKH,KAAL,GAAcJ,MAAMI,KAApB;AACAG,yBAAKC,aAAL,CAAmBC,YAAnB,CAAgC,OAAhC,EAA0C,KAAKT,MAAMG,OAArD;AACAI,yBAAKG,KAAL,CAAWC,MAAX,GAAoB,aAApB;AACA,wBAAIC,SAASL,KAAKM,qBAAL,EAAb;AACAN,yBAAKC,aAAL,CAAmBE,KAAnB,CAAyBC,MAAzB,GAAmCC,OAAOD,MAAP,GAAgB,EAAjB,GAAsB,IAAxD;AACAJ,yBAAKC,aAAL,CAAmBE,KAAnB,CAAyBI,KAAzB,GAAiCF,OAAOE,KAAP,GAAe,IAAhD;AACD,mBAPD;AAQD,iBATG,EASD,KATC,CAAN;AAUD;AACF;AACF,WAvBD,CAuBE,OAAMpF,CAAN,EAAS;AACTvC,oBAAQC,GAAR,CAAY,gDAAgDsC,CAA5D;AACD;AACF;;AAED,qBAAaqF,MAAb,GAAsB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAIpI,OAAOqI,OAAP,KAAmB,IAAvB,EAA6B;AAC3BrI,mBAAOqI,OAAP,GAAkB,UAASb,OAAT,EAAkBc,MAAlB,EAA0BC,MAA1B,EAAkCC,KAAlC,EAAyCnB,KAAzC,EAAgD;AACjE5D,qBAAO6D,WAAP,CAAmBD,KAAnB;AACA,aAFD;AAGD;AACD;AACA,cAAI,CAACrH,OAAOyI,6BAAZ,EAA2C;AACzCzI,mBAAOyI,6BAAP,GAAuC,UAASC,GAAT,EAAc;AAACjF,qBAAO6D,WAAP,CAAmBoB,IAAIC,MAAvB;AAA+B,aAArF;AACA3I,mBAAO4I,gBAAP,CAAwB,oBAAxB,EAA8CH,6BAA9C;AACD;;AAED,gBAAM,KAAKI,aAAL,EAAN;;AAGA,cAAI,CAAC7I,OAAO8I,aAAZ,EAA2B;AACzB;AACArF,mBAAOoC,iBAAP,CAAyB,aAAzB,EAAwCgB,aAAa,wBAArD;AACD;AACD;AACA;AACA;AACA;AACA;;AAEAtC,qBAAW,MAAM;AACf;AACAU,qBAAS8D,IAAT,CAAc/B,gBAAd,CAA+B,KAA/B,EAAsC/E,OAAtC,CAA8CX,MAAMA,GAAGuD,GAAH,GAAS,KAAKvD,GAAGuD,GAArE,CAA0E;AAA1E;AACD,WAHD,EAGG,KAAK,IAHR;AAMD;;AAGD,qBAAagE,aAAb,GAA6B;AAC3B1I,wBAAc8B,OAAd,CAAsBM,QAAQkB,OAAOlB,IAAP,IAAeyG,KAAKzG,IAAL,CAA7C,EAD2B,CAC+B;;AAE1D,gBAAMvB,OAAO4B,MAAP,CAAc,yBAAd,EAAyCC,IAAzC,CAA+CoG,KAAK;AACxDxF,mBAAOyF,SAAP,GAAmBD,EAAE7E,OAArB;AACD,WAFK,CAEH;AAFG,WAAN,CAGA,MAAMpD,OAAO4B,MAAP,CAAc,uBAAd,CAAuC;AAAvC,WAAN,CACA,MAAM5B,OAAO4B,MAAP,CAAc,2BAAd,CAA2C;;;AAA3C,WAAN,CAGA,MAAM5B,OAAO4B,MAAP,CAAc,oBAAd,CAAoC;AAC1C;AADM,WAAN,CAEA,MAAM5B,OAAO4B,MAAP,CAAc,2BAAd,CAA2C;AAA3C,WAAN,CACA,MAAM5B,OAAO4B,MAAP,CAAc,iCAAd,CAAN;AACA,gBAAM5B,OAAO4B,MAAP,CAAc,mCAAd,CAAN;AACA,gBAAM5B,OAAO4B,MAAP,CAAc,6BAAd,CAAN;AACA,gBAAM5B,OAAO4B,MAAP,CAAc,6BAAd,CAAN;;AAEA,gBAAM5B,OAAO4B,MAAP,CAAc,mCAAd,CAAN;;AAEA,gBAAM5B,OAAO4B,MAAP,CAAc,4BAAd,CAA4C;AAA5C,WAAN;AACD;;AAGD;AACA,eAAOuG,IAAP,CAAYC,OAAZ,EAAoB;AAClB,cAAIC,wBAAKpE,SAASI,aAAT,CAAuB,IAAvB,CAAL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACAgE,aAAGtB,KAAH,CAASuB,QAAT,GAAoB,MAApB;AACAD,aAAGtB,KAAH,CAASwB,SAAT,GAAqB,MAArB;AACAF,aAAGtB,KAAH,CAASyB,eAAT,GAA2B,MAA3B;AACAJ,kBAAQnH,OAAR,CAAgBX,MAAM;AACpB,gBAAImI,0BAAOxE,SAASI,aAAT,CAAuB,IAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAJ;AACAoE,iBAAKC,WAAL,GAAmBpI,EAAnB;AACAmI,iBAAKE,KAAL,GAAarI,EAAb;AACA+H,eAAGzD,WAAH,CAAe6D,IAAf;AACD,WALD;AAMA,iBAAOJ,EAAP;AACD;;AAGD,eAAOO,aAAP,CAAqBC,MAArB,EAA6BC,GAA7B,EAAkCC,YAAlC,EAAgD;AAC9CF,mBAASA,UAAU,EAAnB;AACA,cAAItH,OAAO,oBAAX;AACA,iBAAQkB,OAAOkE,qBAAP,CAA6BpF,IAA7B,EAAmC,IAAnC,EAAyCjD,GAAG,GAAH,EAAO,GAAP,CAAzC,EAAsDyK,YAAtD,EAAoElH,IAApE,CAA0E+E,IAAD,IAAU;AACzFA,iBAAKoC,IAAL,GAAY,UAAZ;AACApC,iBAAK+B,KAAL,GAAaE,MAAb;AACAjC,iBAAKE,YAAL,CAAkB,YAAlB,EAAgC,SAAhC;AACAF,iBAAKG,KAAL,CAAWC,MAAX,GAAoB,MAApB;AACA,gBAAIiC,YAAYrC,KAAKC,aAArB;AACA,gBAAIiC,GAAJ,EAASrG,OAAOyG,iBAAP,CAAyBD,SAAzB,EAAmCH,GAAnC;AACTG,sBAAUnC,YAAV,CAAuB,OAAvB,EAAgC,WAAhC;AACAF,iBAAKuC,KAAL;AACA,mBAAOvC,IAAP;AACD,WAVO,CAAR;AAWD;;AAED,eAAOwC,aAAP,CAAqBC,MAArB,EAA6BP,GAA7B,EAAkCQ,GAAlC,EAAuCP,YAAvC,EAAqD;AACnD,iBAAOtG,OAAOkE,qBAAP,CAA6B,kBAA7B,EAAiDmC,GAAjD,EAAsDxK,GAAG,GAAH,EAAO,GAAP,CAAtD,EAAmEyK,YAAnE,EAAiFlH,IAAjF,CAAsF0H,aAAa;AACtGA,sBAAUC,WAAV,GAAwB,cAAcF,GAAtC;AACAC,sBAAUE,OAAV,CAAkBJ,MAAlB;AACA,mBAAOE,SAAP;AACH,WAJM,CAAP;AAKD;;AAED,eAAOG,eAAP,GAAyB;AACvB,cAAIC,UAAU,iBAAd;AACA,cAAIC,QAAQ3F,SAAS8D,IAAT,CAAc7D,aAAd,CAA4B,MAAMyF,OAAlC,CAAZ;AACA,cAAI,CAACC,KAAL,EAAY;AACVA,uCAAQ3F,SAASI,aAAT,CAAuB,KAAvB,CAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACAuF,kBAAMtF,EAAN,GAAWqF,OAAX;AACAC,kBAAM7C,KAAN,CAAY8C,OAAZ,GAAsB,MAAtB;AACAD,kBAAME,UAAN,GAAmB,IAAnB;AACA7F,qBAAS8D,IAAT,CAAcnD,WAAd,CAA0BgF,KAA1B;AACD;AACD,iBAAOA,KAAP;AACD;;AAGD,qBAAaG,MAAb,CAAoBxI,OAAK,cAAzB,EAAyCyI,SAAO,KAAKN,eAAL,EAAhD,EAAwE;;AAEtE;;AAEA,cAAIvE,6BAAUlB,SAASI,aAAT,CAAuB9C;AACrC;AADc,WAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ,CAEA,IAAIA,KAAKf,KAAL,CAAW,GAAX,CAAJ,EAAqB;AACnB,kBAAMiC,OAAO5E,UAAP,CAAkBoM,MAAlB,CAAyBD,MAAzB,EAAiC7E,OAAjC,CAAN;AACD,WAFD,MAEO;AACL6E,mBAAOpF,WAAP,CAAmBO,OAAnB;AACD;AACD;AACA;AACA;AACA;AACA,iBAAOA,OAAP;AACD;;AAED,eAAO7G,EAAP,CAAU4L,CAAV,EAAYC,CAAZ,EAAe;AACb,iBAAO7L,GAAG4L,CAAH,EAAKC,CAAL,CAAP;AACD;;AAED;AACA,eAAOC,WAAP,CAAmBC,GAAnB,EAAwBC,KAAxB,EAA+BtB,IAA/B,EAAqCuB,eAArC,EAAsD;AACpD,cAAIF,eAAeG,UAAf,IAA6B,EAAEH,eAAeI,aAAjB,CAAjC,EAAkE;AAChE,gBAAIJ,IAAIK,SAAJ,IAAiBL,IAAIK,SAAJ,CAAcC,OAAnC,EAA4C;AAC1C;AACA,kBAAIC,IAAIP,IAAIK,SAAJ,CAAcC,OAAd,CAAsBE,WAAtB,EAAR;AACA,kBAAID,CAAJ,EAAO;AACLA,kBAAEE,YAAF,CAAeR,MAAMJ,CAArB,EAAuBI,MAAMH,CAA7B;AACD,eAFD,MAEO;AACLE,oBAAIvD,YAAJ,CAAiB,WAAjB,EAA+B,aAAYwD,MAAMJ,CAAE,KAAII,MAAMH,CAAE,GAA/D;AACD;AACF,aARD,MAQO;AACL,oBAAM,IAAIY,KAAJ,CAAU,4BAAV,CAAN;AACD;AACF,WAZD,MAYO;AACL,gBAAIC,MAAMvI,OAAOwI,WAAP,CAAmBZ;AAC7B;AADU,aAAV,CAEAA,IAAItD,KAAJ,CAAUmE,QAAV,GAAqBlC,QAAQ,UAA7B;AACAqB,gBAAItD,KAAJ,CAAUoE,IAAV,GAAiB,KAAKb,MAAMJ,CAAX,GAAe,IAAhC;AACAG,gBAAItD,KAAJ,CAAUqE,GAAV,GAAgB,KAAMd,MAAMH,CAAZ,GAAgB,IAAhC;AACAE,gBAAIgB,aAAJ,CAAkB,IAAIC,WAAJ,CAAgB,kBAAhB,CAAlB;;AAEA,gBAAIf,eAAJ,EAAqB;AACnBF,kBAAIkB,OAAJ,CAAY,CACV,EAACJ,MAAMH,IAAId,CAAJ,GAAQ,IAAf,EAAqBkB,KAAKJ,IAAIb,CAAJ,GAAQ,IAAlC,EADU,EAEV,EAACgB,MAAMb,MAAMJ,CAAN,GAAU,IAAjB,EAAuBkB,KAAKd,MAAMH,CAAN,GAAS,IAArC,EAFU,CAAZ,EAGE;AACAqB,0BAAUjB;AADV,eAHF;AAMD;AAEF;AACF;;AAGD;;AAEA;AACA,eAAOU,WAAP,CAAmBZ,GAAnB,EAAwB;;AAEtB,cAAIvB,GAAJ;AACA,cAAIuB,eAAeG,UAAf,IAA6B,EAAEH,eAAeI,aAAjB,CAAjC,EAAkE;AAChE,gBAAIJ,IAAIK,SAAJ,IAAiBL,IAAIK,SAAJ,CAAcC,OAAnC,EAA4C;AAC1C;AACA,kBAAIC,IAAIP,IAAIK,SAAJ,CAAcC,OAAd,CAAsBE,WAAtB,EAAR;AACA,kBAAI,CAACD,CAAL,EAAQ,OAAOtM,GAAG,CAAH,EAAK,CAAL,CAAP;AACR,kBAAI2J,IAAI2C,EAAEa,MAAV;AACA,kBAAIC,IAAI,IAAIC,QAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAR;AACA,kBAAItG,IAAIqG,EAAEE,eAAF,CAAkB3D,CAAlB,CAAR;AACA,kBAAI,CAAC5C,CAAD,IAAM,CAACA,EAAE6E,CAAb,EAAiB,OAAO5L,GAAG,CAAH,EAAK,CAAL,CAAP;AACjB,qBAAOA,GAAG+G,EAAE6E,CAAF,GAAM7E,EAAEwG,CAAX,EAAcxG,EAAE8E,CAAF,GAAM9E,EAAEwG,CAAtB,CAAP;AACD,aATD,MASO;AACL,oBAAM,IAAId,KAAJ,CAAU,4BAAV,CAAN;AACD;AACF;;AAED,cAAIV,IAAIyB,OAAJ,KAAgB5J,SAApB,EAA+B;AAC7B,mBAAO5D,GAAG+L,IAAIyB,OAAP,EAAgBzB,IAAI0B,OAApB,CAAP;AACD;;AAED;AACA,cAAI1B,IAAItD,KAAR,EAAe;AACb+B,kBAAMxK,GAAG0N,WAAW3B,IAAItD,KAAJ,CAAUoE,IAArB,CAAH,EAA+Ba,WAAW3B,IAAItD,KAAJ,CAAUqE,GAArB,CAA/B,CAAN;AACD;AACD;AACA;AACA,cAAGf,eAAe4B,aAAlB,EAAiC;AAC/B,mBAAOxJ,OAAOyJ,iBAAP,CAAyB7B,IAAI8B,MAA7B,CAAP;AACD;AACD;AACA,cAAIC,MAAMtD,IAAIoB,CAAV,KAAgBkC,MAAMtD,IAAIqB,CAAV,CAApB,EAAkC;AAChC,gBAAIpD,QAAQsF,iBAAiBhC,GAAjB,CAAZ;AACAvB,kBAAMxK,GAAG0N,WAAWjF,MAAMoE,IAAjB,CAAH,EAA2Ba,WAAWjF,MAAMqE,GAAjB,CAA3B,CAAN;AACD;AACD,iBAAOtC,GAAP;AACD;;AAED,eAAQwD,SAAR,CAAkBC,IAAlB,EAAwB;AACtB,cAAIA,SAASvN,MAAb,EAAqB;AACnB,mBAAOV,GAAGU,OAAOwN,UAAV,EAAsBxN,OAAOyN,WAA7B,CAAP;AACD;AACD;AACA,cAAI1F,QAAQsF,iBAAiBE,IAAjB,CAAZ;AACA,cAAI,CAACxF,KAAL,EAAY;AACV,mBAAOzI,GAAG,CAAH,EAAK,CAAL,CAAP;AACD;AACD,iBAAOA,GAAG0N,WAAWjF,MAAMI,KAAjB,CAAH,EAA4B6E,WAAWjF,MAAMC,MAAjB,CAA5B,CAAP;AACD;;AAED,eAAQ0F,SAAR,CAAkBH,IAAlB,EAAwBI,MAAxB,EAAgC;AAC9B;AACA;AACA;AACA,eAAKC,QAAL,CAAcL,IAAd,EAAoBI,OAAOzC,CAA3B,EAA8B,IAA9B;AACA,eAAK2C,SAAL,CAAeN,IAAf,EAAqBI,OAAOxC,CAA5B;AACD;;AAED,eAAOyC,QAAP,CAAgBL,IAAhB,EAAsBrC,CAAtB,EAAyB4C,OAAzB,EAAkC;AAChCP,eAAKxF,KAAL,CAAWI,KAAX,GAAmB,KAAK+C,CAAL,GAAS,IAA5B;AACA,cAAI,CAAC4C,OAAL,EAAcP,KAAKlB,aAAL,CAAmB,IAAIC,WAAJ,CAAgB,gBAAhB,CAAnB;AACf;;AAED,eAAOuB,SAAP,CAAiBN,IAAjB,EAAuBpC,CAAvB,EAA0B2C,OAA1B,EAAmC;AACjCP,eAAKxF,KAAL,CAAWC,MAAX,GAAoB,KAAKmD,CAAL,GAAS,IAA7B;AACA,cAAI,CAAC2C,OAAL,EAAcP,KAAKlB,aAAL,CAAmB,IAAIC,WAAJ,CAAgB,gBAAhB,CAAnB;AACf;;AAGD,eAAQY,iBAAR,CAA0BK,IAA1B,EAAgC;AAC9B;AACA,cAAI,CAACA,KAAKrF,qBAAV,EAAiC;AAC/B,mBAAO5I,GAAG,CAAH,EAAM,CAAN,CAAP;AACD;AACD,cAAI2I,SAASsF,KAAKrF,qBAAL,EAAb;AACA,iBAAO5I,GAAG2I,OAAOkE,IAAV,EAAgBlE,OAAOmE,GAAvB,CAAP;AACD;;AAED,eAAQlC,iBAAR,CAA0BqD,IAA1B,EAAgCzD,GAAhC,EAAqC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACArG,iBAAO2H,WAAP,CAAmBmC,IAAnB,EAAyBjO,GAAG,CAAH,EAAK,CAAL,CAAzB,CAAkC;AAAlC,YACA,IAAIyO,QAAQjE,IAAIkE,KAAJ,CAAUvK,OAAOyJ,iBAAP,CAAyBK,IAAzB,CAAV,CAAZ;AACA9J,iBAAOwK,MAAP,CAAcV,IAAd,EAAoBQ,KAApB;AACD;;AAED,eAAQG,eAAR,CAAwBX,IAAxB,EAA8B;AAC5B,iBAAO,KAAKL,iBAAL,CAAuBK,IAAvB,EAA6BY,KAA7B,CAAmC,KAAKb,SAAL,CAAeC,IAAf,EAAqBa,OAArB,CAA6B,GAA7B,CAAnC,CAAP;AACD;;AAED,eAAQC,eAAR,CAAwBd,IAAxB,EAA8BzD,GAA9B,EAAmC;AACjC,eAAKI,iBAAL,CAAuBqD,IAAvB,EAA6BzD,IAAIkE,KAAJ,CAAU,KAAKV,SAAL,CAAeC,IAAf,EAAqBa,OAArB,CAA6B,GAA7B,CAAV,CAA7B;AACD;;AAED,eAAOH,MAAP,CAAcV,IAAd,EAAoBQ,KAApB,EAA2BxC,eAA3B,EAA4C;AAC1C,eAAKH,WAAL,CAAiBmC,IAAjB,EAAuB,KAAKtB,WAAL,CAAiBsB,IAAjB,EAAuBY,KAAvB,CAA6BJ,KAA7B,CAAvB,EAA4D7K,SAA5D,EAAuEqI,eAAvE;AACD;;AAED,eAAQ+C,SAAR,CAAkBf,IAAlB,EAAwB;AACtB,cAAIzD,MAAMrG,OAAOwI,WAAP,CAAmBsB,IAAnB,CAAV;AACA,cAAII,SAASlK,OAAO6J,SAAP,CAAiBC,IAAjB,CAAb;AACA,iBAAOhO,KAAKuK,GAAL,EAAUA,IAAIqE,KAAJ,CAAUR,MAAV,CAAV,CAAP;AACD;;AAED,eAAQY,SAAR,CAAkBhB,IAAlB,EAAwBtF,MAAxB,EAAgC;AAC9BxE,iBAAO2H,WAAP,CAAmBmC,IAAnB,EAAyBtF,OAAOuG,OAAP,EAAzB;AACA/K,iBAAOiK,SAAP,CAAiBH,IAAjB,EAAuBtF,OAAO0F,MAAP,EAAvB;AACD;;AAGD,eAAQc,eAAR,CAAwBlB,IAAxB,EAA8B;AAC5B,cAAItF,SAASsF,KAAKrF,qBAAL,EAAb;AACA,cAAI,CAACD,MAAL,EAAa;AACX,mBAAO1I,KAAK,CAAL,EAAO,CAAP,EAAS,CAAT,EAAW,CAAX,CAAP;AACD;AACD,iBAAOA,KAAK0I,OAAOkE,IAAZ,EAAkBlE,OAAOmE,GAAzB,EAA8BnE,OAAOE,KAArC,EAA4CF,OAAOD,MAAnD,CAAP;AACD;;AAED;AACA,eAAO0G,oBAAP,CAA4BvI,OAA5B,EAAqC;;AAEnC,cAAIpE,MAAM4M,MAAMC,IAAN,CAAWzI,QAAQa,gBAAR,CAAyB,GAAzB,CAAX,EACP3F,MADO,CACAC,MAAMA,GAAGyG,KAAH,CAASmE,QAAT,IAAqB,UAArB,IAAmC5K,GAAGyG,KAAH,CAASmE,QAAT,IAAqB,UAD9D,EAEPrI,MAFO,CAEA,CAACsC,OAAD,CAFA,EAGPvE,GAHO,CAGHN,MAAMmC,OAAOgL,eAAP,CAAuBnN,EAAvB,CAHH,CAAV;AAIA,cAAIuN,GAAJ;AACA,cAAIC,GAAJ;AACA/M,cAAIE,OAAJ,CAAYX,MAAM;AAChB,gBAAIkN,UAAUlN,GAAGkN,OAAH,EAAd;AACA,gBAAIO,cAAczN,GAAGyN;AACrB;AADkB,cAAlB,CAEAD,MAAMN,QAAQQ,KAAR,CAAcF,OAAON,OAArB,CAAN;AACAK,kBAAME,YAAYE,KAAZ,CAAkBJ,OAAOE,WAAzB,CAAN;AACD;AACD;AAPA,YAQA,OAAOxP,KAAKuP,GAAL,EAAUD,GAAV,CAAP;AACD;;AAED,eAAOK,SAAP,GAAmB;AACjB,iBAAO5P,GACL2F,SAASkK,gBAAT,CAA0BC,UAA1B,IAAwC,CADnC,EAELnK,SAASkK,gBAAT,CAA0BE,SAA1B,IAAuC,CAFlC,CAAP;AAGD;;AAED;AACA,eAAOC,QAAP,CAAgB1O,GAAhB,EAAqB;AACnB,cAAIA,IAAI2O,QAAJ,IAAgB,SAApB,EAA+B;AAC7B,gBAAItF,YAAahF,SAASC,aAAT,CAAuB,kBAAvB,CAAjB;AACA,gBAAI+E,SAAJ,EAAe;AACbA,wBAAUuF,UAAV,CAAqB5O,IAAI6O,QAAzB;AACD,aAFD,MAEO;AACLjP,sBAAQC,GAAR,CAAY,0BAAyBG,GAArC;AACA,mBAAK8O,QAAL,CAAc9O,GAAd;AACD;AACF,WARD,MAQO;AACL,iBAAK8O,QAAL,CAAc9O,GAAd;AACD;AACF;;AAED,eAAO8O,QAAP,CAAgB9O,GAAhB,EAAqB;AACnB,cAAI+O,4BAAU1K,SAASI,aAAT,CAAuB,eAAvB,CAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACAxG,qBAAW+Q,YAAX,CAAwBD,MAAxB,EAAgC9M,IAAhC,CAAsCoH,SAAD,IAAe;AAChDxG,mBAAO2H,WAAP,CAAmBnB,SAAnB,EAA8BxG,OAAOnE,EAAP,CAAU,GAAV,EAAe,GAAf,CAA9B;AACAqQ,mBAAOE,MAAP,CAAcjP,GAAd;AACA+O,mBAAOnL,QAAP;AACH,WAJD;AAKD;;AAED,eAAOsL,eAAP,CAAuBpH,GAAvB,EAA4B;AAC1B,cAAIA,IAAIqH,YAAJ,GAAmB,CAAnB,MAA0B9K,SAAS8D,IAAvC,EAA6C;AAC7CvI,kBAAQC,GAAR,CAAY,uBAAuBiI,GAAnC;AACA/J,sBAAYqR,IAAZ;AACD;;AAED,eAAOC,eAAP,CAAuBhG,SAAvB,EAAkCvB,GAAlC,EAAuCyE,MAAvC,EAA+CpD,YAA/C,EAA6D;AAC3D,cAAI/J,OAAOkQ,WAAP,KACCA,YAAYC,cAAZ,MACAD,YAAYE,WAAZ,IAA6B5K,KAAKC,GAAL,KAAayK,YAAYE,WAA1B,GAAyC,GAFtE,CAAJ,EAEkF;AAChFjD,qBAASkD,IAAT;AACD;AACD5M,iBAAO9E,WAAP,CAAmBsM,MAAnB,CAA0BhB,SAA1B,EAAqCvB,GAArC,EAA0CyE,MAA1C,EAAkDpD,YAAlD;AACD;;AAED,eAAOuG,YAAP,CAAoBC,KAApB,EAA2BjK,IAA3B,EAAiCkK,OAAjC,EAA0CC,EAA1C,EAA8C;AAC5C,cAAI,CAAC,KAAKC,aAAV,EAAyB,KAAKA,aAAL,GAAqB,EAArB;AACzB,eAAKA,aAAL,CAAmBtO,IAAnB,CAAwB,EAACmO,OAAOA,KAAR,EAAejK,MAAMA,IAArB,EAA2BmK,IAAIA,EAA/B,EAAmCE,MAAMnL,KAAKC,GAAL,EAAzC,EAAxB;;AAGA,cAAImL,aAAaC,UAAb,KAA4B,SAAhC,EAA2CD,aAAaE,iBAAb;;AAE3C,cAAIH,OAAOnL,KAAKC,GAAL,EAAX;;AAEA;AACA,cAAG,KAAKiL,aAAL,CAAmBK,MAAnB,GAA4B,CAA5B,IACAvL,KAAKC,GAAL,KAAa,KAAKiL,aAAL,CAAmB,KAAKA,aAAL,CAAmBK,MAAnB,GAA4B,CAA/C,EAAkDJ,IAA/D,GAAsE,IADzE,EACgF;AAC9E,mBAAOnQ,QAAQC,GAAR,CAAY,kBAAkB8P,KAAlB,GAA2B,IAA3B,GAAkCjK,IAAlC,GAAyC,GAArD,CAAP;AACD;;AAED9F,kBAAQC,GAAR,CAAY,WAAW8P,KAAX,GAAoB,IAApB,GAA2BjK,IAA3B,GAAkC,GAA9C;;AAGA,cAAI0K,eAAe,IAAIJ,YAAJ,CAAiBL,SAAS,EAA1B,EAA8B;AAC/CU,kBAAM,0DADyC;AAE/ClI,kBAAMzC,QAAQ;AAFiC,WAA9B,CAAnB;AAIA,cAAImK,EAAJ,EAAQO,aAAaE,OAAb,GAAuBT,EAAvB;AACR,cAAID,YAAYtN,SAAhB,EAA2BsN,UAAU,CAAV;AAC3BjM,qBAAW,MAAMyM,aAAaG,KAAb,EAAjB,EAAuCX,UAAU,IAAjD;AACA;AAED;;AAED;;;;;;;;;;;;;;AAcA,qBAAa7L,MAAb,CAAoByM,cAApB,EAAoC9K,IAApC,EAA0CkK,OAA1C,EAAmDC,EAAnD,EAAuDY,KAAvD,EAA8D;AAC5D,cAAI;AACF;AACA;AACA,gBAAId,QAAQa,cAAZ;AACA,gBAAIhR,kBAAJ,CAAuB,EAAEmQ,KAAF,EAASjK,IAAT,EAAvB,EAAwC/F,gBAAxC;AACA,gBAAI6Q,kBAAkBA,eAAeb,KAArC,EAA4C;AAC1CA,sBAAQa,eAAeb,KAAvB;AACAjK,qBAAO8K,eAAeb,KAAtB;AACAC,wBAAUY,eAAeZ,OAAzB;AACAC,mBAAKW,eAAeE,IAApB;AACAD,sBAAQD,eAAeC,KAAvB;;AAEA;AACA,kBAAID,eAAeG,OAAnB,EAA4B;AAC1Bd,qBAAK,MAAM;AACThN,yBAAOmG,aAAP,CAAqBwH,eAAeG,OAApC,EAA6C1O,IAA7C,CAAmD+E,QAAQ;AACzDA,yBAAKC,aAAL,CAAmBC,YAAnB,CAAgC,OAAhC,EAAyCyI,KAAzC;AACA3I,yBAAK4J,cAAL,GAAsB,MAAM,KAA5B,CAFyD,CAEtB;AACpC,mBAHD;AAID,iBALD;AAMD;AACF;;AAED,gBAAIC,mBAAmBxM,SAASC,aAAT,CAAuB,0BAAvB,CAAvB;AACA,gBAAI,CAACuM,gBAAL,EAAuB;AACrBA,iCAAmB,yBAAMhO,OAAOsH,MAAP,CAAc,0BAAd,EAA0C9F,SAAS8D,IAAnD,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAnB;AACA0I,+BAAiBC,eAAjB,CAAiCnB,KAAjC,EAAwCjK,IAAxC,EAA8CkK,OAA9C,EAAuDC,EAAvD,EAA2DY,KAA3D;AACD,aAHD,MAGO;AACL,kBAAIM,wBAAwBhD,MAAMC,IAAN,CAAW3J,SAAS+B,gBAAT,CAA0B,qBAA1B,CAAX,EAA6DtF,IAA7D,CAAkEJ,MAAM,KAAKA,GAAGiP,KAAR,KAAkB,KAAKA,KAAvB,IAAgC,KAAKjP,GAAGkG,OAAR,KAAoB,KAAKlB,IAAjI,CAA5B;AACA,kBAAIqL,qBAAJ,EAA2B;AACzBA,sCAAsBC,OAAtB;AACAD,sCAAsBE,MAAtB;AACD,eAHD,MAGO;AACLJ,iCAAiBC,eAAjB,CAAiCnB,KAAjC,EAAwCjK,IAAxC,EAA8CkK,OAA9C,EAAuDC,EAAvD,EAA2DY,KAA3D;AACD;AACF;AACF,WApCD,CAoCE,OAAMtO,CAAN,EAAS;AACTvC,oBAAQC,GAAR,CAAY,0BAAZ,EAAwC,4BAAxC,EAAsEsC,CAAtE;AACD;AACF;;AAED,eAAO+O,OAAP,CAAevB,KAAf,EAAsBjK,IAAtB,EAA4BkK,OAA5B,EAAqCC,EAArC,EAAyC;AACvChN,iBAAOkB,MAAP,CAAc4L,KAAd,EAAqBjK,IAArB,EAA2BkK,OAA3B,EAAoCC,EAApC,EAAwC,OAAxC;AACD;;AAED,eAAOlN,IAAP,CAAYgN,KAAZ,EAAmBjK,IAAnB,EAAyBkK,OAAzB,EAAkCC,EAAlC,EAAsC;AACpChN,iBAAOkB,MAAP,CAAc4L,KAAd,EAAqBjK,IAArB,EAA2BkK,OAA3B,EAAoCC,EAApC,EAAwC,QAAxC;AACD;;AAED,eAAOpJ,KAAP,CAAakJ,KAAb,EAAoBjK,IAApB,EAA0BkK,OAA1B,EAAmCC,EAAnC,EAAuC;AACrC;AACAhN,iBAAOkB,MAAP,CAAc4L,KAAd,EAAqBjK,IAArB,EAA2BkK,OAA3B,EAAoCC,EAApC,EAAwC,KAAxC;AACD;;AAED,qBAAasB,UAAb,GAA0B;AACxB,cAAIC,OAAOvO,OAAOuO,IAAlB;AACA,cAAI,CAACA,IAAL,EAAW;AACTA,mBAAO,yBAAMvO,OAAOsH,MAAP,CAAc,aAAd,EAA6B9F,SAAS8D,IAAtC,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAP;AACAiJ,iBAAKjK,KAAL,CAAWkK,UAAX,GAAwB,QAAxB;AACD;AACD,iBAAOD,IAAP;AACD;;AAED;AACA,mBAAWA,IAAX,GAAkB;AAChB,iBAAO/M,SAAS8D,IAAT,CAAc7D,aAAd,CAA4B,sBAA5B,CAAP;AACD;;AAED,mBAAWgN,SAAX,GAAuB;AACrB,iBAAOtS,UAAUuS,OAAjB;AACA;AACA;AACA;AACA;AACA;AACA;AACD;;AAED;;;;;AAKA;AACA,eAAOC,gBAAP,CAAwBC,GAAxB,EAA6B;AAC3BA,gBAAMA,OAAOpN,QAAb;AACA,eAAK2D,gBAAL,CAAsB,QAAtB,EAAgCyJ,GAAhC,EAAqC,WAArC,EAAkD,UAAS3J,GAAT,EAAa;AAC7DjF,mBAAO6O,WAAP,CAAmB5J,GAAnB;AAAwB,WAD1B,EAC4B,KAD5B;AAEA,eAAKE,gBAAL,CAAsB,QAAtB,EAAgCyJ,GAAhC,EAAqC,aAArC,EAAoD,UAAS3J,GAAT,EAAc;AAC9DjF,mBAAO8O,aAAP,CAAqB7J,GAArB;AACH,WAFD,EAEG,KAFH;AAGA,eAAKE,gBAAL,CAAsB,QAAtB,EAAgCyJ,GAAhC,EAAqC,OAArC,EAA8C,UAAS3J,GAAT,EAAa;AAACjF,mBAAOqM,eAAP,CAAuBpH,GAAvB;AAA4B,WAAxF,EAA0F,KAA1F;AACA,eAAKE,gBAAL,CAAsB,QAAtB,EAAgCyJ,GAAhC,EAAqC,SAArC,EAAgD,UAAS3J,GAAT,EAAa;AAACjF,mBAAO7E,IAAP,CAAY4T,MAAZ,CAAmB9J,GAAnB;AAAwB,WAAtF,EAAwF,KAAxF;;AAEA,eAAKE,gBAAL,CAAsB,QAAtB,EAAgCyJ,GAAhC,EAAqC,OAArC,EAA8C,UAAS3J,GAAT,EAAa;AAACjF,mBAAO7E,IAAP,CAAY6T,OAAZ,CAAoB/J,GAApB;AAAyB,WAArF,EAAuF,KAAvF;AACA5I,iBAAO4S,YAAP;AACD;;AAED,qBAAaC,kBAAb,CAAgCN,GAAhC,EAAqCO,iBAArC,EAAwDC,aAAxD,EAAuE;;AAErE,eAAKD,iBAAL,GAAyBA,iBAAzB;;AAEA,gBAAME,eAAN;;AAEA,eAAKF,iBAAL,GAAyBA,iBAAzB;;AAEApS,kBAAQC,GAAR,CAAY,4BAAZ;AACA;;AAEA,gBAAMgD,OAAOoC,iBAAP,CAAyB,cAAzB,EAAyCgB,aAAa,qDAAtD,CAAN;;AAEApD,iBAAO5E,UAAP,CAAkBkU,UAAlB,CAA6B,qBAA7B;AACAtP,iBAAO5E,UAAP,CAAkBkU,UAAlB,CAA6B,0BAA7B;;AAEA,eAAKX,gBAAL,CAAsBC,GAAtB;AACA,eAAKW,eAAL;;AAEAvP,iBAAOmF,gBAAP,CAAwB,iBAAxB,EAA2C3D,QAA3C,EAAqD,WAArD,EAAmEyD,GAAD,IAAS;AACzE,gBAAKA,IAAIqH,YAAJ,GAAmB,CAAnB,MAA0B9K,SAAS8D,IAAxC,EAA+C;AAC7CL,kBAAIuK,eAAJ;AACAvK,kBAAIwK,cAAJ;AACD;AACF,WALD;;AAOA1S,kBAAQC,GAAR,CAAYT,OAAOmT,YAAnB,EAAiC;AACjC;;AAEA;AAHA,YAIA,MAAM1P,OAAOoC,iBAAP,CAAyB,SAAzB,EAAoCgB,aAAY,wBAAhD,CAAN;;AAEA,gBAAMvI,YAAY6T,OAAZ,CAAoBiB,uBAApB,EAAN;AACA/U,sBAAYgV,eAAZ;AACA,cAAIhV,YAAYsE,GAAZ,CAAgB,aAAhB,CAAJ,EAAoC;AAClC,kBAAM2Q,qBAAqB3E,MAAMC,IAAN,CAAW3J,SAAS8D,IAAT,CAAc/B,gBAAd,CAA+B,iBAA/B,CAAX,CAA3B;AACA,gBAAGsM,mBAAmBvC,MAAnB,KAA8B,CAAjC,EAAoC;AAClCuC,iCAAmB1R,GAAnB,CAAuB2R,OAAOA,IAAI1L,aAAJ,CAAkB1C,MAAlB,EAA9B;AACD;AACD1B,mBAAOkE,qBAAP,CAA6B,iBAA7B;AACD;AACD;;AAEA,gBAAMlE,OAAOsO,UAAP,EAAN;;AAGA;;AAEA;AACA;AACA9M,mBAAS8D,IAAT,CAAchB,KAAd,CAAoByL,SAApB,GAAgC,MAAhC;;AAGA,cAAIZ,iBAAJ,EAAuB;AACrBnP,mBAAOkB,MAAP,CAAc,2BAAd,EACE,sCACA,iCAFF;AAID,WALD,MAKO;;AAEL;AACA;;AAEA,gBAAI8O,WAAWxO,SAASC,aAAT,CAAuB,OAAvB,CAAf;AACA,gBAAI,CAACuO,QAAL,EAAe;AACbA,4CAAWxO,SAASI,aAAT,CAAuB,OAAvB,CAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACAoO,uBAAS/J,WAAT,GAAuB,UAAvB;AACAzE,uBAASU,IAAT,CAAcC,WAAd,CAA0B6N,QAA1B;AACD;;AAEDxO,qBAAS8D,IAAT,CAAchB,KAAd,CAAoByB,eAApB,GAAsC,kBAAtC;AACA/J,oBAAQiU,MAAR,CAAezO,SAAS8D,IAAxB;;AAGA,iBAAK8J,aAAL,GAAqBA,aAArB,CAhBK,CAgB8B;AACnC;AACA;AACA;AACD;;AAED,cAAG,KAAKc,oBAAR,EAA8B;AAC5B1O,qBAASkK,gBAAT,CAA0BC,UAA1B,GAAuC,KAAKuE,oBAAL,CAA0BzI,CAAjE;AACAjG,qBAASkK,gBAAT,CAA0BE,SAA1B,GAAsC,KAAKsE,oBAAL,CAA0BxI,CAAhE;AACA,mBAAO,KAAKwI,oBAAZ;AACH;;AAECnT,kBAAQC,GAAR,CAAY,yBAAyB,CAAC,CAACmT,YAAYnO,GAAZ,KAAoBoO,mBAAmBC,KAAxC,IAAiD,IAAlD,EAAwDC,OAAxD,CAAgE,CAAhE,CAAzB,GAA8F,GAA1G;AACAvT,kBAAQC,GAAR,CAAYT,OAAOmT,YAAnB,EAAiC,2BAAjC;;AAGA5O,qBAAW,MAAM;AACf/D,oBAAQC,GAAR,CAAY,sBAAZ;AACAnC,wBAAY6T,OAAZ,CAAoB2B,KAApB;AACD,WAHD,EAGG,IAHH;AAID;;AAID,qBAAaE,iBAAb,GAAiC;AAC/B,cAAI/J,YAAYhF,SAASC,aAAT,CAAuB,cAAvB,CAAhB;AACA,cAAI,CAAC+E,SAAL,EAAgB;AACd,gBAAI4C,IAAI,yBAAMpJ,OAAOsH,MAAP,CAAc,eAAd,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAR;AACA9F,qBAAS8D,IAAT,CAAcnD,WAAd,CAA0BiH,CAA1B;AACA5C,wBAAY,yBAAMxG,OAAOsH,MAAP,CAAc,kBAAd,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAZ;AACA8B,cAAEjH,WAAF,CAAcqE,SAAd;AACAA,sBAAUgK,mBAAV;AACD;AACD,iBAAOhK,SAAP;AACD;;AAED,eAAO+I,eAAP,GAAyB;AACvB,cAAI,CAAChT,OAAOyD,MAAZ,EAAoB;AAClB,mBAAOc,WAAW,MAAM;AAAE,mBAAKyO,eAAL;AAAwB,aAA3C,EAA6C,GAA7C,CAAP;AACD;AACD,cAAI,CAAC/N,SAAS8D,IAAT,CAAc7D,aAAd,CAA4B,aAA5B,CAAL,EAAiD;AAC/CzB,mBAAO5E,UAAP,CAAkBqV,UAAlB,oBAA6BjP,SAASI,aAAT,CAAuB,aAAvB,CAA7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAoExC,IAApE,CAAyE+E,QAAQ;AAC/EA,mBAAKE,YAAL,CAAkB,2BAAlB,EAA+C,KAA/C;AACD,aAFD;AAGD;AACF;;AAED,eAAOqM,MAAP,GAAgB;;AAEd1Q,iBAAOkB,MAAP,CAAc,+DAAd;AACD;;AAED;;;;;AAKA,qBAAaD,cAAb,CAA4BnG,IAA5B,EAAkC;AAChC,cAAI6V,UAAU,MAAMvV,WAAWwV,eAAX,CAA2B9V,IAA3B,CAApB;AACA,cAAI,CAAC6V,OAAL,EAAc;;AAEd,cAAIE,kBAAkB3F,MAAMC,IAAN,CAAW3J,SAAS8D,IAAT,CAAc/B,gBAAd,CAA+BoN,OAA/B,CAAX,CAAtB;AACA,cAAG3Q,OAAO8Q,IAAV,EAAgB;AACdD,4BAAgBlS,IAAhB,CAAqB,GAAGqB,OAAO8Q,IAAP,CAAYC,UAAZ,CAAuBxN,gBAAvB,CAAwCoN,OAAxC,CAAxB;AACD;AACDE,0BAAgBrS,OAAhB,CAAwBwS,eAAe;AACrC,gBAAIA,YAAYC,eAAhB,EAAiC;AACjC,gBAAID,YAAYE,oBAAZ,KAAqC,SAAzC,EAAoD;;AAEpD;AACA;;AAEA,gBAAIC,QAAQH,YAAY5M,aAAZ,IAA6B4M,YAAYI,UAArD;AACA,gBAAIC,iCAAc7P,SAASI,aAAT,CAAuB+O,OAAvB,CAAd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAJ;;AAEA,gBAAIK,YAAYM,gBAAhB,EAAkC;AAChCN,0BAAYM,gBAAZ,CAA6BN,WAA7B;AACD;AACD,gBAAIG,KAAJ,EAAW;AACTA,oBAAMI,YAAN,CAAmBF,WAAnB,EAAgCL,WAAhC;AACD;AACD9F,kBAAMC,IAAN,CAAW6F,YAAYQ,UAAvB,EAAmChT,OAAnC,CAA2CX,MAAM;AAC/C,kBAAIA,EAAJ,EAAQ;AAAE;AACRwT,4BAAYlP,WAAZ,CAAwBtE,EAAxB;AACA;AACD;AACF,aALD;;AAOAqN,kBAAMC,IAAN,CAAW6F,YAAYS,UAAvB,EAAmCjT,OAAnC,CAA2CX,MAAM;AAC/C;AACAwT,0BAAYhN,YAAZ,CAAyBxG,GAAGiB,IAA5B,EAAkCjB,GAAGqI,KAArC;AACD,aAHD;;AAKA;AACA,gBAAI8K,YAAY1M,KAAZ,CAAkBmE,QAAlB,IAA8B,UAAlC,EAA8C;AAC5C4I,0BAAY/M,KAAZ,CAAkBqE,GAAlB,GAAwBqI,YAAY1M,KAAZ,CAAkBqE,GAA1C;AACA0I,0BAAY/M,KAAZ,CAAkBoE,IAAlB,GAAyBsI,YAAY1M,KAAZ,CAAkBoE,IAA3C;AACD;;AAED;AACA,gBAAInM,OAAOqQ,IAAP,IAAeoE,WAAnB,EAAgC;AAC9BzU,qBAAOqQ,IAAP,GAAcyE,WAAd;AACD;;AAED,gBAAIA,YAAYK,aAAhB,EAA+B;AAC7BL,0BAAYK,aAAZ,CAA0BV,WAA1B,EAD6B,CACW;AACzC;;AAED;AACAxP,qBAAS+B,gBAAT,CAA0B,kBAA1B,EAA8C/E,OAA9C,CAAsDsI,aAAa;AACjE,kBAAIA,UAAU6K,YAAV,KAA2BX,WAA/B,EAA4C;AAC1ClK,0BAAUE,OAAV,CAAkBqK,WAAlB;AACD;AACF,aAJD;AAKD,WAjDD;;AAoDA;AACArR,iBAAO4R,eAAP,CAAuB/T,MAAMA,GAAG8S,OAAH,IAAcA,QAAQkB,WAAR,EAA3C,EAAkE,IAAlE,EAAwErT,OAAxE,CAAiFX,MAAM;AACrF,gBAAIA,GAAGiU,YAAP,EAAqB;AACnB,kBAAI;AACFjU,mBAAGiU,YAAH;AACD,eAFD,CAEE,OAAMxS,CAAN,EAAS;AACTvC,wBAAQ6G,KAAR,CAActE,CAAd;AACD;AACF;AACF,WARD;AASD;;AAED,eAAOyS,WAAP,CAAmBrI,MAAnB,EAA2B;AACzB,cAAIsI,0BAAOxQ,SAASI,aAAT,CAAuB,KAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACAoQ,eAAKC,SAAL,CAAeC,GAAf,CAAmB,UAAnB;AACAF,eAAKtI,MAAL,GAAcA,MAAd;AACAsI,eAAK3K,UAAL,GAAkB,IAAlB;AACA2K,eAAK1N,KAAL,CAAWI,KAAX,GAAmB,OAAnB;AACAsN,eAAK1N,KAAL,CAAW,gBAAX,IAA+B,MAA/B;AACA0N,eAAK3N,YAAL,CAAkB,cAAlB,EAAkC,MAAlC;AACA2N,eAAK1N,KAAL,CAAWsJ,KAAX,GAAmB,UAAnB;AACAoE,eAAKG,MAAL,GAAc,YAAW;AACvBnS,mBAAOyG,iBAAP,CAAyB,IAAzB,EAA+BzG,OAAOyJ,iBAAP,CAAyB,KAAKC,MAA9B,EAAsCa,KAAtC,CAA4C1O,GAAG,CAAH,EAAM,EAAN,CAA5C,CAA/B;AACD,WAFD;AAGAmW,eAAK1N,KAAL,CAAW,SAAX,IAAwB,KAAxB;AACA0N,eAAKG,MAAL;AACAnS,iBAAOmF,gBAAP,CAAwB,aAAxB,EAAuCuE,MAAvC,EAA+C,kBAA/C,EAAmE,MAAM;AACvEsI,iBAAKG,MAAL;AACD,WAFD;AAGAH,eAAKI,IAAL,GAAY,YAAW;AACrB,iBAAK1Q,MAAL;AACA1B,mBAAOqS,mBAAP,CAA2B,aAA3B,EAA0C3I,MAA1C,EAAkD,kBAAlD;AACD,WAHD;;AAKAlI,mBAAS8D,IAAT,CAAcnD,WAAd,CAA0B6P,IAA1B;AACA,iBAAOA,IAAP;AACD;;AAGD,eAAOM,SAAP,CAAiBzK,KAAjB,EAAwB0K,eAAxB,EAAyC;AACvC,iBAAO,KAAKC,QAAL,CAAc3K,KAAd,EAAqBhM,GAAG,CAAH,EAAK,CAAL,CAArB,EAA8B0W,eAA9B,CAAP;AACD;;AAED,eAAOE,SAAP,CAAiBxN,GAAjB,EAAsBsN,eAAtB,EAAuC;AACrC,cAAI3P,IAAI5C,OAAOsS,SAAP,CAAiBzW,GAAGoJ,IAAIoE,OAAP,EAAgBpE,IAAIqE,OAApB,CAAjB,EAA+CiJ,eAA/C,CAAR;AACA3P,YAAE0B,KAAF,CAAQyB,eAAR,GAA0B,sBAA1B;AACA,iBAAOnD,CAAP;AACD;;AAED,eAAO4P,QAAP,CAAgB3K,KAAhB,EAAuBqC,MAAvB,EAA+BqI,kBAAgB,IAA/C,EAAqD;AACnD;AACA,cAAI1K,SAAS,CAACqC,MAAd,EAAsB;AACpBA,qBAASrC,MAAMqC,MAAN,EAAT;AACArC,oBAAQA,MAAMkD,OAAN,EAAR;AACD;;AAED,cAAI,CAAClD,KAAD,IAAU,CAACA,MAAM0C,KAArB,EAA4B;AAC5B,cAAIpG,0BAAO3C,SAASI,aAAT,CAAuB,KAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACAuC,eAAKG,KAAL,CAAW,gBAAX,IAA+B,MAA/B;AACAH,eAAKG,KAAL,CAAWI,KAAX,GAAmBwF,OAAOzC,CAAP,GAAW,IAA9B;AACAtD,eAAKG,KAAL,CAAWC,MAAX,GAAoB2F,OAAOxC,CAAP,GAAW,IAA/B;AACAvD,eAAKG,KAAL,CAAWoO,OAAX,GAAqB,KAArB;AACAvO,eAAKG,KAAL,CAAWyB,eAAX,GAA6B,mBAA7B;AACA5B,eAAKG,KAAL,CAAWqO,MAAX,GAAoB,IAApB;AACAxO,eAAKkD,UAAL,GAAkB,IAAlB;;AAEA,cAAIuL,aAAapR,SAAS8D,IAAT,CAAcb,qBAAd,EAAjB;;AAGAjD,mBAAS8D,IAAT,CAAcnD,WAAd,CAA0BgC,IAA1B;AACAnE,iBAAO2H,WAAP,CAAmBxD,IAAnB,EAAyB0D,MAAM0C,KAAN,CAAY1O,GAAG+W,WAAWlK,IAAd,EAAoBkK,WAAWjK,GAA/B,CAAZ,CAAzB;AACAxE,eAAKE,YAAL,CAAkB,cAAlB,EAAkC,MAAlC;;AAEA,cAAIkO,eAAJ,EAAqB;AACnBzR,uBAAY,MAAMqD,KAAKzC,MAAL,EAAlB,EAAiC6Q,eAAjC;AACD;AACD;AACA,iBAAOpO,IAAP;AACD;;AAGD,eAAO0O,QAAP,CAAgBxV,IAAhB,EAAsBuQ,KAAtB,EAA6BkF,UAA7B,EAAyC;AACvClF,kBAAQA,SAAS,KAAjB;AACA,cAAIzJ,OAAO,KAAK4O,UAAL,CAAgB1V,IAAhB,EAAsBuQ,KAAtB,EAA6BkF,UAA7B,CAAX;AACAtR,mBAAS8D,IAAT,CAAcnD,WAAd,CAA0BgC,IAA1B;AACAA,eAAKG,KAAL,CAAWqO,MAAX,GAAoB,IAApB;AACA3S,iBAAOyG,iBAAP,CAAyBtC,IAAzB,EAA+BtI,GAAG,CAAH,EAAK,CAAL,CAA/B;AACAsI,eAAKE,YAAL,CAAkB,cAAlB,EAAkC,MAAlC;AACAF,eAAKkD,UAAL,GAAkB,IAAlB;AACAlD,eAAKG,KAAL,CAAW0O,aAAX,GAA2B,MAA3B;AACA7O,eAAKG,KAAL,CAAW2O,WAAX,GAAyB,MAAzB;AACAnS,qBAAY,MAAMqD,KAAKzC,MAAL,EAAlB,EAAiC,IAAjC;AACA,iBAAOyC,IAAP;AACD;;AAED,eAAO4O,UAAP,CAAkB1V,IAAlB,EAAwBuQ,KAAxB,EAA+BkF,UAA/B,EAA2CI,KAA3C,EAAkD;AAChD,cAAI,CAAC7V,IAAD,IAASA,KAAKiQ,MAAL,GAAc,CAA3B,EAA8B;AAC9B,cAAIwF,eAAerT,SAAnB,EAA8BqT,aAAa,IAAb;;AAE9B,cAAI3O,OAAO3C,SAAS2R,eAAT,CAAyB,4BAAzB,EAAuD,KAAvD,CAAX;AACAhP,eAAKG,KAAL,GAAc;;;;;;;2BAAd;;AASA,cAAI8O,QAAQ/V,KAAKc,GAAL,CAAS,CAACN,EAAD,EAAIwV,CAAJ,KAAU,CAACA,KAAK,CAAL,GAAS,IAAT,GAAgB,IAAjB,IAAyBxV,GAAG4J,CAA5B,GAAgC,GAAhC,GAAsC5J,GAAG6J,CAA5D,EAA+D4L,IAA/D,CAAoE,GAApE,CAAZ;AACA,cAAIC,OACP;;;6DAG4D3F,KAAM;;eAJ/D;;AAQA,cAAI4F,OAAO/Y,EAAE+Y,IAAF,CAAOnW,IAAP,CAAX;;AAEA8G,eAAKpB,SAAL,GAAiBwQ,OAAQ,uCAAsC3F,KAAM,QAAOwF,KAAM;eAE9EN,aAAa,gCAAb,GAAgD,EACjD,WAHc,GAGC,oDAAmDlF,KAAM;;eAEhE4F,KAAK/L,CAAE,QAAO+L,KAAK9L,CAAE,aAAYwL,QAAQA,KAAR,GAAgB,EAAG;OAL/D;;AAQA,iBAAO/O,IAAP;AACD;;AAGD,qBAAasP,UAAb,CAAwB7M,MAAxB,EAAgC3B,GAAhC,EAAqC;AACnC,cAAI2B,kBAAkB8M,WAAtB,EAAmC;AACjC,gBAAI,CAAC9M,OAAO+M,SAAP,CAAiB5V,KAAjB,CAAuB,GAAvB,CAAL,EAAkC;AAChC,qBAAOiC,OAAOkB,MAAP,CAAc,0CAAd,CAAP;AACD;AACDlB,mBAAO4T,WAAP,EAAmB,MAAM,KAAKxY,UAAL,CAAgByY,sBAAhB,CAAuCjN,OAAO+M,SAAP,GAAmB,OAA1D,CAAzB,GAA6F,IAA7F;AACD,WALD,MAKO;AACL3T,mBAAOkB,MAAP,CAAc,gCAAgC0F,MAA9C;AACD;AACF;;AAED,qBAAakN,eAAb,CAA6BlN,MAA7B,EAAqC3B,GAArC,EAA0C;AACxC,cAAI2B,kBAAkB8M,WAAtB,EAAmC;AACjC,gBAAI,CAAC9M,OAAO+M,SAAP,CAAiB5V,KAAjB,CAAuB,GAAvB,CAAL,EAAkC;AAChC,qBAAOiC,OAAOkB,MAAP,CAAc,0CAAd,CAAP;AACD;AACD,gBAAI6S,eAAc,MAAM,KAAK3Y,UAAL,CAAgByY,sBAAhB,CAAuCjN,OAAO+M,SAAP,GAAmB,OAA1D,CAAxB;AAAA,gBACE9O,SAAS,MAAMlC,MAAMoR,YAAN,EAAoB3U,IAApB,CAA0BwD,KAAKA,EAAEC,IAAF,EAA/B,CADjB;AAAA,gBAEEmR,WAAWhU,OAAOlF,IAAP,CAAYmZ,SAAZ,CAAsBpP,MAAtB,EAA8B5G,IAA9B,CAAoCJ,MAAMA,GAAG8S,OAAH,IAAc,UAAxD,CAFb;AAAA,gBAGEuD,YAAY,MAAM,KAAK9Y,UAAL,CAAgByY,sBAAhB,CAAuCjN,OAAO+M,SAAP,GAAmB,KAA1D,CAHpB;AAIA3T,mBAAO4T,WAAP,CAAmBM,SAAnB,EAA8B,IAA9B;AACD,WATD,MASO;AACLlU,mBAAOkB,MAAP,CAAc,gCAAgC0F,MAA9C;AACD;AACF;;AAGD,eAAOuN,WAAP,CAAmBC,IAAnB,EAAyBrH,OAAzB,EAAkC;AAChC,cAAI,CAACqH,IAAD,IAAS,CAACA,KAAK3P,qBAAnB,EAA0C;AAC1C,cAAIN,0BAAO3C,SAASI,aAAT,CAAuB,KAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACA,cAAI4C,SAAS4P,KAAK3P,qBAAL,EAAb;AACA,cAAImO,aAAapR,SAAS8D,IAAT,CAAcb,qBAAd,EAAjB;AACA,cAAI4P,SAASxY,GAAG+W,WAAWlK,IAAd,EAAoBkK,WAAWjK,GAA/B,CAAb;AACA,cAAItC,MAAMxK,GAAG2I,OAAOkE,IAAV,EAAgBlE,OAAOmE,GAAvB,EAA4B4B,KAA5B,CAAkC8J,MAAlC,CAAV;;AAEAlQ,eAAKG,KAAL,CAAWI,KAAX,GAAmBF,OAAOE,KAAP,GAAc,IAAjC;AACAP,eAAKG,KAAL,CAAWC,MAAX,GAAoBC,OAAOD,MAAP,GAAe,IAAnC;AACAJ,eAAKG,KAAL,CAAW,gBAAX,IAA+B,MAA/B;AACA;AACAH,eAAKG,KAAL,CAAW,SAAX,IAAwB,IAAxB;AACAH,eAAKG,KAAL,CAAWgQ,MAAX,GAAoB,eAApB;AACAnQ,eAAKkD,UAAL,GAAkB,IAAlB;AACA7F,mBAAS8D,IAAT,CAAcnD,WAAd,CAA0BgC,IAA1B;AACAnE,iBAAO2H,WAAP,CAAmBxD,IAAnB,EAAyBkC,GAAzB;AACAlC,eAAKE,YAAL,CAAkB,cAAlB,EAAkC,MAAlC;;AAEAF,eAAKpB,SAAL,GAAiB,iJACbqR,KAAKzD,OADQ,GACC,IADD,GACQyD,KAAKvS,EADb,GACkB,IADlB,GAEbuS,KAAK5Q,YAAL,CAAkB,OAAlB,CAFa,GAEe,IAFf,GAIb,QAJJ;;AAMA1C,qBAAY,MAAMqD,KAAKzC,MAAL,EAAlB,EAAiCqL,WAAW,IAA5C;AACA,iBAAO5I,IAAP;AACD;;AAGD;AACA,eAAOoQ,OAAP,CAAeH,IAAf,EAAqBpX,MAAI,EAAzB,EAA6B+P,OAA7B,EAAsC;;AAEpC,cAAIyH,iBAAiBhY,oBAAoB0C,GAApB,CAAwBkV,IAAxB,CAArB;AACA,cAAI,CAACI,cAAD,IAAmB,CAACA,eAAepQ,aAAvC,EAAsD;AACpD,gBAAIqQ,YAAY,EAAhB;AACD,WAFD,MAEO;AACLA,wBAAYD,eAAe/S,aAAf,CAA6B,KAA7B,EAAoCwE,WAAhD;AACD;AACD,cAAIyO,aAAa1U,OAAOmU,WAAP,CAAmBC,IAAnB,EAAyBrH,OAAzB,CAAjB;AACAvQ,8BAAoBmY,GAApB,CAAwBP,IAAxB,EAA8BM,UAA9B;AACAA,qBAAWjT,aAAX,CAAyB,KAAzB,EAAgCwE,WAAhC,GAA8CwO,YAAY,IAAZ,GAAmBzX,GAAjE;AAED;;AAGD,qBAAa4X,YAAb,CAA0B1B,KAA1B,EAAiC;AAC/B,cAAI2B,oBAAqBrT,SAASC,aAAT,CAAuB,oBAAvB,CAAzB;AACA,cAAI,CAACoT,iBAAL,EAAwB;AACtBA,mDAAoBrT,SAASI,aAAT,CAAuB,KAAvB,CAApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACAiT,8BAAkBhT,EAAlB,GAAuB,mBAAvB;AACAgT,8BAAkBxN,UAAlB,GAA+B,IAA/B;AACA;AACAwN,8BAAkBvQ,KAAlB,CAAwBqO,MAAxB,GAAiC,IAAjC;AACAnR,qBAAS8D,IAAT,CAAcnD,WAAd,CAA0B0S,iBAA1B;AACA7U,mBAAOyG,iBAAP,CAAyBoO,iBAAzB,EAA4ChZ,GAAG,EAAH,EAAO,EAAP,CAA5C;AACD;;AAED,cAAIiZ,8BAAWtT,SAASI,aAAT,CAAuB,iBAAvB,CAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACA,gBAAMxG,WAAWoM,MAAX,CAAkBqN,iBAAlB,EAAqCC,QAArC,CAAN;AACA9U,iBAAOiK,SAAP,CAAiB6K,QAAjB,EAA2BjZ,GAAG,GAAH,EAAO,EAAP,CAA3B;AACAiZ,mBAAS7O,WAAT,GAAuBiN,KAAvB;AACA,iBAAO4B,QAAP;AACD;;AAED,eAAOC,aAAP,CAAqBnN,GAArB,EAA0BoN,MAA1B,EAAkC;AAChCA,mBAASA,UAAU,EAAnB;AACAvX,iBAAOwX,mBAAP,CAA2BrN,GAA3B,EAAgCpJ,OAAhC,CAAyCM,QAAQ;AAACkW,mBAAOlW,IAAP,IAAe8I,IAAIhL,WAAJ,CAAgBkC,IAA/B;AAAoC,WAAtF;AACA,cAAI8I,IAAIsN,SAAR,EAAmB;AACjBlV,mBAAO+U,aAAP,CAAqBnN,IAAIsN,SAAzB,EAAoCF,MAApC;AACD;AACD,iBAAOA,MAAP;AACD;;AAED,eAAOG,+BAAP,CAAuCC,SAAvC,EAAkD;AAChD,iBAAOA,UAAU3U,OAAV,CAAkB,QAAlB,EAA4B5C,MAAM,MAAMA,GAAGwX,WAAH,EAAxC,EAA0D5U,OAA1D,CAAkE,IAAlE,EAAuE,EAAvE,CAAP;AACD;;AAGD;AACA;AACA;AACA;AACA;;AAEA,qBAAa6U,gBAAb,GAAgC;AAC9B,cAAItB,WAAWxS,SAAS+T,aAAT,CAAuBC,aAAvB,CAAqC/T,aAArC,CAAmD,UAAnD,CAAf;AACA,cAAIgU,QAAQjU,SAASkU,UAAT,CAAoB1B,SAAS2B,OAA7B,EAAsC,IAAtC,CAAZ;AACA,cAAIC,KAAJ;AACA,cAAIR,YAAYpB,SAASxQ,YAAT,CAAsB,YAAtB,CAAhB;AACA,cAAI4R,SAAJ,EAAe;AACb;AACA,gBAAIS,WAAW,KAAKV,+BAAL,CAAqCC,SAArC,CAAf;AACA,gBAAIjY,MAAM,MAAM,KAAK/B,UAAL,CAAgByY,sBAAhB,CAAuCgC,WAAU,KAAjD,CAAhB;AACA,gBAAI1Y,GAAJ,EAAS;AACP;AACA,kBAAIsB,SAAS,MAAMlB,OAAO4B,MAAP,CAAchC,GAAd,CAAnB;AACAyY,sBAASnY,OAAO6J,MAAP,CAAc7I,OAAOqX,SAAP,IAAoBrX,OAAOkC,OAAP,CAAemV,SAAjD,CAAT;AACD,aAJD,MAIO;AACL,oBAAM,IAAIxN,KAAJ,CAAU,2CAA2CuN,QAArD,CAAN;AACD;AACF;AACDza,qBAAW2a,QAAX,CAAoB/B,SAASnS,EAA7B,EAAiC4T,KAAjC,EAAwCG,KAAxC;AACD;;AAED,mBAAWI,cAAX,GAA4B;AAC1B,cAAI,CAACzZ,OAAO0Z,oBAAZ,EAAkC;AAChC1Z,mBAAO0Z,oBAAP,GAA8B,EAA9B;AACD;AACD,iBAAO1Z,OAAO0Z,oBAAd;AACD;;AAED,mBAAWD,cAAX,CAA0BE,IAA1B,EAAgC;AAC5B3Z,iBAAO0Z,oBAAP,GAA8BC,IAA9B;AACH;;AAED;AACA,eAAO/Q,gBAAP,CAAwBgR,MAAxB,EAAgCzM,MAAhC,EAAwCrI,IAAxC,EAA8C+U,QAA9C,EAAwDC,OAAxD,EAAiE;AAC/D,eAAKL,cAAL,CAAoBrX,IAApB,CACE,EAAC+K,QAAQA,MAAT,EAAiBrI,MAAMA,IAAvB,EAA6B+U,UAAUA,QAAvC,EAAiDD,QAAQA,MAAzD,EAAiEE,SAASA,OAA1E,EADF;AAEA3M,iBAAOvE,gBAAP,CAAwB9D,IAAxB,EAA8B+U,QAA9B,EAAwCC,OAAxC;AACD;;AAED,eAAOhE,mBAAP,CAA2B8D,MAA3B,EAAmCzM,MAAnC,EAA2CrI,IAA3C,EAAiD+U,QAAjD,EAA2D;AACzD,eAAKJ,cAAL,GAAsB,KAAKA,cAAL,CAAoBpY,MAApB,CAA2BC,MAAM;AACrD,gBAAI,CAAC,CAAC6L,MAAD,IAAiB7L,GAAG6L,MAAH,KAAgBA,MAAlC,MACI,CAACrI,IAAD,IAAcxD,GAAGwD,IAAH,IAAgBA,IADlC,MAEI,CAAC+U,QAAD,IAAcvY,GAAGuY,QAAH,KAAgBA,QAFlC,MAGI,CAACD,MAAD,IAActY,GAAGsY,MAAH,IAAgBA,MAHlC,CAAJ,EAGgD;AAC9C;AACA;AACAtY,iBAAG6L,MAAH,CAAU2I,mBAAV,CAA8BxU,GAAGwD,IAAjC,EAAuCxD,GAAGuY,QAA1C,EAAoDvY,GAAGwY,OAAvD;AACA,qBAAO,KAAP;AACD,aARD,MAQO;AACL,qBAAO,IAAP;AACD;AACF,WAZqB,CAAtB;AAaD;;AAED,eAAOC,gBAAP,CAAwBzT,IAAxB,EAA8ByD,YAA9B,EAA4CiQ,gBAAc/U,SAAS8D,IAAnE,EAAyE;AACvE,cAAItF,OAAOpF,WAAP,CAAmBsE,GAAnB,CAAuB,WAAvB,CAAJ,EAAyC;AACvC,iBAAKgF,qBAAL,CAA2B,qBAA3B,EAAkD9E,IAAlD,CAAwD+E,QAAQ;AAC9D,kBAAIqS,UAAU3T,KAAKpC,OAAL,CAAa,sBAAb,EAAqC,MAArC,CAAd;AACA0D,mBAAKsS,UAAL,CAAgBD,OAAhB;AACAxW,qBAAOiK,SAAP,CAAiB9F,KAAKC,aAAtB,EAAqCvI,GAAG,IAAH,EAAQ,GAAR,CAArC;AACAsI,mBAAKuC,KAAL;AACD,aALD;AAMD,WAPD,MAOO;AACL,gBAAIF,YAAYxG,OAAO0W,KAAP,CAAaH,aAAb,EAA4B,kBAA5B,CAAhB;AACA,iBAAKrS,qBAAL,CAA2B,eAA3B,EAA4CzE,SAA5C,EAAuDA,SAAvD,EAAkE6G,YAAlE,EAAgFlH,IAAhF,CAAsF+E,QAAQ;AAC5F,kBAAIqC,SAAJ,EAAe;AACb;AACA,oBAAIrJ,MAAMqJ,UAAUmQ,MAAV,GAAmBC,QAAnB,EAAV;AACA,oBAAIC,OAAOzT,WAAW3C,OAAX,CAAmB,QAAnB,EAA4B,EAA5B,CAAX;AACA,oBAAItD,IAAIY,KAAJ,CAAU8Y,IAAV,CAAJ,EAAqB;AACnB,sBAAIC,OAAO3Z,IAAIsD,OAAJ,CAAYoW,IAAZ,EAAiB,EAAjB,EAAqBpW,OAArB,CAA6B,OAA7B,EAAqC,EAArC,CAAX;AACA0D,uBAAK4S,UAAL,GAAkBD,IAAlB;AACD;AACF;AACD3S,mBAAKsS,UAAL,CAAgB5T,IAAhB;AACAsB,mBAAKuC,KAAL;AAED,aAbD;AAcD;;AAEC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEH;;AAED,eAAOsQ,gBAAP,GAA0B;AACxBja,kBAAQC,GAAR,CAAY,oBAAZ;AACAwE,mBAAS8D,IAAT,CAAc/B,gBAAd,CAA+B,eAA/B,EAAgD/E,OAAhD,CAAyDX,MAAMA,GAAGuG,aAAH,CAAiB1C,MAAjB,EAA/D;AACD;;AAED,eAAOuV,SAAP,CAAiBC,MAAjB,EAAyB;AACvB;AACA3a,iBAAO4a,IAAP,CAAY,yDAAyDD,MAArE;AACD;;AAED,eAAOE,cAAP,CAAsBvU,IAAtB,EAA4B;AAC1B,eAAKqB,qBAAL,CAA2B,aAA3B,EAA0C9E,IAA1C,CAA+C+E,QAAQ;AACrDA,iBAAKC,aAAL,CAAmBE,KAAnB,CAAyBI,KAAzB,GAAiC,OAAjC;AACAP,iBAAKC,aAAL,CAAmBE,KAAnB,CAAyBC,MAAzB,GAAkC,OAAlC;AACAJ,iBAAKkT,OAAL,CAAaxU,IAAb;AACD,WAJD;AAKD;;AAID,eAAOqB,qBAAP,CAA6BpF,IAA7B,EAAmCwY,SAAnC,EAA8CpN,MAA9C,EAAsD5D,YAAtD,EAAoE;AAClEA,yBAAeA,gBAAgB9E,SAAS8D,IAAxC;;AAEA,cAAI8D,uBAAI5H,SAASI,aAAT,CAAuB,eAAvB,CAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACA,cAAIsI,MAAJ,EAAY;AACVd,cAAE9E,KAAF,CAAQI,KAAR,GAAgBwF,OAAOzC,CAAvB;AACA2B,cAAE9E,KAAF,CAAQC,MAAR,GAAiB2F,OAAOxC,CAAxB;AACD;AACD,cAAI,CAAC4P,SAAL,EAAgB;AACd,gBAAIjR,MAAMrG,OAAOuX,qBAAP,CAA6BjR,YAA7B,CAAV;AACAgR,wBAAYtX,OAAOyJ,iBAAP,CAAyBnD,YAAzB,EAAuCoE,KAAvC,CAA6CrE,GAA7C,CAAZ;AACD;;AAED,iBAAOjL,WAAWoM,MAAX,CAAkBlB,YAAlB,EAAgC8C,CAAhC,EAAmC,IAAnC,EAAyChK,IAAzC,CAA8CgK,KAAK;AACxDpJ,mBAAOyG,iBAAP,CAAyB2C,CAAzB,EAA4BkO,SAA5B;;AAEA,mBAAOlc,WAAWoM,MAAX,CAAkB4B,CAAlB,qBAAqB5H,SAASI,aAAT,CAAuB9C,IAAvB,CAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAmDM,IAAnD,CAAwD+E,QAAQ;AACrE/I,yBAAWoc,iBAAX,CAA6BrT,IAA7B,EAAmCiF,CAAnC;AACA,qBAAOjF,IAAP;AACD,aAHM,CAAP;AAID,WAPM,CAAP;AAQD;;AAED,eAAOoT,qBAAP,CAA6BjR,YAA7B,EAA2C;AACxC;AACC,cAAIlK,UAAU8O,MAAMC,IAAN,CAAW7E,aAAa/C,gBAAb,CAA8B,wBAA9B,CAAX,CAAd;AACA,cAAI8Q,SAAS,EAAb;AACA,cAAIhO,GAAJ;AACA,cAAI0E,UAAUlP,GAAG,EAAH,EAAM,EAAN,CAAd;;AAEA,eAAI,IAAIwX,IAAE,CAAV,EAAa,CAAChN,GAAd,EAAmBgN,GAAnB,EAAwB;AACtB,gBAAIoE,KAAK5b,GAAGwX,IAAIgB,MAAP,EAAehB,IAAIgB,MAAnB,CAAT;AACA,gBAAIqD,KAAK7b,GAAG,CAACwX,IAAI,CAAL,IAAUgB,MAAb,EAAqB,CAAChB,IAAI,CAAL,IAAUgB,MAA/B,CAAT;AACA,gBAAIhU,QAAQjE,QAAQ6B,IAAR,CAAcJ,MAAM;AAC9B;AACA,kBAAI8Z,QAAQ3X,OAAOyJ,iBAAP,CAAyB5L,EAAzB,EAA6B0M,KAA7B,CAAmCQ;AAC/C;AADY,eAAZ,CAEA,OAAO,CAAC0M,GAAGG,MAAH,CAAUD,KAAV,KAAoBF,GAAGI,IAAH,CAAQF,KAAR,CAArB,KAAwCA,MAAMC,MAAN,CAAaF,EAAb,CAA/C;AACD,aALW,CAAZ;AAMA;AACA,gBAAI,CAACrX,KAAL,EAAYgG,MAAM0E,QAAQL,KAAR,CAAc7O,GAAGwX,IAAIgB,MAAP,EAAehB,IAAGgB,MAAlB,CAAd,CAAN;AACb;AACD,iBAAOhO,IAAIkE,KAAJ,CAAUvK,OAAOyJ,iBAAP,CAAyBnD,YAAzB,CAAV,CAAP;AACH;;AAED;AACA,qBAAasN,WAAb,CAAyBzW,GAAzB,EAA8B2a,IAA9B,EAAoCC,gBAApC,EAAsDC,eAAtD,EAAuE1R,YAAvE,EAAqF;AACnFA,yBAAeA,gBAAgB9E,SAAS8D,IAAxC;AACA,cAAIyS,oBAAoBA,iBAAiBE,IAAzC,EACE,IAAIC,gBAAgBH,gBAApB,CADF,KAGE,IAAIvB,UAAUuB,gBAAd;;AAEF,cAAI,CAAC5a,GAAD,IAAQ,CAACA,IAAIY,KAAJ,CAAU,cAAV,CAAb,EACEZ,MAAMiG,UAAN;AACF,cAAI+U,eAAJ;AACA,cAAIC,gBAAJ;AACA,cAAIJ,eAAJ,EAAqB;AACnBG,8BAAkBjN,MAAMC,IAAN,CAAW7E,aAAa/C,gBAAb,CAA8B,kBAA9B,CAAX,EAA8DtF,IAA9D,CAAmEJ,MAAMA,GAAGwa,eAA5E,CAAlB;AACD;;AAED,cAAIC,aAAa7d,EAAE8d,KAAF,CAAQrN,MAAMC,IAAN,CAAW7E,aAAa/C,gBAAb,CAA8B,eAA9B,CAAX,EACtB3F,MADsB,CACbC,MAAMA,GAAG2T,UAAH,CAAc,CAAd,KAAoB3T,GAAG2T,UAAH,CAAc,CAAd,EAAiB6G,eAD9B,CAAR,CAAjB;;AAGAD,6BAAmBD,kBAAkBlY,QAAQqB,OAAR,CAAgB6W,eAAhB,CAAlB,GACjBnY,OAAOkE,qBAAP,CAA6B,kBAA7B,EAAiDzE,SAAjD,EAA4DA,SAA5D,EAAuE6G,YAAvE,CADF;;AAGA,iBAAO8R,iBAAiBhZ,IAAjB,CAAsB+E,QAAQ;AACnCgU,8BAAkBhU,IAAlB;AACAgU,4BAAgBK,UAAhB;AACArU,iBAAKC,aAAL,CAAmBE,KAAnB,CAAyBI,KAAzB,GAAiC,OAAjC;AACAP,iBAAKC,aAAL,CAAmBE,KAAnB,CAAyBC,MAAzB,GAAkC,OAAlC;;AAEA,gBAAI+T,UAAJ,EAAgB;AACdtY,qBAAO2H,WAAP,CAAmBxD,KAAKC,aAAxB,EACEpE,OAAOwI,WAAP,CAAmB8P,UAAnB,EAA+B5N,KAA/B,CAAqC7O,GAAG,EAAH,EAAM,EAAN,CAArC,CADF;AAED;;AAED,gBAAIic,IAAJ,EAAU3T,KAAKE,YAAL,CAAkB,MAAlB,EAA0B,MAA1B;AACV,gBAAImS,OAAJ,EAAa;AACXrS,mBAAKkU,eAAL,GAAuB,IAAvB;AACAlU,mBAAKqU,UAAL;AACD;AACD,mBAAOrU,KAAK4H,UAAL,CAAgB5O,GAAhB,CAAP;AACD,WAjBM,EAiBJiC,IAjBI,CAiBC,YAAY;AAClB,gBAAI0Y,IAAJ,EAAU;AACR,oBAAMK,gBAAgBM,QAAhB,CAAyB,SAAzB,EAAoCrZ,IAApC,CAAyC,MAAMsZ,YAAN,IAAsB;AACnE,oBAAIC,aAAa,MAAMD,aAAaE,WAAb,EAAvB;;AAEA,oBAAGpC,OAAH,EAAY;AACVkC,+BAAaza,IAAb,CAAkBuY,OAAlB;AAED,iBAHD,MAGO,IAAI0B,aAAJ,EAAmB;;AAExBS,6BAAWE,YAAX,CACE,EAACZ,MAAMC,cAAcD,IAArB,EAA2Ba,IAAIZ,cAAca,MAA7C,EADF,EAEE,EAACd,MAAMC,cAAcD,IAArB,EAA2Ba,IAAIZ,cAAca,MAAd,IAC5Bb,cAAczJ,SAAd,GAA0B,CAAEyJ,cAAczJ,SAAd,CAAwBnB,MAApD,GAA6D,CADjC,CAA/B;AAEF;AACA;AALA;AAMD;AACDqL,2BAAWjS,KAAX;AACAiS,2BAAWK,cAAX,CAA0BL,WAAWM,SAAX,EAA1B,EAAkD,GAAlD;AACD,eAjBK,CAAN;AAkBD;AACD,mBAAOd,eAAP;AACD,WAvCM,CAAP;AAwCD;;AAED,eAAOe,YAAP,GAAsB;AACpB,cAAG,CAAC3c,OAAO4c,qBAAX,EAAkC;AAChC,mBAAOnZ,OAAOkB,MAAP,CAAc,8DAAd,CAAP;AACD;AACD3E,iBAAO4c,qBAAP,CAA6BC,yBAA7B,GAAyDha,IAAzD,CAA+Dia,GAAD,IAAS;AACrE;AACA9c,mBAAO4c,qBAAP,CAA6BG,YAA7B,CAA0C;AACxCnc,mBAAKiG,aAAa,0BAAb,GAA0CiW,IAAIE,QADX;AAExC7U,qBAAO,IAFiC,EAE3BgE,MAAM8Q,SAAS,CAACC,OAAO/U,KAAP,GAAe,IAAhB,IAAsB,CAA/B,CAFqB;AAGxCH,sBAAQ,GAHgC,EAG3BoE,KAAK6Q,SAAS,CAACC,OAAOlV,MAAP,GAAgB,GAAjB,IAAsB,CAA/B,CAHsB;AAIxClD,oBAAM;AAJkC,aAA1C,EAKGqY,KALH,CAKU9V,KAAD,IAAW;AAClB5D,qBAAOkB,MAAP,CAAc,2CAAd;AACD,aAPD;AAQD,WAVD;AAWD;;AAED,eAAOhC,GAAP,CAAWwX,KAAX,EAAkB;AAChB,iBAAOlV,SAASC,aAAT,CAAuBiV,KAAvB,CAAP;AACD;;AAED,eAAOiD,OAAP,CAAeC,GAAf,EAAoB;AAClB,iBAAO7d,OAAO4d,OAAP,CAAeC,GAAf,CAAP;AACD;;AAED,eAAOC,MAAP,CAAcD,GAAd,EAAmB1T,KAAnB,EAA0B4T,WAA1B,EAAuC;AACrC,iBAAO/d,OAAO8d,MAAP,CAAcD,GAAd,EAAmB1T,KAAnB,EAA0B4T,WAA1B,CAAP;AACD;;AAED,eAAOC,gBAAP,CAAwBrX,OAAxB,EAAiC;;AAE/B,cAAI,CAACA,OAAL,EAAc,OAAOlB,SAAS8D,IAAhB;AACd,cAAI5C,QAAQb,EAAR,IAAc,gBAAlB,EAAoC,OAAOa,OAAP;;AAEpC,cAAI,CAACA,QAAQ0B,aAAb,EAA4B;;AAE1B;AACA;AACA;AACD;AACC,mBAAO1B,QAAQ0O,UAAf,CAN0B,CAMC;AAC5B;;AAED,cAAI1O,QAAQiO,OAAR,IAAmB,MAAvB,EACE,OAAOjO,OAAP,CADF,KAGE,OAAO,KAAKqX,gBAAL,CAAsBrX,QAAQ0B,aAA9B,CAAP;AACH;;AAGD,eAAO4V,aAAP,CAAqB1T,YAArB,EAAmCjF,IAAnC,EAAyC;AACvCiF,yBAAeA,gBAAgB9E,QAA/B;AACA,cAAIkB,UAAU4D,aAAa0T,aAA3B;AACA,cAAI3Y,QAAQqB,QAAQiR,SAAR,IAAqBtS,IAAjC,EAAuC,OAAOqB,OAAP;AACvC,cAAIA,QAAQqO,UAAR,IAAsBrO,QAAQqO,UAAR,CAAmBiJ,aAA7C,EACE,OAAO,KAAKA,aAAL,CAAmBtX,QAAQqO,UAA3B,EAAuC1P,IAAvC,CAAP,CALqC,CAKgB;AACvD,iBAAOqB,OAAP;AACD;;AAED,eAAOuX,UAAP,CAAkBvX,OAAlB,EAA2B;AACzB,cAAIA,QAAQwX,QAAZ,EAAsB,OAAOxX,OAAP;AACtB,cAAIA,QAAQ0O,UAAZ,EAAwB,OAAO,KAAK6I,UAAL,CAAgBvX,QAAQ0O,UAAxB,CAAP;AACxB,cAAI1O,QAAQyX,IAAZ,EAAkB,OAAO,KAAKF,UAAL,CAAgBvX,QAAQyX,IAAxB,CAAP;AAClB,iBAAO3Y,SAAS8D,IAAhB,CAJyB,CAIH;AACvB;;AAED;AACA,eAAO8U,KAAP,CAAaxS,GAAb,EAAkB;AAChB,cAAIyS,IAAI,KAAKzS,GAAL,GAAW,GAAnB;AACA,eAAI,IAAIyL,CAAR,IAAazL,GAAb,EAAkB;AAChB,gBAAI,EAAEA,IAAIyL,CAAJ,aAAkBiH,QAApB,KAAiC1S,IAAIyL,CAAJ,MAAW5T,SAAhD,EACA4a,KAAKhH,IAAI,IAAJ,GAAWzL,IAAIyL,CAAJ,CAAX,GAAoB,IAAzB;AACD;AACDgH,cAAG,GAAH;AACA,iBAAOA,CAAP;AACD;;AAGD,eAAOE,OAAP,CAAe3S,GAAf,EAAoB;AAClB,cAAIzM,OAAO,EAAX;AACA,eAAI,IAAIkY,CAAR,IAAazL,GAAb,EAAkB;AAChB,gBAAIA,IAAI4S,cAAJ,CAAmBnH,CAAnB,KAAyBzL,IAAI6S,gBAAJ,CAAqBpH,CAArB,CAA7B,EAAsD;AACpDlY,mBAAKwD,IAAL,CAAU0U,CAAV;AACD;AACF;AACD,iBAAOlY,IAAP;AACD;;AAGD,eAAOuf,YAAP,GAAsB;AACpB,cAAI;AACF,kBAAM,IAAIpS,KAAJ,CAAU,UAAV,CAAN;AACD,WAFD,CAEE,OAAMhJ,CAAN,EAAS;AACT,mBAAOA,EAAE0E,KAAF,CAAQ2W,KAAR,CAAc,IAAd,EACJ/c,MADI,CACGC,MAAM,CAACA,GAAGE,KAAH,CAAS,oCAAT,CADV,EAEJH,MAFI,CAEGC,MAAM,CAACA,GAAGE,KAAH,CAAS,UAAT,CAFV,EAGJH,MAHI,CAGGC,MAAM,CAACA,GAAGE,KAAH,CAAS,cAAT,CAHV,EAIJI,GAJI,CAIAN,MAAMA,GAAG4C,OAAH,CAAW,SAAX,EAAqB,EAArB,CAJN,EAKJ6S,IALI,CAKC,IALD,CAAP;AAMD;AACF;;AAGD,eAAOsH,QAAP,GAAkB;AAChB;AACA;AACA;AACA/f,sBAAY6T,OAAZ,CAAoBmM,iBAApB;AACD;;AAED;;AAEA,qBAAaC,4BAAb,CAA0CC,OAA1C,EAAmD;AACjD,cAAIA,OAAJ,EAAa;AACX,kBAAMxd,OAAO4B,MAAP,CAAc,2BAAd,CAAN;AACA6b,6BAAiBC,QAAjB;AACD,WAHD,MAGO;AACL,gBAAI1e,OAAOye,gBAAX,EACEA,iBAAiBE,WAAjB;AACH;AACF;;AAED,qBAAaC,4BAAb,CAA0CJ,OAA1C,EAAmD;AACjD,cAAI,CAAC,KAAK5L,iBAAN,IAA2B4L,OAA/B,EAAwC;AACtC,iBAAKxK,iBAAL;AACD,WAFD,MAEO;AACL,gBAAIoF,UAAUnU,SAASC,aAAT,CAAuB,eAAvB,CAAd;AACA,gBAAIkU,WAAWA,QAAQvR,aAAR,CAAsB8V,QAArC,EAAgD;AAC9CvE,sBAAQvR,aAAR,CAAsB1C,MAAtB;AACD;AACF;AACF;;AAED,qBAAa0Z,4BAAb,CAA0CL,OAA1C,EAAmD;AACjD,cAAIA,OAAJ,EAAa;AACX/e,oBAAQqf,gBAAR,CAAyB7Z,SAAS8D,IAAlC;AACD,WAFD,MAEO;AACLtJ,oBAAQsf,gBAAR,CAAyB9Z,SAAS8D,IAAlC;AACD;AACF;;AAED,qBAAaiW,wBAAb,CAAsCR,OAAtC,EAA+C;AAC7C;AACA/a,iBAAO9D,YAAP,CAAoBsf,OAApB,CAA4B,iBAA5B,EAA+CT,OAA/C;AACA,cAAIU,UAAUC,aAAV,IAA2BD,UAAUC,aAAV,CAAwBC,UAAvD,EAAmE;AACjEF,sBAAUC,aAAV,CAAwBC,UAAxB,CAAmCC,WAAnC,CAA+C;AAC7Cva,oBAAM,QADuC;AAE7Cwa,sBAAQ,cAFqC;AAG7C3V,qBAAO6U;AAHsC,aAA/C;AAKD,WAND,MAMO;AACLhe,oBAAQC,GAAR,CAAY,yEAAZ;AACD;AAGF;;AAGD,qBAAa8e,wBAAb,CAAsCzV,GAAtC,EAA2C;AACzCrG,iBAAO2H,WAAP,CAAmBnG,SAAS8D,IAA5B,EAAkCe,GAAlC;AACD;;AAED,qBAAa0V,sBAAb,CAAoC1V,GAApC,EAAyC;AACvC,eAAK6J,oBAAL,GAA4B7J,GAA5B;AACD;;AAED,qBAAa2V,qBAAb,CAAmCC,IAAnC,EAAyC;AACvC,cAAIA,IAAJ,EAAU;AACR,gBAAG,CAAC,KAAKC,eAAT,EAA0B;AACxB,mBAAKA,eAAL,GAAuB,IAAIjgB,cAAJ,CAAmB,gCAAnB,CAAvB;AACD;AACD,iBAAKigB,eAAL,CAAqBN,WAArB,CAAiC,EAAC7X,SAAS,iBAAV,EAA6B5G,KAAKiG,aAAa,GAA/C,EAAjC;AACD;AACF;;AAED;;;AAGA,qBAAa+Y,wBAAb,CAAsCF,IAAtC,EAA4C;AAC1C,iBAAMjc,OAAOpF,WAAP,CAAmBsE,GAAnB,CAAuB,cAAvB,CAAN,EAA8C;AAC5C,gBAAIuc,UAAUC,aAAV,IAA2BD,UAAUC,aAAV,CAAwBC,UAAvD,EAAmE;AACjEF,wBAAUC,aAAV,CAAwBC,UAAxB,CAAmCC,WAAnC,CAA+C;AAC7Cva,sBAAM,MADuC;AAE7C+a,yBAAS;AAFoC,eAA/C;AAID;AACD;AACA,kBAAMpc,OAAOqc,KAAP,CAAa,IAAb,CAAN;AACD;AACF;;AAED;;;AAGA,qBAAaC,mBAAb,CAAiCL,IAAjC,EAAuC;AACrCM,uBAAa,eAAb,IAAgCN,IAAhC;AACD;;AAED,eAAOO,4BAAP,CAAoC9Z,OAApC,EAA6C;AAC3C,iBAAOA,YAAYlB,SAAS8D,IAArB,IACD5C,WAAWA,QAAQb,EAAR,IAAc,mBADxB,IAEDa,WAAYA,QAAQiO,OAAR,IAAmB,kBAA/B,IAAqDjO,QAAQqO,UAA7D,IAA2E,CAACrO,QAAQqO,UAAR,CAAmBiJ,aAFrG;AAGD;;AAED,eAAOyC,cAAP,GAAwB;AACtB,iBAAO,KAAKD,4BAAL,CAAkChb,SAASwY,aAA3C,CAAP;AACD;;AAED,eAAO0C,WAAP,GAAqB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAKC,kBAAL,CAAwBnb,SAAS8D,IAAjC;AACD;;AAED;AACA;AACA,eAAOqX,kBAAP,CAA0Bja,OAA1B,EAAmC;AACjC,cAAI,CAACA,OAAL,EAAc;AACd;AACA,cAAIkJ,YAAYpK,SAASkK,gBAAT,CAA0BE,SAA1C;AACA,cAAID,aAAanK,SAASkK,gBAAT,CAA0BC,UAA3C;AACAjJ,kBAAQgE,KAAR,CAAc,EAAEkW,eAAgB,IAAlB,EAAd;AACA;AACApb,mBAASkK,gBAAT,CAA0BE,SAA1B,GAAsCA,SAAtC;AACApK,mBAASkK,gBAAT,CAA0BC,UAA1B,GAAuCA,UAAvC;AACA;AACD;;AAED,eAAOkR,QAAP,CAAgBna,OAAhB,EAAyB;AACvB,cAAIb,KAAKa,QAAQc,YAAR,CAAqB,gBAArB,CAAT;AACA,cAAI,CAAC3B,EAAL,EAAS;AACPA,iBAAKnG,cAAL;AACAgH,oBAAQ2B,YAAR,CAAqB,gBAArB,EAAuCxC,EAAvC;AACD;AACD,iBAAOA,EAAP;AACD;;AAED,eAAOib,WAAP,CAAmBjb,EAAnB,EAAuByE,YAAvB,EAAqC;AACnC,cAAI,CAACzE,EAAL,EAAS;AACTyE,yBAAeA,gBAAgB9E,QAA/B;AACA,iBAAO8E,aAAa7E,aAAb,CAA2B,sBAAsBI,EAAtB,GAA2B,IAAtD,CAAP;AACD;;AAED,eAAO6U,KAAP,CAAahU,OAAb,EAAsBgU,KAAtB,EAA6B;AAC5B;AACA,cAAI1B,SAAStS,QAAQjB,aAAR,CAAsBiV,KAAtB,CAAb;AACA,cAAI,CAAC1B,MAAD,IAAWtS,QAAQwX,QAAvB,EAAiC,OAHL,CAGa;AACzC,cAAI,CAAClF,MAAD,IAAWtS,QAAQ0B,aAAvB,EAAsC4Q,SAAS,KAAK0B,KAAL,CAAWhU,QAAQ0B,aAAnB,EAAkCsS,KAAlC,CAAT;AACtC,cAAI,CAAC1B,MAAD,IAAWtS,QAAQ0O,UAAvB,EAAmC4D,SAAS,KAAK0B,KAAL,CAAWhU,QAAQ0O,UAAnB,EAA+BsF,KAA/B,CAAT;AACnC,cAAI,CAAC1B,MAAD,IAAWtS,QAAQyX,IAAnB,IAA2BzX,QAAQyX,IAAR,CAAa1Y,aAA5C,EAA2DuT,SAAS,KAAK0B,KAAL,CAAWhU,QAAQyX,IAAnB,EAAyBzD,KAAzB,CAAT;AAC3D,iBAAO1B,MAAP;AACA;;AAED,eAAO+H,mBAAP,CAA2Bra,OAA3B,EAAoCsa,QAApC,EAA8CC,OAA9C,EAAuD;AACrDA,oBAAUA,WAAW,KAArB;AACA,cAAIC,YAAYnb,KAAKC,GAAL,EAAhB;AACA,iBAAO,IAAI/B,OAAJ,CAAY,CAACqB,OAAD,EAAU6b,MAAV,KAAqB;AACtC,gBAAIC,QAAQ,MAAM;AAChB,kBAAI/c,QAAQqC,QAAQjB,aAAR,CAAsBub,QAAtB,CAAZ;AACA,kBAAI3c,KAAJ,EAAWiB,QAAQjB,KAAR,EAAX,KACK,IAAI0B,KAAKC,GAAL,KAAakb,SAAb,GAAyBD,OAA7B,EAAsCE,SAAtC,KACArc,WAAWsc,KAAX,EAAkB,GAAlB;AACN,aALD;AAMAA;AACD,WARM,CAAP;AASD;;AAED,eAAOC,gBAAP,CAAwB3a,OAAxB,EAAiC;AAC/B,cAAI;AACF,mBAAOA,QAAQiR,SAAR,IAAqBjR,QAAQb,EAAR,GAAc,MAAMa,QAAQb,EAA5B,GAAiC,EAAtD,KAA8Da,QAAQuP,SAAR,IAAqBvP,QAAQuP,SAAR,CAAkB3E,MAAlB,GAA2B,CAAhD,GAAsD,MAAMpC,MAAMC,IAAN,CAAWzI,QAAQuP,SAAnB,EAA8BqB,IAA9B,CAAmC,GAAnC,CAA5D,GAAsG,EAApK,CAAP;AACD,WAFD,CAEE,OAAMhU,CAAN,EAAS;AACT,mBAAO,EAAP,CADS,CACC;AACX;AACF;;AAED,qBAAage,QAAb,CAAsBC,QAAtB,EAAgCjX,eAAa9E,SAAS8D,IAAtD,EAA4D;AAC1D,cAAIzI,OAAO,MAAM8F,MAAO,GAAES,UAAW,cAAama,QAAS,OAA1C,EAAkDne,IAAlD,CAAuD+I,KAAKA,EAAEtF,IAAF,EAA5D,CAAjB;AACA,cAAIH,UAAW1C,OAAOyF,SAAP,CAAiB+X,iBAAjB,CAAmC3gB,IAAnC,EAAyCyJ,YAAzC,CAAf;AACA5D,kBAAQ2B,YAAR,CAAqB,uBAArB,EAA8CkZ,QAA9C;AACA,iBAAO7a,OAAP;AACD;;AAED,eAAO+a,QAAP,CAAgB/a,OAAhB,EAAyBgU,KAAzB,EAAgC;AAC9B,cAAIpY,MAAM,IAAIof,GAAJ,EAAV;AACAhb,kBAAQa,gBAAR,CAAyBmT,KAAzB,EAAgClY,OAAhC,CAAwCX,MAAMS,IAAI4T,GAAJ,CAAQrU,EAAR,CAA9C;AACA,cAAI8f,aAAajb,QAAQa,gBAAR,CAAyB,kBAAzB,CAAjB;AACAoa,qBAAWnf,OAAX,CAAmBX,MAAM;AACvBA,eAAGkT,UAAH,CAAcxN,gBAAd,CAA+BmT,KAA/B,EAAsClY,OAAtC,CAA8CX,MAAMS,IAAI4T,GAAJ,CAAQrU,EAAR,CAApD;AACD,WAFD;AAGA,iBAAOqN,MAAMC,IAAN,CAAW7M,GAAX,CAAP;AACD;;AAGD,eAAOsf,UAAP,CAAkBlb,OAAlB,EAA2Bmb,oBAA3B,EAAiD;AAC/Cnb,kBAAQgE,KAAR;;AAEA,cAAI,CAACmX,oBAAL,EAA2B;AACzB,gBAAIC,gBAAgB9d,OAAOgL,eAAP,CAAuBtI,OAAvB,CAApB;AACA,gBAAIqb,eAAejiB,KAAK,CAAL,EAAO,CAAP,EAAUS,OAAOwN,UAAjB,EAA6BxN,OAAOyN,WAApC,CAAnB;AACA,gBAAI,CAAC+T,aAAaC,YAAb,CAA0BF,aAA1B,CAAL,EAA+C;AAC7C;AACAtc,uBAASkK,gBAAT,CAA0BE,SAA1B,GAAsC,CAAtC;AACApK,uBAASkK,gBAAT,CAA0BC,UAA1B,GAAuC,CAAvC;AACA,kBAAI0I,SAASxY,GAAGU,OAAOwN,UAAV,EAAsBxN,OAAOyN,WAA7B,EAA0CO,KAA1C,CAAgDvK,OAAO6J,SAAP,CAAiBnH,OAAjB,CAAhD,CAAb;;AAEA,kBAAI2D,MAAMrG,OAAOwI,WAAP,CAAmB9F,OAAnB,EAA4B6H,KAA5B,CAAkC8J,OAAO1J,OAAP,CAAe,GAAf,CAAlC,CAAV;AACA3K,qBAAO2H,WAAP,CAAmBnG,SAAS8D,IAA5B,EAAkCe,IAAIsE,OAAJ,CAAY,CAAC,CAAb,CAAlC,EAAmDlL,SAAnD,EAA8D,IAA9D;AACD;AACF;AACF;;AAED;AACA,eAAOwe,cAAP,GAAwB;AACtB,cAAIC,SAAS,kBAAb;AACA,iBAAOzgB,OAAOwX,mBAAP,CAA2BjV,MAA3B,EACJpC,MADI,CACGC,MAAMA,GAAGE,KAAH,CAASmgB,MAAT,CADT,EAEJ/f,GAFI,CAEAN,MAAMA,GAAGE,KAAH,CAASmgB,MAAT,EAAiB,CAAjB,CAFN,CAAP;AAGD;;AAED,qBAAaC,KAAb,CAAmBC,IAAnB,EAAyB;AACvB,cAAI/D,IAAItY,KAAKC,GAAL,EAAR;AACA,gBAAMoc,MAAN;AACA,iBAAOrc,KAAKC,GAAL,KAAaqY,CAApB;AACD;;AAED,mBAAWvJ,IAAX,GAAkB;AAChB,iBAAOrE,YAAY4R,QAAnB;AACD;;AAED,eAAOxP,WAAP,CAAmB5J,GAAnB,EAAwB;AACtB;AACAjF,iBAAOse,aAAP,GAAuB9c,SAASkK,gBAAT,CAA0BE,SAAjD;AACA5L,iBAAOue,cAAP,GAAwB/c,SAASkK,gBAAT,CAA0BC,UAAlD;AACD;;AAED,qBAAamD,aAAb,CAA2B7J,GAA3B,EAAgC;AAC9B,cAAI,CAACA,IAAIuZ,QAAT,EAAmB;AAAE;AACnBvZ,gBAAIwK,cAAJ;AACAxK,gBAAIuK,eAAJ;AACA,gBAAIxP,OAAOue,cAAX,EAA2B;AACzB/c,uBAASkK,gBAAT,CAA0BE,SAA1B,GAAsC5L,OAAOse,aAA7C;AACA9c,uBAASkK,gBAAT,CAA0BC,UAA1B,GAAuC3L,OAAOue,cAA9C;AACD;AACD,gBAAIhc,OAAO2I,MAAMC,IAAN,CAAWlG,IAAIqH,YAAJ,EAAX,EAA+BrO,IAA/B,CAAoCJ,MAAMA,GAAG8V,SAAH,IAAgB,GAA1D,CAAX;AACA,gBAAIpR,IAAJ,EAAU;AACR;AACA;AACA;AACA,kBAAIpF,MAAMoF,KAAKiB,YAAL,CAAkB,MAAlB,CAAV;AACA,kBAAIgD,YAAY,MAAMxG,OAAO0W,KAAP,CAAanU,IAAb,EAAmB,kBAAnB,CAAtB;AACA,kBAAI,CAACpF,IAAIY,KAAJ,CAAU,gBAAV,CAAL,EAAkC;AAChC,oBAAIyI,SAAJ,EAAe;AACbrJ,wBAAMqJ,UAAUmQ,MAAV,GAAmBC,QAAnB,GAA8BnW,OAA9B,CAAsC,QAAtC,EAA+C,EAA/C,IAAqDtD,GAA3D;AACD;AACF;AACD,kBAAIshB,QAAQ,EAAZ;AACA,kBAAIjY,SAAJ,EAAe;AACbiY,sBAAM9f,IAAN,CAAW,CAAC,QAAD,EAAW,MAAM;AAC1B6H,4BAAUuF,UAAV,CAAqB5O,GAArB;AACD,iBAFU,CAAX;AAGD;AACDshB,oBAAM9f,IAAN,CAAW,CAAC,gBAAD,EAAmB,MAAM;AAClCqB,uBAAO4T,WAAP,CAAmBzW,GAAnB;AACD,eAFU,CAAX;AAGAshB,oBAAM9f,IAAN,CAAW,CAAC,gBAAD,EAAmB,MAAM;AAClCqB,uBAAO4T,WAAP,CAAmBzW,GAAnB,EAAwB,IAAxB;AACD,eAFU,CAAX;AAGA,kBAAIuhB,OAAO,IAAI1e,OAAO9E,WAAX,CAAuB,IAAvB,EAA6BujB,KAA7B,CAAX;AACAC,mBAAKlX,MAAL,CAAYhG,SAAS8D,IAArB,EAA2BL,GAA3B,EAAgC,IAAhC;AAED,aA1BD,MA0BQ;AACNjF,qBAAOwM,eAAP,CAAuBhL,SAAS8D,IAAhC,EAAsCL,GAAtC;AACD;AACD,mBAAO,KAAP;AACD;AACF;;AAED,eAAO0Z,IAAP,CAAYzR,OAAK,IAAjB,EAAuB;AACrB3Q,iBAAOuE,UAAP,CAAkB,MAAM;AACtB;AACD,WAFD,EAEGoM,IAFH;AAGD;;AAED,qBAAamP,KAAb,CAAmBnP,OAAK,IAAxB,EAA8B;AAC5B,iBAAOtR,KAAKsR,IAAL,CAAP;AACD;;AAED;AACA;AACA,qBAAa0R,UAAb,CAAwB5R,EAAxB,EAA4BE,OAAK,IAAjC,EAAuC2R,OAAK,EAA5C,EAAgD;AAC5C,cAAI9R,OAAJ;AACE/M,iBAAOqc,KAAP,CAAanP,IAAb,EAAmB9N,IAAnB,CAAwB,MAAM;AAC5B2N,sBAAU,IAAV;AAAe,WADjB;AAEF,cAAIiI,MAAJ;AACA,iBAAM,CAACA,MAAD,IAAW,CAACjI,OAAlB,EAA2B;AACzBiI,qBAAShI,IAAT;AACA,kBAAMhN,OAAOqc,KAAP,CAAawC,IAAb,CAAN;AACD;AACD,iBAAO7J,MAAP;AACH;;AAED,qBAAa9H,IAAb,CAAkBkR,IAAlB,EAAwB;AACtB,cAAI/N,QAAQF,YAAYnO,GAAZ,EAAZ;AACA,cAAIoc,IAAJ,EAAU;AACR,kBAAMA,MAAN;AACD;AACD,iBAAOjO,YAAYnO,GAAZ,KAAoBqO,KAA3B;AACD;;AAGD,eAAOyO,WAAP,CAAmBC,OAAK,KAAxB,EAA+B9b,OAAKzB,SAAS8D,IAA7C,EAAmDhH,MAAI,IAAIof,GAAJ,EAAvD,EAAkE;AAChE,cAAIqB,QAAQ9b,KAAK8N,UAAjB,EAA6B;AAC3B,iBAAK+N,WAAL,CAAiBC,IAAjB,EAAuB9b,KAAK8N,UAA5B,EAAwCzS,GAAxC;AACD;AACD2E,eAAKM,gBAAL,CAAsB,GAAtB,EAA2B/E,OAA3B,CAAmCX,MAAM;AACvC,gBAAIkhB,QAAQlhB,GAAGkT,UAAf,EAA2B;AACzB,mBAAK+N,WAAL,CAAiBC,IAAjB,EAAuBlhB,GAAGkT,UAA1B,EAAsCzS,GAAtC;AACD;AACDA,gBAAI4T,GAAJ,CAAQrU,EAAR;AACD,WALD;AAMAS,cAAI4T,GAAJ,CAAQjP,IAAR;AACA,iBAAO3E,GAAP;AACD;;AAED,eAAO0gB,YAAP,CAAoB/b,IAApB,EAAyB;AACvB,cAAIgc,CAAJ;AAAA,cACIjK,SAAO,EADX;AAAA,cAEIkK,OAAK1d,SAAS2d,gBAAT,CAA0Blc,IAA1B,EAAgCmc,WAAWC,SAA3C,EAAqD,IAArD,EAA0D,KAA1D,CAFT;AAGA,iBAAMJ,IAAEC,KAAKI,QAAL,EAAR,EAAyB;AACvBtK,mBAAOrW,IAAP,CAAYsgB,CAAZ;AACD;AACD,iBAAOjK,MAAP;AACD;;AAED,eAAOpD,eAAP,CAAuB2N,UAAvB,EAAmCR,IAAnC,EAAyC;AACvC,iBAAO7T,MAAMC,IAAN,CAAW,KAAK2T,WAAL,CAAiBC,IAAjB,CAAX,EAAmCnhB,MAAnC,CAA0C2hB,UAA1C,CAAP;AACD;;AAED,eAAOC,UAAP,CAAkB9c,OAAlB,EAA2B+c,UAAQ,EAAnC,EAAuCV,OAAO,KAA9C,EAAqD;AACnD,cAAI,CAACrc,OAAL,EAAc,OAAO+c,OAAP;AACd,cAAI,CAAC/c,QAAQ0B,aAAb,EAA4B;AAC1B,gBAAG2a,QAAQrc,QAAQ0O,UAAnB,EAA+B;AAC7B,kBAAI1O,QAAQ0O,UAAR,KAAuB5P,QAA3B,EAAqC;AACnC,uBAAOie,OAAP;AACD;AACDA,sBAAQ9gB,IAAR,CAAa+D,QAAQ0O,UAArB;AACAqO,sBAAQ9gB,IAAR,CAAa+D,QAAQ0O,UAAR,CAAmB+I,IAAhC;;AAEA,qBAAO,KAAKqF,UAAL,CAAgB9c,QAAQ0O,UAAR,CAAmB+I,IAAnC,EAAyCsF,OAAzC,EAAkDV,IAAlD,CAAP;AACD,aARD,MAQO;AACL,qBAAOU,OAAP;AACD;AACF;AACDA,kBAAQ9gB,IAAR,CAAa+D,QAAQ0B,aAArB;AACA,eAAKob,UAAL,CAAgB9c,QAAQ0B,aAAxB,EAAuCqb,OAAvC,EAAgDV,IAAhD;AACA,iBAAOU,OAAP;AACD;;AAED;AACA,eAAOC,QAAP,CAAgBhd,OAAhB,EAAyB;AACvB,iBAAO,KAAK8c,UAAL,CAAgB9c,OAAhB,EAAyBjD,SAAzB,EAAoC,IAApC,EAA0Cf,QAA1C,CAAmD8C,SAAS8D,IAA5D,CAAP;AACD;;AAED,eAAOqa,QAAP,CAAgBjd,OAAhB,EAAyB;AACvBnG,iBAAOqQ,IAAP,GAAclK,OAAd;AACA+J,sBAAYmT,SAAZ,CAAsBld,OAAtB;AACD;;AAED,eAAOmd,MAAP,CAAc1iB,GAAd,EAAmB;AACjB,cAAIqI,IAAIrI,IAAIyZ,QAAJ,GAAe7Y,KAAf,CAAqB,8BAArB,CAAR;AACA,cAAI,CAACyH,CAAL,EAAQ;AACN,kBAAM,IAAI8C,KAAJ,CAAU,2CAA2CnL,GAArD,CAAN;AACD;AACD,iBAAO,4BAA4BqI,EAAE,CAAF,CAA5B,GAAkC,GAAlC,GAAwCA,EAAE,CAAF,CAA/C;AACD;;AAED,eAAOsa,oBAAP,CAA4BzZ,GAA5B,EAAiCpD,OAAKzB,QAAtC,EAAgDue,UAAQ,IAAIrC,GAAJ,EAAxD,EAAmE;AACjE,cAAI1I,SAAS,EAAb;AACA,cAAIgL,WAAW/c,KAAKgd,iBAAL,CAAuB5Z,IAAIoB,CAA3B,EAA8BpB,IAAIqB;AACjD;;AADe,WAAf,CAGAsY,SACGpiB,MADH,CACU0B,KAAK;AACX,kBAAM4gB,gBAAgB,CAACH,QAAQI,GAAR,CAAY7gB,CAAZ,CAAvB;AACAygB,oBAAQ7N,GAAR,CAAY5S,CAAZ;AACA,mBAAO4gB,aAAP;AACD,WALH,EAMG1hB,OANH,CAMWX,MAAM;AACb,gBAAIA,GAAGkT,UAAH,IAAiBlT,GAAGkT,UAAH,CAAckP,iBAAnC,EAAsD;AACpD,kBAAIG,qBAAqB,KAAKN,oBAAL,CAA0BzZ,GAA1B,EAA+BxI,GAAGkT,UAAlC,EAA8CgP,OAA9C,CAAzB;AACA/K,qBAAOrW,IAAP,CAAY,GAAGyhB,kBAAf;AACD;AACDpL,mBAAOrW,IAAP,CAAYd,EAAZ;AACD,WAZH;;AAcA,iBAAOmX,MAAP;AACD;;AAGD,eAAOqL,uBAAP,GAAiC;;AAE/B,cAAI,CAAC5E,UAAUC,aAAf,EAA8B;AAC5B3e,oBAAQ+C,IAAR,CAAa,gEAAb;AACA;AACD;AACDE,iBAAOqS,mBAAP,CAA2B,OAA3B,EAAoCoJ,UAAUC,aAA9C;AACA1b,iBAAOmF,gBAAP,CAAwB,OAAxB,EAAiCsW,UAAUC,aAA3C,EAA0D,SAA1D,EAAqE,MAAOzW,GAAP,IAAe;AAChF,gBAAI;AACF,kBAAG,CAACA,IAAIpI,IAAJ,CAASiC,IAAV,IAAkB,CAACmG,IAAIpI,IAAJ,CAASiC,IAAT,CAAcf,KAAd,CAAoB,YAApB,CAAtB,EAAyD,OADvD,CAC+D;;AAEjE,kBAAIZ,MAAM8H,IAAIpI,IAAJ,CAASM,GAAnB;AACA,kBAAI,CAAC8H,IAAIqb,KAAJ,CAAU,CAAV,CAAL,EAAmB;AACjBvjB,wBAAQ+C,IAAR,CAAa,6DAAb;AACA;AACD;AACD,kBAAGmF,IAAIpI,IAAJ,CAASiC,IAAT,IAAiB,eAApB,EAAqC;AACnC;AACAmG,oBAAIqb,KAAJ,CAAU,CAAV,EAAa1E,WAAb,CAAyB,EAACjG,SAAS,MAAMhT,MAAMxF,GAAN,EAAW;AAClDojB,4BAAQ,KAD0C;AAElDC,6BAAS/iB,OAAOgjB,MAAP,CAAcxb,IAAIpI,IAAJ,CAAS2jB,OAAvB,EAAgC;AACvC,wCAAkB;AADqB,qBAAhC;AAFyC,mBAAX,EAKtCphB,IALsC,CAKjCwD,KAAKA,EAAE8d,IAAF,EAL4B,CAAhB,EAAzB;AAMD;AACF,aAjBD,CAiBE,OAAMC,GAAN,EAAW;AACX1b,kBAAIqb,KAAJ,CAAU,CAAV,EAAa1E,WAAb,CAAyB,EAAChY,OAAO+c,GAAR,EAAzB;AACD;AACF,WArBH;AAuBD;AAn+DyB;;yBAAP1jB,M;;;;;;;;;;;;;;;;AAs+DrB,UAAI,CAACV,OAAOyD,MAAR,IAAkBzD,OAAOyD,MAAP,CAAclB,IAAd,IAAsB,QAA5C,EAAsD;AACpDvC,eAAOyD,MAAP,GAAgB/C,MAAhB;AACAF,gBAAQC,GAAR,CAAYT,OAAOmT,YAAnB,EAAiC,0BAAjC;AACA;AACAzS,eAAO0H,MAAP;AACD,OALD,MAKO;AACL,YAAIic,YAAYrkB,OAAOyD,MAAvB;AADK;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAEL/C,eAAO4jB,QAAP,GAAkBD,SAAlB;AACA3jB,eAAOif,eAAP,GAAyB0E,UAAU1E,eAAnC;AACA3f,eAAOyD,MAAP,GAAgB/C,MAAhB;AACD;;AAED;AACA+C,aAAOqgB,uBAAP,CAAiC;;;AAAjC,SAGA,IAAIhR,kBAAkBpS,OAAOmI,aAAP,EAAtB;;;;;;;;;;;;;;;AAMArI,cAAQC,GAAR,CAAYT,OAAOmT,YAAnB,EAAiC,eAAjC","file":"lively.js","sourcesContent":["/*MD \n![](../../media/lively4_logo_smooth_200.png)\n\n# Lively4 core module\n\n[architecture](browse://doc/architecture/lively.md)\n\n #Lively4 #Singleton #KitchenSink #CyclicDependecies #RefactoringNeeded\n\n\nMD*/\n\nimport './patches.js'; // monkey patch the meta sytem....\n// import * as jquery from '../external/jquery.js'; // should not be needed any more!\nimport _ from 'src/external/lodash/lodash.js'\nimport * as scripts from './script-manager.js';\nimport * as messaging from './messaging.js';\nimport preferences from './preferences.js';\nimport persistence from './persistence.js';\nimport html from './html.js';\nimport * as reflection from './reflection.js';\nimport files from './files.js';\nimport paths from './paths.js';\nimport contextmenu from './contextmenu.js';\nimport keys from './keys.js';\nimport components from './morphic/component-loader.js';\nimport authGithub from './auth-github.js';\nimport authDropbox from './auth-dropbox.js';\nimport authGoogledrive  from './auth-googledrive.js';\nimport expose from './expose.js';\nimport { toArray, uuid as generateUUID, wait } from 'utils';\nimport {pt, rect} from './graphics.js';\nimport Dialog from 'src/components/widgets/lively-dialog.js'\nimport ViewNav from 'src/client/viewnav.js'\nimport SystemjsWorker from \"src/worker/systemjs-worker.js\"\n\n\n\n/* expose external modules */\n// import color from '../external/tinycolor.js';\nimport focalStorage from '../external/focalStorage.js';\nimport Selection from 'src/components/halo/lively-selection.js'\nimport windows from \"src/components/widgets/lively-window.js\"\n\nimport events from \"src/client/morphic/events.js\"\n\nlet $ = window.$; // known global variables.\n\n\nvar debugLogHightlights = new WeakMap()\n\n// a) Special shorthands for interactive development\n// b) this is the only reasonable way to use modules in template scripts, due to no shared lexical scope #TODO\n// c) This indirection is also needed to let old events listeners signal to code in current modules\nvar exportmodules = [\n  \"preferences\",\n  \"files\",\n  \"keys\",\n  \"paths\",\n  \"html\",\n  \"reflection\",\n  \"components\",\n  \"persistence\",\n  // \"color\",\n  \"focalStorage\",\n  \"authGithub\",\n  \"authDropbox\",\n  \"authGoogledrive\",\n  \"contextmenu\",\n  \"windows\"\n];\n\nclass LivelyNotification {\n  constructor(data) {\n    this.data = data;\n  }\n\n  displayOnConsole() {\n    console.log('%cLively Notification', \"color: gray; font-size: x-small\", this.data);\n  }\n}\n\n/*\n * The \"lively\" module is currently the kitchen-sink of this environment.\n *\n * #TODO refactor so that methods go into more specific modules.\n */\nexport default class Lively {\n\n  static get location() {\n    return window.location;\n  }\n\n  static set location(url) {\n    return window.location = url;\n  }\n\n  static findDirectDependentModules(path) {\n     var mod = System.normalizeSync(path);\n     return Object.values(System.loads)\n      .filter( ea => {\n       if (ea.key.match(\"unnamed_module\"))  {\n         \n         return false\n       }\n        \n        return ea.dependencies.find(dep => System.normalizeSync(dep, ea.key) == mod)\n      })        \n      .map( ea => ea.key)\n  }\n\n  static findDependedModules(path, recursive, all = []) {\n    let dependentModules = this.findDirectDependentModules(path);\n    if(recursive) {\n      dependentModules.forEach(module => {\n        if(!all.includes(module)) {\n          all.push(module);\n          this.findDependedModules(module, true, all);\n        }\n      });\n      return all;\n    } else {\n      return dependentModules;\n    }\n  }\n\n  static findDependedModulesGraph(path, all = []) {\n\n    let tree = {\n\n    }\n    tree.name = path;\n    let dependentModules = this.findDirectDependentModules(path);\n    tree.children = [];\n\n    dependentModules.forEach(module => {\n      if(!all.includes(module)) {\n        all.push(module);\n        tree.children.push(this.findDependedModulesGraph(module, all));\n      } else {\n        tree.children.push({\n          name: module\n        });\n      }\n    });\n    return tree;\n  }\n\n  // #TODO remove code duplication lively-con\n  static async unloadModule(path) {\n    var normalizedPath = System.normalizeSync(path)\n    try {\n      // check, to prevent trying to reloading a module a second time if there was an error #375\n      if (System.get(normalizedPath)) {\n        await System.import(normalizedPath).then(module => {\n          if(module && typeof module.__unload__ === \"function\") {\n            module.__unload__();\n          }\n        });        \n      }      \n    } catch(e) {\n      console.log(\"WARNING: error while trying to unload \" + path)\n    }\n    System.registry.delete(normalizedPath);\n    // #Hack #issue in SystemJS babel syntax errors do not clear errors\n    System['@@registerRegistry'][normalizedPath] = undefined;\n    delete System.loads[normalizedPath]\n  }\n\n  static async reloadModule(path, force) {\n    // var start = performance.now()\n    // console.profile('reloadModule')\n\n    path = \"\" + path;\n    var changedModule = System.normalizeSync(path);\n    var load = System.loads[changedModule];\n    if (!load && !force) {\n      await this.unloadModule(path); // just to be sure...\n      console.warn(\"Don't reload non-loaded module\");\n      return;\n    }\n    await this.unloadModule(path);\n    let mod = await System.import(path);\n\n    /**\n     * Reload dependent modules\n     */\n    // #TODO how can we make the dependecy loading optional... I don't need the whole environment to relaod while developing a core module everybody depends on\n    // if (path.match(\"graphics.js\")) {\n    //   console.log(\"[reloadModule] don't load dependencies of \" + path)\n    //   return mod\n    // }\n\n    let dependedModules;\n    if(path.match('client/reactive')) {\n      // For reactive, find modules recursive, but cut modules not in 'client/reactive' folder\n      dependedModules = lively.findDependedModules(path, true);\n      dependedModules = dependedModules.filter(mod => mod.match('client/reactive'));\n      // #TODO: duplicated code #refactor\n    } else if(path.match('client/vivide')) {\n      // For vivide, find modules recursive, but cut modules not in 'client/vivide' folder\n      dependedModules = lively.findDependedModules(path, true);\n      dependedModules = dependedModules.filter(mod => mod.match('client/vivide'));\n    } else {\n      // Find all modules that depend on me\n      dependedModules = lively.findDependedModules(path);\n    }\n\n    // console.log(\"[reloadModule] reload yourself \",(performance.now() - start) + `ms` ) \n    // start = performance.now()\n\n    \n    // and update them\n    await Promise.all(dependedModules.map(dependentModule => this.unloadModule(dependentModule)));\n\n    // console.log(\"[reloadModule] unload dependend modules \",(performance.now() - start) + `ms` ) \n    // start = performance.now()\n\n    await Promise.all(dependedModules.map(dependentModule => System.import(dependentModule)));\n    // for(let ea of dependedModules) {\n    //   // console.log(\"reload \" + path + \" triggers reload of \" + ea)\n    //   //System.registry.delete(ea);\n    // }\n    // // now the system may build up a cache again\n    // for(let ea of dependedModules) {\n    //   // console.log(\"import \" + ea)\n    //   // #TODO, #BUG: does not seem to work as intended\n    //   // however, import statement triggers the execution\n    // }\n    // now check for dependent web components\n    for(let ea of dependedModules) {\n      // System.import(ea);\n    }\n\n    // console.log(\"[reloadModule] updated depended modules \",(performance.now() - start) + `ms` ) \n    // start = performance.now()\n    \n    /**\n     * Update Templates: Reload a template's .html file\n     */\n    for (let eaPath of [path].concat(dependedModules)) {\n      // console.log(\"update dependend: \", eaPath)\n      let found = lively.components.getTemplatePaths().find(templatePath => eaPath.match(templatePath))\n      if (found) {\n        /**\n         * Update a templates prototype\n         */\n        let moduleName = eaPath.replace(/[^/]*/,\"\");\n        let mod = await System.import(eaPath);\n        let defaultClass = mod.default;\n        if (defaultClass) {\n          console.log(\"update template prototype: \" + moduleName);\n          components.updatePrototype(defaultClass, moduleName);\n        }\n\n        let templateURL = eaPath.replace(/\\.js$/,\".html\");\n        try {\n          console.log(\"[templates] update template \" + templateURL);\n          setTimeout(() => {\n            lively.files.loadFile(templateURL).then( sourceCode =>\n              lively.updateTemplate(sourceCode));\n          },100)\n\n        } catch(e) {\n          lively.notify(\"[templates] could not update template \" + templateURL, \"\"+e);\n        }\n      }\n    }\n\n    // console.log(\"[reloadModule] updated components \",(performance.now() - start) + `ms` ) \n    // console.profileEnd('reloadModule')\n\n    return mod;\n  }\n\n  static loadJavaScriptThroughDOM(name, src, force=false, type=\"text/javascript\") {\n    return new Promise((resolve) => {\n      var scriptNode = document.querySelector(\"#\"+name);\n      if (!force && scriptNode) {\n        resolve() // nothing to be done here\n        return\n      }\n\n      if (scriptNode) {\n        scriptNode.remove();\n      }\n      var script = document.createElement(\"script\");\n      script.id=name;\n      script.charset=\"utf-8\";\n      script.type=type;\n      if (force) {\n        src = src + (\"?\" + Date.now());\n      }\n      script.src= src;\n      script.onload = function() {\n        resolve();\n      };\n      document.head.appendChild(script);\n    });\n  }\n\n\n  static loadCSSThroughDOM(name, href, force) {\n    return new Promise((resolve) => {\n      var linkNode = document.querySelector(\"#\"+name);\n      if (linkNode) {\n        linkNode.remove();\n      }\n      var link = document.createElement(\"link\");\n      link.rel=\"stylesheet\";\n      link.id=name;\n      link.charset=\"utf-8\";\n      link.type=\"text/css\";\n      if (force) {\n        href += + \"?\" + Date.now();\n      }\n      link.href= href;\n      link.onload = function() {\n        resolve();\n      };\n      document.head.appendChild(link);\n    });\n  }\n  static async fillTemplateStyle(element, url) {\n    // #TODO bug, sometimes the cache invalidation... does not work #BUG\n    return fetch(\"cached:\" + url).then(r => r.text()).then(css => {\n      // console.log(\"[lively] fill css \" + cssURL + \",\" + Math.round(css.length / 1000) + \"kb\" )\n      element.innerHTML = css;\n    })\n  }\n  \n  static async fillTemplateStyles(root, debugInfo, baseURL=lively4url) {\n    // there seems to be no <link ..> tag allowed to reference css inside of templates #Jens\n    \n    // var start = performance.now()\n    var promises = [];\n    var allSrc = []\n    root.querySelectorAll(\"style\").forEach(ea => {\n      var src = ea.getAttribute(\"data-src\");\n      if (src) {\n        \n        var cssURL = src\n        if (!cssURL.match(/^[a-zA-Z0-9]+:/)) {\n          cssURL = baseURL.replace(/\\/?$/, \"/\") + cssURL\n        }\n        allSrc.push(src)\n        ea.url = lively.paths.normalizeURL(cssURL)\n        promises.push(this.fillTemplateStyle(ea, cssURL));\n      }\n    });\n    await Promise.all(promises)    \n    // console.log(\"load fillTemplateStyles \"  + (performance.now() - start) +\"ms :\"+ debugInfo);\n  }\n\n  static showError(error) {\n    this.handleError(error);\n  }\n\n   static async handleError(error) {\n    lively.LastError = error;\n    try {\n      if (!error) return; // hmm... this is currious...\n      if (error.message.match(\"Maximum call stack size exceeded\")) {\n        console.log(error)\n        return\n      }\n      if (document.querySelector(\"lively-console\")) {\n        console.log(error)\n      } else {\n        console.error('[error] ', error, error.stack);\n        if (!window.__karma__) {\n          await lively.notify(\"Error: \", error, 10, () => {\n              lively.openComponentInWindow(\"lively-error\").then( comp => {\n                comp.stack =  error.stack\n                comp.parentElement.setAttribute(\"title\",  \"\" + error.message)\n                comp.style.height = \"max-content\"\n                var bounds = comp.getBoundingClientRect()\n                comp.parentElement.style.height = (bounds.height + 20)+ \"px\"\n                comp.parentElement.style.width = bounds.width + \"px\"\n              })\n            }, \"red\");\n        }\n      }\n    } catch(e) {\n      console.log(\"An error happend while handling and error: \" + e)\n    }\n  }\n\n  static async loaded() {\n    // #Refactor with #ContextJS\n    // guard againsst wrapping twice and ending in endless recursion\n    // if (!console.log.originalFunction) {\n    //     var nativeLog = console.log;\n    //     console.log = function() {\n    //         nativeLog.apply(console, arguments);\n    //         console.log.apply(undefined, arguments);\n    //     };\n    //     console.log.originalFunction = nativeLog; // #TODO use generic Wrapper mechanism here\n    // }\n    // if (!console.error.originalFunction) {\n    //     var nativeError = console.error;\n    //     console.error = function() {\n    //         nativeError.apply(console, arguments);\n    //         console.log.apply(undefined, arguments);\n    //     };\n    //     console.error.originalFunction = nativeError; // #TODO use generic Wrapper mechanism here\n    // }\n\n    // General Error Handling\n    if (window.onerror === null) {\n      window.onerror  = function(message, source, lineno, colno, error) {\n    \t  lively.handleError(error);\n      };\n    }\n    // do it just once\n    if (!window.unhandledRejectionEventLister) {\n      window.unhandledRejectionEventLister = function(evt) {lively.handleError(evt.reason)} ;\n      window.addEventListener('unhandledrejection', unhandledRejectionEventLister);\n    }\n\n    await this.exportModules();\n    \n\n    if (!window.lively4chrome) {\n      // for container content... But this will lead to conflicts with lively4chrome  ?? #Jens\n      lively.loadCSSThroughDOM(\"livelystyle\", lively4url + \"/templates/lively4.css\");\n    }\n    // preload some components\n    // #FixMe does not work this way, because this might conflict with the normal loading ....\n    // await components.loadByName(\"lively-window\");\n    // await components.loadByName(\"lively-editor\");\n    // await components.loadByName(\"lively-script\");\n    \n    setTimeout(() => {\n      // wait for the timeout and try again\n      document.body.querySelectorAll(\"img\").forEach(ea => ea.src = \"\" + ea.src) // #Hack #swx RPC messages...\n    }, 12 * 1000)\n\n\n  }\n\n\n  static async exportModules() {\n    exportmodules.forEach(name => lively[name] = eval(name)); // oh... this seems uglier than expectednit\n\n    await System.import(\"src/client/clipboard.js\").then( m => {\n      lively.clipboard = m.default\n    }) // depends on me\n    await System.import(\"src/client/graffle.js\") // depends on me\n    await System.import(\"src/client/draganddrop.js\") // depends on me\n    \n    \n    await System.import(\"src/client/poid.js\") // depends on me\n    // #TODO should we load fetch protocols lazy?\n    await System.import(\"demos/plex/plex-scheme.js\") // depends on me\n    await System.import(\"src/client/protocols/todoist.js\") \n    await System.import(\"src/client/protocols/wikipedia.js\") \n    await System.import(\"src/client/protocols/tmp.js\")\n    await System.import(\"src/client/protocols/bib.js\")\n    \n    await System.import(\"src/client/protocols/microsoft.js\") \n    \n    await System.import(\"src/client/files-caches.js\") // depends on me\n  }\n  \n\n  // #Deprecated who does/dir use this code and what for\n  static asUL(anyList){\n    var ul = document.createElement(\"ul\")\n    ul.style.minWidth = \"50px\"\n    ul.style.minHeight = \"50px\"\n    ul.style.backgroundColor = \"gray\"\n    anyList.forEach(ea => {\n      var item = document.createElement(\"li\")\n      item.textContent = ea\n      item.value = ea\n      ul.appendChild(item)\n    })\n    return ul\n  }\n\n\n  static openWorkspace(string, pos, worldContext) {\n    string = string || \"\";\n    var name = \"lively-code-mirror\"\n    return  lively.openComponentInWindow(name, null, pt(400,500), worldContext).then((comp) => {\n      comp.mode = \"text/jsx\";\n      comp.value = string;\n      comp.setAttribute(\"overscroll\", \"contain\")\n      comp.style.height = \"100%\"\n      var container = comp.parentElement\n      if (pos) lively.setGlobalPosition(container,pos);\n      container.setAttribute(\"title\", \"Workspace\");\n      comp.focus();\n      return comp;\n    });\n  }\n\n  static openInspector(object, pos, str, worldContext) {\n    return lively.openComponentInWindow(\"lively-inspector\", pos, pt(400,500), worldContext).then(inspector => {\n        inspector.windowTitle = \"Inspect: \" + str;\n        inspector.inspect(object);\n        return inspector\n    });\n  }\n\n  static ensureSpawnArea() {\n    var spawnId = \"livelySpawnArea\"\n    var spawn = document.body.querySelector(\"#\" + spawnId)\n    if (!spawn) {\n      spawn = document.createElement(\"div\")\n      spawn.id = spawnId\n      spawn.style.display = \"none\"\n      spawn.isMetaNode = true\n      document.body.appendChild(spawn)\n    }\n    return spawn\n  }\n  \n  \n  static async create(name=\"lively-table\", parent=this.ensureSpawnArea()) {\n    \n    // =this.ensureSpawnArea()\n    \n    var element = document.createElement(name)\n    // #TODO normal elements will not resolve this promoise #BUG\n    if (name.match(\"-\")) {\n      await lively.components.openIn(parent, element)\n    } else {\n      parent.appendChild(element)\n    }\n    // if (document.activeElement) {\n    //   var pos = lively.getGlobalBounds(document.activeElement).bottomLeft()\n    //   lively.setGlobalPosition(element, pos)\n    // }\n    return element\n  }\n\n  static pt(x,y) {\n    return pt(x,y)\n  }\n  \n  // #important\n  static setPosition(obj, point, mode, animateDuration) {\n    if (obj instanceof SVGElement && !(obj instanceof SVGSVGElement)) {\n      if (obj.transform && obj.transform.baseVal) {\n        // get the position of an svg element\n        var t = obj.transform.baseVal.consolidate()\n        if (t) {\n          t.setTranslate(point.x,point.y)\n        } else {\n          obj.setAttribute(\"transform\", `translate(${point.x}, ${point.y})`)\n        }\n      } else {\n        throw new Error(\"path has no transformation\")\n      }\n    } else {\n      var old = lively.getPosition(obj)\n      // normal DOM Element\n      obj.style.position = mode || \"absolute\";\n      obj.style.left = \"\"+  point.x + \"px\";\n      obj.style.top = \"\" +  point.y + \"px\";\n      obj.dispatchEvent(new CustomEvent(\"position-changed\"))\n      \n      if (animateDuration) {\n        obj.animate([\n          {left: old.x + \"px\", top: old.y + \"px\"},\n          {left: point.x + \"px\", top: point.y+ \"px\"}\n        ],{ \n          duration: animateDuration,\n        })\n      }\n      \n    }\n  }\n\n\n  // Example: lively.getPosition(that)\n\n  // #important\n  static getPosition(obj) {\n    \n    var pos;\n    if (obj instanceof SVGElement && !(obj instanceof SVGSVGElement)) {\n      if (obj.transform && obj.transform.baseVal) {\n        // get the position of an svg element\n        var t = obj.transform.baseVal.consolidate()\n        if (!t) return pt(0,0)\n        var m = t.matrix\n        var p = new DOMPoint(0, 0)\n        var r = p.matrixTransform(m)\n        if (!r || !r.x ) return pt(0,0)\n        return pt(r.x / r.w, r.y / r.w)\n      } else {\n        throw new Error(\"path has no transformation\")\n      }\n    }\n\n    if (obj.clientX !== undefined) {\n      return pt(obj.clientX, obj.clientY);\n    }\n    \n    // try to use directly the style object... \n    if (obj.style) {\n      pos = pt(parseFloat(obj.style.left), parseFloat(obj.style.top));\n    }\n    // keyboard events don't have a position.\n    // take the position of the target element.\n    if(obj instanceof KeyboardEvent) {\n      return lively.getGlobalPosition(obj.target);\n    }\n    // #Fallback .... and compute the style\n    if (isNaN(pos.x) || isNaN(pos.y)) {\n      var style = getComputedStyle(obj)\n      pos = pt(parseFloat(style.left), parseFloat(style.top));\n    }\n    return pos;\n  }\n\n  static  getExtent(node) {\n    if (node === window) {\n      return pt(window.innerWidth, window.innerHeight)\n    }\n    // using the getBoundingClientRect produces the wrong extent\n    var style = getComputedStyle(node);\n    if (!style) {\n      return pt(0,0)\n    }\n    return pt(parseFloat(style.width), parseFloat(style.height))\n  }\n\n  static  setExtent(node, extent) {\n    // node.style.width = '' + extent.x + 'px';\n    // node.style.height = '' + extent.y + 'px';\n    // node.dispatchEvent(new CustomEvent(\"extent-changed\"))\n    this.setWidth(node, extent.x, true)\n    this.setHeight(node, extent.y)\n  }\n\n  static setWidth(node, x, noevent) {\n    node.style.width = '' + x + 'px';\n    if (!noevent) node.dispatchEvent(new CustomEvent(\"extent-changed\"))\n  }\n\n  static setHeight(node, y, noevent) {\n    node.style.height = '' + y + 'px';\n    if (!noevent) node.dispatchEvent(new CustomEvent(\"extent-changed\"))\n  }\n\n\n  static  getGlobalPosition(node) {\n    // WARNING: this method works pretty well but does not consider any CSS transformation\n    if (!node.getBoundingClientRect) {\n      return pt(0, 0)\n    }\n    var bounds = node.getBoundingClientRect()\n    return pt(bounds.left, bounds.top)\n  }\n\n  static  setGlobalPosition(node, pos) {\n    // if (!node.parentElement) return\n    // var parentPos = this.getGlobalPosition(node.parentElement)\n    // this.setPosition(node, pos.subPt(parentPos))\n\n    // With all the parent elements, shadow roots and so on it is difficult to set a global position\n    // ususally, we would get the global position of a parent element, but this is not always correct\n    // so we use our own global position...\n    lively.setPosition(node, pt(0,0)) // #somehow one time is not enough...\n    var delta = pos.subPt(lively.getGlobalPosition(node))\n    lively.moveBy(node, delta)\n  }\n\n  static  getGlobalCenter(node) {\n    return this.getGlobalPosition(node).addPt(this.getExtent(node).scaleBy(0.5))\n  }\n\n  static  setGlobalCenter(node, pos) {\n    this.setGlobalPosition(node, pos.subPt(this.getExtent(node).scaleBy(0.5)))\n  }\n\n  static moveBy(node, delta, animateDuration) {\n    this.setPosition(node, this.getPosition(node).addPt(delta), undefined, animateDuration)\n  }\n\n  static  getBounds(node) {\n    var pos = lively.getPosition(node)\n    var extent = lively.getExtent(node)\n    return rect(pos, pos.addPt(extent))\n  }\n\n  static  setBounds(node, bounds) {\n    lively.setPosition(node, bounds.topLeft())\n    lively.setExtent(node, bounds.extent())\n  }\n\n\n  static  getGlobalBounds(node) {\n    var bounds = node.getBoundingClientRect()\n    if (!bounds) {\n      return rect(0,0,0,0)\n    } \n    return rect(bounds.left, bounds.top, bounds.width, bounds.height)\n  }\n\n  // compute the global bounds of an element and all absolute positioned elements\n  static getTotalGlobalBounds(element) {\n\n    var all = Array.from(element.querySelectorAll(\"*\"))\n      .filter(ea => ea.style.position == \"absolute\" || ea.style.position == \"relative\")\n      .concat([element])\n      .map(ea => lively.getGlobalBounds(ea))\n    var max\n    var min\n    all.forEach(ea => {\n      var topLeft = ea.topLeft()\n      var bottomRight = ea.bottomRight()\n      // console.log(\"ea \" + topLeft + \" \" + bottomRight)\n      min = topLeft.minPt(min || topLeft)\n      max = bottomRight.maxPt(max || bottomRight)\n    })\n    // console.log(\"min \" + min + \" max \" + max)\n    return rect(min, max)\n  }\n\n  static getScroll() {\n    return pt(\n      document.scrollingElement.scrollLeft || 0,\n      document.scrollingElement.scrollTop || 0);\n  }\n\n  // #Depricated\n  static openFile(url) {\n    if (url.hostname == \"lively4\") {\n      var container  = document.querySelector('lively-container')\n      if (container) {\n        container.followPath(url.pathname);\n      } else {\n        console.log(\"fall back on editor: \"+ url);\n        this.editFile(url);\n      }\n    } else {\n      this.editFile(url);\n    }\n  }\n\n  static editFile(url) {\n    var editor  = document.createElement(\"lively-editor\");\n    components.openInWindow(editor).then((container) => {\n        lively.setPosition(container, lively.pt(100, 100));\n        editor.setURL(url);\n        editor.loadFile();\n    });\n  }\n\n  static hideContextMenu(evt) {\n    if (evt.composedPath()[0] !== document.body) return;\n    console.log(\"hide context menu:\" + evt);\n    contextmenu.hide();\n  }\n\n  static openContextMenu(container, evt, target, worldContext) {\n    if (window.HaloService && \n        (HaloService.areHalosActive() ||\n        (HaloService.halosHidden && ((Date.now() - HaloService.halosHidden) < 500)))) {\n      target = that;\n    }\n    lively.contextmenu.openIn(container, evt, target, worldContext);\n  }\n\n  static nativeNotify(title, text, timeout, cb) {\n    if (!this.notifications) this.notifications = [];\n    this.notifications.push({title: title, text: text, cb: cb, time: Date.now()});\n\n\n    if (Notification.permission !== \"granted\") Notification.requestPermission();\n\n    var time = Date.now();\n\n    // check if the third last notification was already one second ago\n    if(this.notifications.length > 5 &&\n      (Date.now() - this.notifications[this.notifications.length - 3].time < 1000)) {\n      return console.log(\"SILENT NOTE: \" + title  + \" (\" + text + \")\");\n    }\n\n    console.log(\"NOTE: \" + title  + \" (\" + text + \")\");\n\n\n    var notification = new Notification(title || \"\", {\n      icon: 'https://www.lively-kernel.org/media/livelylogo-small.png',\n      body: text || \"\",\n    });\n    if (cb) notification.onclick = cb;\n    if (timeout === undefined) timeout = 3;\n    setTimeout(() => notification.close(), timeout * 1000);\n    // notification.onclick = cb\n\n  }\n\n  /** notify **\n   *\n   * - displays an notification in the lower left of screen\n   * - takes arguments also as object parameter\n   *\n   * EXAMPLE:\n   *\n      lively.notify({\n      \ttitle: \"hello\",\n      \ttext: \"world\",\n      \tcolor: \"blue\",\n      \ttimeout: 10,\n      \tdetails: \"what's up?\"})\n   */\n  static async notify(titleOrOptions, text, timeout, cb, color) {\n    try {\n      // #TODO make native notifications opitional?\n      // this.nativeNotify(title, text, timeout, cb)\n      var title = titleOrOptions;\n      new LivelyNotification({ title, text }).displayOnConsole();\n      if (titleOrOptions && titleOrOptions.title) {\n        title = titleOrOptions.title;\n        text = titleOrOptions.title;\n        timeout = titleOrOptions.timeout;\n        cb = titleOrOptions.more;\n        color = titleOrOptions.color;\n\n        // open details in a workspace\n        if (titleOrOptions.details) {\n          cb = () => {\n            lively.openWorkspace(titleOrOptions.details).then( comp => {\n              comp.parentElement.setAttribute(\"title\", title);\n              comp.unsavedChanges = () => false; // close workspace without asking\n            });\n          };\n        }\n      }\n\n      var notificationList = document.querySelector(\"lively-notification-list\")\n      if (!notificationList) {\n        notificationList = await lively.create(\"lively-notification-list\", document.body);\n        notificationList.addNotification(title, text, timeout, cb, color);\n      } else {\n        var duplicateNotification = Array.from(document.querySelectorAll(\"lively-notification\")).find(ea => \"\" + ea.title === \"\" + title && \"\" + ea.message === \"\" + text);\n        if (duplicateNotification) {\n          duplicateNotification.counter++;\n          duplicateNotification.render();\n        } else {\n          notificationList.addNotification(title, text, timeout, cb, color);\n        }\n      }\n    } catch(e) {\n      console.log('%cERROR in lively.notify', 'font-size: 9px; color: red', e);\n    }\n  }\n\n  static success(title, text, timeout, cb) {\n    lively.notify(title, text, timeout, cb, 'green');\n  }\n\n  static warn(title, text, timeout, cb) {\n    lively.notify(title, text, timeout, cb, 'yellow');\n  }\n\n  static error(title, text, timeout, cb) {\n    debugger\n    lively.notify(title, text, timeout, cb, 'red');\n  }\n\n  static async ensureHand() {\n    var hand = lively.hand\n    if (!hand) {\n      hand = await lively.create(\"lively-hand\", document.body)\n      hand.style.visibility = \"hidden\"\n    }\n    return hand\n  }\n\n  // we do it lazy, because a hand can be broken or gone missing...\n  static get hand() {\n    return document.body.querySelector(\":scope > lively-hand\")\n  }\n\n  static get selection() {\n    return Selection.current\n    // var selection = document.body.querySelector(\":scope > lively-selection\")\n    // if (!selection) {\n    //   selection = document.createElement(\"lively-selection\")\n    //   lively.components.openInBody(selection);\n    // }\n    // return selection\n  }\n\n  /*MD \n  # Inititialization \n  \n  MD*/\n  \n  // lively.ini\n  static initializeEvents(doc) {\n    doc = doc || document\n    this.addEventListener('lively', doc, 'mousedown', function(evt){\n      lively.onMouseDown(evt)}, false);\n    this.addEventListener('lively', doc, 'contextmenu', function(evt) {\n        lively.onContextMenu(evt)\n    }, false);\n    this.addEventListener('lively', doc, 'click', function(evt){lively.hideContextMenu(evt)}, false);\n    this.addEventListener('lively', doc, 'keydown', function(evt){lively.keys.handle(evt)}, false);\n    \n    this.addEventListener('lively', doc, 'keyup', function(evt){lively.keys.onKeyUp(evt)}, false);\n    events.installHooks()\n  }\n\n  static async initializeDocument(doc, loadedAsExtension, loadContainer) {\n    \n    this.loadedAsExtension = loadedAsExtension\n    \n    await modulesExported\n    \n    this.loadedAsExtension = loadedAsExtension\n    \n    console.log(\"Lively4 initializeDocument\" );\n    // persistence.disable();\n\n    await lively.loadCSSThroughDOM(\"font-awesome\", lively4url + \"/src/external/font-awesome/css/font-awesome.min.css\");\n    \n    lively.components.loadByName(\"lively-notification\")\n    lively.components.loadByName(\"lively-notification-list\")\n\n    this.initializeEvents(doc);\n    this.initializeHalos();\n\n    lively.addEventListener(\"preventDragCopy\", document, \"dragstart\", (evt) => {\n      if ((evt.composedPath()[0] === document.body)) {\n        evt.stopPropagation()\n        evt.preventDefault()\n      }\n    })\n\n    console.log(window.lively4stamp, \"load local lively content \")\n    // #RACE #TODO ... \n\n    // yes, we want also to change style of external websites...\n    await lively.loadCSSThroughDOM(\"lively4\", lively4url +\"/src/client/lively.css\");\n    \n    await persistence.current.loadLivelyContentForURL()\n    preferences.loadPreferences()\n    if (preferences.get('TipOfTheDay')) {\n      const existingContainers = Array.from(document.body.querySelectorAll('lively-code-tip'));\n      if(existingContainers.length !== 0) {\n        existingContainers.map(tip => tip.parentElement.remove());\n      }\n      lively.openComponentInWindow(\"lively-code-tip\");\n    }\n    // here, we should scrap any existing (lazyly created) preference, there should only be one\n\n    await lively.ensureHand();\n    \n    \n    // lively.selection;\n    \n    // #Hack... just to be on the save side #ACM\n    // where to put side specific adapations... cannot be overriden by CSS? #TODO\n    document.body.style.textAlign = \"left\"\n    \n    \n    if (loadedAsExtension) {\n      lively.notify(\"Lively4 extension loaded!\",\n        \"  CTRL+LeftClick  ... open halo\\n\" +\n        \"  CTRL+RightClick ... open menu\");\n      \n    } else {\n\n      // only scroll thrugh CTRL+drag #TODO what does UX say?\n      // document.body.style.overflow = \"hidden\"\n\n      var titleTag = document.querySelector(\"title\");\n      if (!titleTag) {\n        titleTag = document.createElement(\"title\");\n        titleTag.textContent = \"Lively 4\";\n        document.head.appendChild(titleTag);\n      }\n\n      document.body.style.backgroundColor = \"rgb(240,240,240)\"\n      ViewNav.enable(document.body)\n\n      \n      this.loadContainer = loadContainer // remember....\n      // if (loadContainer && lively.preferences.get(\"ShowFixedBrowser\")) {\n      //   this.showMainContainer()\n      // }\n    }\n\n    if(this.deferredUpdateScroll) {\n      document.scrollingElement.scrollLeft = this.deferredUpdateScroll.x;\n      document.scrollingElement.scrollTop = this.deferredUpdateScroll.y;\n      delete this.deferredUpdateScroll;\n\t\t}\n        \n    console.log(\"FINISHED Loading in \" + ((performance.now() - lively4performance.start) / 1000).toFixed(2) + \"s\")\n    console.log(window.lively4stamp, \"lively persistence start \")\n    \n    \n    setTimeout(() => {\n      console.log(\"start persistence...\")\n      persistence.current.start()\n    }, 2000)\n  }\n  \n  \n  \n  static async showMainContainer() {\n    var container = document.querySelector('main-content')\n    if (!container) {\n      var w = await lively.create(\"lively-window\");\n      document.body.appendChild(w)\n      container = await lively.create(\"lively-container\");\n      w.appendChild(container)\n      container.becomeMainContainer()\n    }\n    return container\n  }\n\n  static initializeHalos() {\n    if (!window.lively) {\n      return setTimeout(() => { this.initializeHalos() }, 100)\n    }\n    if (!document.body.querySelector('lively-halo')) {\n      lively.components.openInBody(document.createElement('lively-halo')).then(comp => {\n        comp.setAttribute('data-lively4-donotpersist', 'all')\n      })\n    }\n  }\n\n  static unload() {\n\n    lively.notify(\"unloading Lively is not supported yet! Please reload page....\");\n  }\n\n  /*\n   * After changing code... we have to update intances...\n   * a) don't touch the instance, just update the class\n   *\n   */\n  static async updateTemplate(html) {\n    var tagName = await components.reloadComponent(html);\n    if (!tagName) return;\n\n    let objectToMigrate = Array.from(document.body.querySelectorAll(tagName));\n    if(lively.halo) {\n      objectToMigrate.push(...lively.halo.shadowRoot.querySelectorAll(tagName));\n    }\n    objectToMigrate.forEach(oldInstance => {\n      if (oldInstance.__ignoreUpdates) return;\n      if (oldInstance.livelyUpdateStrategy !== 'migrate') return;\n      \n      // if (oldInstance.isMinimized && oldInstance.isMinimized()) return // ignore minimized windows\n      // if (oldInstance.isMaximized && oldInstance.isMaximized()) return // ignore isMaximized windows\n\n      var owner = oldInstance.parentElement || oldInstance.parentNode;\n      var newInstance = document.createElement(tagName);\n\n      if (oldInstance.livelyPreMigrate) {\n        oldInstance.livelyPreMigrate(oldInstance);\n      }\n      if (owner) {\n        owner.replaceChild(newInstance, oldInstance);\n      }\n      Array.from(oldInstance.childNodes).forEach(ea => {\n        if (ea) { // there are \"undefined\" elemented in childNodes... sometimes #TODO\n          newInstance.appendChild(ea);\n          // console.log(\"append old child: \" + ea);\n        }\n      });\n\n      Array.from(oldInstance.attributes).forEach(ea => {\n        // console.log(\"set old attribute \" + ea.name + \" to: \" + ea.value);\n        newInstance.setAttribute(ea.name, ea.value);\n      });\n\n      // Migrate Position\n      if (oldInstance.style.position == \"absolute\") {\n        newInstance.style.top = oldInstance.style.top;\n        newInstance.style.left = oldInstance.style.left;\n      }\n\n      // Migrate \"that\" pointer\n      if (window.that == oldInstance) {\n        window.that = newInstance;\n      }\n\n      if (newInstance.livelyMigrate) {\n        newInstance.livelyMigrate(oldInstance); // give instances a chance to take over old state...\n      }\n\n      // #LiveProgrammingHack\n      document.querySelectorAll(\"lively-inspector\").forEach(inspector => {\n        if (inspector.targetObject === oldInstance) {\n          inspector.inspect(newInstance)\n        }\n      })\n    });\n  \n\n    // new (old) strategy... don't throw away the instance... just update them inplace?\n    lively.findAllElements(ea => ea.tagName == tagName.toUpperCase(), true).forEach( ea => {\n      if (ea.livelyUpdate) {\n        try {\n          ea.livelyUpdate()\n        } catch(e) {\n          console.error(e)\n        }\n      }\n    })\n  }\n\n  static showInfoBox(target) {\n    var info = document.createElement(\"div\")\n    info.classList.add(\"draginfo\")\n    info.target = target\n    info.isMetaNode = true\n    info.style.width = \"300px\"\n    info.style['pointer-events'] = \"none\";\n    info.setAttribute(\"data-is-meta\", \"true\");\n    info.style.color = \"darkblue\"\n    info.update = function() {\n      lively.setGlobalPosition(this, lively.getGlobalPosition(this.target).subPt(pt(0, 20)))\n    }\n    info.style['z-index'] = 10000\n    info.update()\n    lively.addEventListener(\"ShowInfoBox\", target, \"position-changed\", () => {\n      info.update()\n    })\n    info.stop = function() {\n      this.remove()\n      lively.removeEventListener(\"ShowInfoBox\", target, \"position-changed\")\n    }\n\n    document.body.appendChild(info)\n    return info\n  }\n\n\n  static showPoint(point, removeAfterTime) {\n    return this.showRect(point, pt(5,5), removeAfterTime)\n  }\n\n  static showEvent(evt, removeAfterTime) {\n    var r = lively.showPoint(pt(evt.clientX, evt.clientY), removeAfterTime)\n    r.style.backgroundColor = \"rgba(100,100,255,05)\"\n    return r\n  }\n\n  static showRect(point, extent, removeAfterTime=3000) {\n    // check for alternative args\n    if (point && !extent) {\n      extent = point.extent()\n      point = point.topLeft()\n    }\n\n    if (!point || !point.subPt) return\n    var comp = document.createElement(\"div\");\n    comp.style['pointer-events'] = \"none\";\n    comp.style.width = extent.x + \"px\";\n    comp.style.height = extent.y + \"px\";\n    comp.style.padding = \"1px\";\n    comp.style.backgroundColor = 'rgba(255,0,0,0.5)';\n    comp.style.zIndex = 1000;\n    comp.isMetaNode = true;\n\n    var bodyBounds = document.body.getBoundingClientRect()\n\n\n    document.body.appendChild(comp);\n    lively.setPosition(comp, point.subPt(pt(bodyBounds.left, bodyBounds.top)));\n    comp.setAttribute(\"data-is-meta\", \"true\");\n\n    if (removeAfterTime) {\n      setTimeout( () => comp.remove(), removeAfterTime);\n    }\n    // ea.getBoundingClientRect\n    return comp\n  }\n\n\n  static showPath(path, color, printArrow) {\n    color = color || \"red\"\n    var comp = this.createPath(path, color, printArrow)\n    document.body.appendChild(comp);\n    comp.style.zIndex = 1000;\n    lively.setGlobalPosition(comp, pt(0,0));\n    comp.setAttribute(\"data-is-meta\", \"true\");\n    comp.isMetaNode = true;\n    comp.style.pointerEvents = \"none\";\n    comp.style.touchAction = \"none\";\n    setTimeout( () => comp.remove(), 3000);\n    return comp\n  }\n\n  static createPath(path, color, printArrow, label) {\n    if (!path || path.length < 1) return;\n    if (printArrow === undefined) printArrow = true;\n\n    var comp = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    comp.style = `position: absolute;\n        top: 0px;\n        left: 0px;\n        width: 100px;\n        height: 100px;\n        border: none;\n        opacity: 1;\n        overflow: visible;`\n\n    var dpath = path.map((ea,i) => (i == 0 ? \"M \" : \"L \") + ea.x + \" \" + ea.y).join(\" \")\n    var defs =\n`      <defs>\n          <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refX=\"2\" refY=\"6\"\n                 orient=\"auto\">\n              <path d=\"M2,2 L2,11 L10,6 L2,2\" style=\"fill: ${color};\" />\n          </marker>\n       </defs>`;\n\n    var last = _.last(path)\n\n    comp.innerHTML = defs + `<path id=\"path\" fill=\"none\" stroke='${color}' d='${dpath}' \n      style='${ \n        printArrow ? 'marker-end: url(#markerArrow);' : \"\"\n      }'></path>`  + `<g font-size=\"12\" font-family=\"sans-serif\" fill=\"${color}\" stroke=\"none\"\n  text-anchor=\"middle\">\n    <text x=\"${last.x}\" y=\"${last.y}\" dx=\"10\">${label ? label : \"\"}</text>\n  </g>`\n\n    return comp\n  }\n\n\n  static async showSource(object, evt) {\n    if (object instanceof HTMLElement) {\n      if (!object.localName.match(/-/)) {\n        return lively.notify(\"Could not show source for native element\");  \n      }\n      lively.openBrowser(await this.components.searchTemplateFilename(object.localName + \".html\"), true)\n    } else {\n      lively.notify(\"Could not show source for: \" + object);\n    }\n  }\n\n  static async showClassSource(object, evt) {\n    if (object instanceof HTMLElement) {\n      if (!object.localName.match(/-/)) {\n        return lively.notify(\"Could not show source for native element\");  \n      }\n      let templateFile =await this.components.searchTemplateFilename(object.localName + \".html\"),\n        source = await fetch(templateFile).then( r => r.text()),\n        template = lively.html.parseHTML(source).find( ea => ea.tagName == \"TEMPLATE\"),\n        moduleURL = await this.components.searchTemplateFilename(object.localName + \".js\");\n      lively.openBrowser(moduleURL, true);\n    } else {\n      lively.notify(\"Could not show source for: \" + object);\n    }\n  }\n\n\n  static showElement(elem, timeout) {\n    if (!elem || !elem.getBoundingClientRect) return ;\n    var comp = document.createElement(\"div\");\n    var bounds = elem.getBoundingClientRect();\n    var bodyBounds = document.body.getBoundingClientRect()\n    var offset = pt(bodyBounds.left, bodyBounds.top)\n    var pos = pt(bounds.left, bounds.top).subPt(offset);\n\n    comp.style.width = bounds.width +\"px\";\n    comp.style.height = bounds.height +\"px\";\n    comp.style['pointer-events'] = \"none\";\n    // comp.style.height = \"0px\"\n    comp.style[\"z-index\"] = 1000;\n    comp.style.border = \"1px solid red\";\n    comp.isMetaNode = true;\n    document.body.appendChild(comp);\n    lively.setPosition(comp, pos);\n    comp.setAttribute(\"data-is-meta\", \"true\");\n\n    comp.innerHTML = \"<pre data-is-meta='true' style='position: relative; top: -8px; width: 200px; background: rgba(255,255,255,0.8); color: red; font-size: 8pt'>\" +\n        elem.tagName +\": \" + elem.id + \"\\n\" +\n        elem.getAttribute(\"class\") +\"\\n\"\n\n      + \"</pre>\";\n\n    setTimeout( () => comp.remove(), timeout || 3000);\n    return comp;\n  }\n  \n  \n  // highlight and show log info on element\n  static showLog(elem, log=\"\", timeout) {\n     \n    var lastDebugLayer = debugLogHightlights.get(elem)\n    if (!lastDebugLayer || !lastDebugLayer.parentElement) {\n      var debugText = \"\"\n    } else {\n      debugText = lastDebugLayer.querySelector(\"pre\").textContent \n    }\n    var debugLayer = lively.showElement(elem, timeout)\n    debugLogHightlights.set(elem, debugLayer)\n    debugLayer.querySelector(\"pre\").textContent = debugText + \"\\n\" + log\n    \n  }\n  \n\n  static async showProgress(label) {\n    var progressContainer  = document.querySelector(\"#progressContainer\")\n    if (!progressContainer) {\n      progressContainer = document.createElement(\"div\")\n      progressContainer.id = \"progressContainer\"\n      progressContainer.isMetaNode = true\n      // progressContainer.style['pointer-events'] = \"none\";\n      progressContainer.style.zIndex = 1000\n      document.body.appendChild(progressContainer)\n      lively.setGlobalPosition(progressContainer, pt(50, 50))\n    }\n\n    var progress = document.createElement(\"lively-progress\")\n    await components.openIn(progressContainer, progress)\n    lively.setExtent(progress, pt(300,20))\n    progress.textContent = label\n    return progress\n  }\n\n  static allProperties(obj, result) {\n    result = result || {};\n    Object.getOwnPropertyNames(obj).forEach( name => {result[name] = obj.constructor.name});\n    if (obj.__proto__) {\n      lively.allProperties(obj.__proto__, result);\n    }\n    return result;\n  }\n\n  static templateClassNameToTemplateName(className) {\n    return className.replace(/[A-Z]/g, ea => \"-\" + ea.toLowerCase()).replace(/^-/,\"\");\n  }\n\n\n  // Example code for looking up templates in links:\n  // Array.from(document.head.querySelectorAll(\"link\"))\n  //   .filter(ea => ea.getAttribute(\"rel\") == \"import\")\n  //   .map(ea => ea.href)\n  //   .find(ea => ea.endsWith(\"lively-digital-clock.html\"))\n\n  static async registerTemplate() {\n    var template = document.currentScript.ownerDocument.querySelector('template');\n    var clone = document.importNode(template.content, true);\n    var proto;\n    var className = template.getAttribute(\"data-class\");\n    if (className) {\n      // className = \"LivelyFooBar\"\n      let baseName = this.templateClassNameToTemplateName(className);\n      var url = await this.components.searchTemplateFilename(baseName +\".js\")\n      if (url) {\n        // console.log(\"Components: load module \" + url)\n        var module = await System.import(url);\n        proto =  Object.create(module.prototype || module.default.prototype);\n      } else {\n        throw new Error(\"Components: could not find module for \" + baseName)\n      }\n    }\n    components.register(template.id, clone, proto);\n  }\n\n  static get eventListeners() {\n    if (!window.livelyEventListeners) {\n      window.livelyEventListeners = [];\n    }\n    return window.livelyEventListeners;\n  }\n\n  static set eventListeners(list) {\n      window.livelyEventListeners = list;\n  }\n\n  // Registration and deregistration of eventlisteners for run-time programming...\n  static addEventListener(domain, target, type, listener, options) {\n    this.eventListeners.push(\n      {target: target, type: type, listener: listener, domain: domain, options: options});\n    target.addEventListener(type, listener, options);\n  }\n\n  static removeEventListener(domain, target, type, listener) {\n    this.eventListeners = this.eventListeners.filter(ea => {\n      if ((!target      || (ea.target   === target))\n          && (!type     || (ea.type     ==  type))\n          && (!listener || (ea.listener === listener))\n          && (!domain   || (ea.domain   ==  domain))) {\n        // actually removing the event listener\n        // console.log(\"removeEventListener\", ea.target, ea.type, ea.listener)\n        ea.target.removeEventListener(ea.type, ea.listener, ea.options);\n        return false;\n      } else {\n        return true;\n      }\n    });\n  }\n\n  static openSearchWidget(text, worldContext, searchContext=document.body) {\n    if (lively.preferences.get(\"FileIndex\")) {\n      this.openComponentInWindow(\"lively-index-search\").then( comp => {\n        var pattern = text.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\")\n        comp.searchFile(pattern);\n        lively.setExtent(comp.parentElement, pt(1000,700))\n        comp.focus()\n      });\n    } else {\n      var container = lively.query(searchContext, \"lively-container\")\n      this.openComponentInWindow(\"lively-search\", undefined, undefined, worldContext).then( comp => {\n        if (container) {\n          // search in the current repository\n          var url = container.getURL().toString()\n          var base = lively4url.replace(/[^/]*$/,\"\")\n          if (url.match(base)) {\n            var repo = url.replace(base,\"\").replace(/\\/.*$/,\"\")\n            comp.searchRoot = repo\n          }\n        }\n        comp.searchFile(text);\n        comp.focus()\n\n      });\n    } \n      \n      // #Depricated\n      // var comp = document.getElementsByTagName(\"lively-search-widget\")[0];\n      // if (comp.isVisible && text == comp.query) {\n      //   comp.isVisible = false;\n      // } else {\n      //   comp.isVisible = true;\n      //   comp.search(text, true);\n      // }\n    \n  }\n\n  static hideSearchWidget() {\n    console.log('hide search widget')\n    document.body.querySelectorAll(\"lively-search\").forEach( ea => ea.parentElement.remove());\n  }\n\n  static openIssue(number) {\n    // #TODO customize or derive github issue url, making it context cependend\n    window.open(\"https://github.com/LivelyKernel/lively4-core/issues/\" + number)\n  }\n\n  static openHelpWindow(text) {\n    this.openComponentInWindow(\"lively-help\").then(comp => {\n      comp.parentElement.style.width = \"850px\";\n      comp.parentElement.style.height = \"600px\";\n      comp.getHelp(text);\n    });\n  }\n\n\n\n  static openComponentInWindow(name, globalPos, extent, worldContext) {\n    worldContext = worldContext || document.body\n\n    var w = document.createElement(\"lively-window\");\n    if (extent) {\n      w.style.width = extent.x;\n      w.style.height = extent.y;\n    }\n    if (!globalPos) {\n      let pos = lively.findPositionForWindow(worldContext);\n      globalPos = lively.getGlobalPosition(worldContext).addPt(pos);\n    }\n\n    return components.openIn(worldContext, w, true).then(w => {\n      lively.setGlobalPosition(w, globalPos);\n\n      return components.openIn(w, document.createElement(name)).then(comp => {\n        components.ensureWindowTitle(comp, w)\n        return comp;\n      });\n    });\n  }\n\n  static findPositionForWindow(worldContext) {\n     // this gets complicated: find a free spot starting top left going down right\n      var windows = Array.from(worldContext.querySelectorAll(\":scope > lively-window\"))\n      var offset = 20\n      var pos\n      var topLeft = pt(50,50)\n\n      for(var i=0; !pos; i++) {\n        let p1 = pt(i * offset, i * offset)\n        let p2 = pt((i + 1) * offset, (i + 1) * offset)\n        var found = windows.find( ea => {\n          // var ea = that; var i =0\n          var eaPos = lively.getGlobalPosition(ea).subPt(topLeft)\n          // check if there is a window in direction bottom right\n          return (p1.lessPt(eaPos) || p1.eqPt(eaPos)) && eaPos.lessPt(p2)\n        });\n        // no window is found... so place the next there\n        if (!found) pos = topLeft.addPt(pt(i * offset, i* offset))\n      }\n      return pos.subPt(lively.getGlobalPosition(worldContext))\n  }\n\n  // lively.openBrowser(\"https://lively4/etc/mounts\", true, \"Github\")\n  static async openBrowser(url, edit, patternOrPostion, replaceExisting, worldContext) {\n    worldContext = worldContext || document.body\n    if (patternOrPostion && patternOrPostion.line)\n      var lineAndColumn = patternOrPostion\n    else\n      var pattern = patternOrPostion\n\n    if (!url || !url.match(/^[a-z]+:\\/\\//))\n      url = lively4url\n    var livelyContainer;\n    var containerPromise;\n    if (replaceExisting) {\n      livelyContainer = Array.from(worldContext.querySelectorAll(\"lively-container\")).find(ea => ea.isSearchBrowser);\n    }\n\n    var lastWindow = _.first(Array.from(worldContext.querySelectorAll(\"lively-window\"))\n      .filter(  ea => ea.childNodes[0] && ea.childNodes[0].isSearchBrowser));\n\n    containerPromise = livelyContainer ? Promise.resolve(livelyContainer) :\n      lively.openComponentInWindow(\"lively-container\", undefined, undefined, worldContext);\n\n    return containerPromise.then(comp => {\n      livelyContainer = comp;\n      livelyContainer.hideNavbar()\n      comp.parentElement.style.width = \"950px\";\n      comp.parentElement.style.height = \"800px\";\n\n      if (lastWindow) {\n        lively.setPosition(comp.parentElement,\n          lively.getPosition(lastWindow).addPt(pt(25,25)));\n      }\n\n      if (edit) comp.setAttribute(\"mode\", \"edit\");\n      if (pattern) {\n        comp.isSearchBrowser = true;\n        comp.hideNavbar();\n      }\n      return comp.followPath(url)\n    }).then(async () => {\n      if (edit) {\n        await livelyContainer.asyncGet(\"#editor\").then(async livelyEditor => {\n          var codeMirror = await livelyEditor.awaitEditor()\n    \n          if(pattern) {\n            livelyEditor.find(pattern);\n            \n          } else if (lineAndColumn) {\n            \n            codeMirror.setSelection(\n              {line: lineAndColumn.line, ch: lineAndColumn.column},\n              {line: lineAndColumn.line, ch: lineAndColumn.column + \n                (lineAndColumn.selection ? + lineAndColumn.selection.length : 0)})\n            // #TODO ...\n            // ace.gotoLine(lineAndColumn.line, lineAndColumn.column)\n          }\n          codeMirror.focus()\n          codeMirror.scrollIntoView(codeMirror.getCursor(), 200)\n        });\n      }\n      return livelyContainer\n    });\n  }\n\n  static openDebugger() {\n    if(!window.lively4ChromeDebugger) {\n      return lively.notify(\"Please install Lively4Chrome Extension for debugger support.\");\n    }\n    window.lively4ChromeDebugger.getCurrentDebuggingTarget().then((res) => {\n      // Use chrome.window.create to create an independent window, window.open does not work\n      window.lively4ChromeDebugger.createWindow({\n        url: lively4url + '/debugger.html?targetId=' + res.targetId,\n        width: 1000, left: parseInt((screen.width - 1000)/2),\n        height: 750, top: parseInt((screen.height - 750)/2),\n        type: 'popup'\n      }).catch((error) => {\n        lively.notify(\"Unable to create new window for debugger.\")\n      });\n    });\n  }\n\n  static get(query) {\n    return document.querySelector(query)\n  }\n\n  static confirm(msg) {\n    return Dialog.confirm(msg)\n  }\n\n  static prompt(msg, value, customizeCB) {\n    return Dialog.prompt(msg, value, customizeCB)\n  }\n\n  static findWorldContext(element) {\n    \n    if (!element) return document.body\n    if (element.id == \"container-root\") return element\n    \n    if (!element.parentElement) {\n      \n      // if (element.parentNode.host && element.parentNode.host.localName == \"lively-container\") {\n      //   return element.parentNode.host.getContentRoot()\n      // }\n     // ||  element.tagName == \"LIVELY-FIGURE\"\n      return element.parentNode; // shadow root\n    }\n    \n    if (element.tagName == \"BODY\")\n      return element\n    else\n      return this.findWorldContext(element.parentElement)\n  }\n\n  \n  static activeElement(worldContext, type) {\n    worldContext = worldContext || document\n    var element = worldContext.activeElement\n    if (type && element.localName == type) return element\n    if (element.shadowRoot && element.shadowRoot.activeElement)\n      return this.activeElement(element.shadowRoot, type); // probe if we want to go deeper\n    return element\n  }\n\n  static findWindow(element) {\n    if (element.isWindow) return element;\n    if (element.parentNode) return this.findWindow(element.parentNode);\n    if (element.host) return this.findWindow(element.host);\n    return document.body; // nothing found... just use the body\n  }\n\n  // lively.print(document)\n  static print(obj) {\n    var s = \"\" + obj + \"{\"\n    for(var i in obj) {\n      if (!(obj[i] instanceof Function) && obj[i] !== undefined)\n      s += i + \": \" + obj[i] + \"\\n\"\n    }\n    s +\"}\"\n    return s\n  }\n\n\n  static allKeys(obj) {\n    var keys = []\n    for(var i in obj) {\n      if (obj.hasOwnProperty(i) || obj.__lookupGetter__(i)) {\n        keys.push(i);\n      }\n    }\n    return keys\n  }\n\n\n  static currentStack() {\n    try {\n      throw new Error(\"XYZError\")\n    } catch(e) {\n      return e.stack.split(\"\\n\")\n        .filter(ea => !ea.match(\"src/client/ContextJS/src/Layers.js\") )\n        .filter(ea => !ea.match(\"XYZError\") )\n        .filter(ea => !ea.match(\"currentStack\") )\n        .map(ea => ea.replace(/\\(.*?\\)/,\"\"))\n        .join(\"\\n\")\n    }\n  }\n\n\n  static onUnload() {\n    // #TODO How to deal with multiple open lively pages?\n    // last closing site wins!\n    // #IDEA: we could versionize the local content and saving to it will merge in conflicting changes first? But for this to work, we would need a change history in our local storage, too?\n    persistence.current.saveLivelyContent()\n  }\n\n  /* Change Preference Callbacks */\n\n  static async onInteractiveLayerPreference(enabled) {\n    if (enabled) {\n      await System.import(\"src/client/interactive.js\");\n      InteractiveLayer.beGlobal()\n    } else {\n      if (window.InteractiveLayer)\n        InteractiveLayer.beNotGlobal()\n    }\n  }\n\n  static async onShowFixedBrowserPreference(enabled) {\n    if (!this.loadedAsExtension && enabled) {\n      this.showMainContainer()\n    } else {\n      var content = document.querySelector(\"#main-content\")\n      if (content && content.parentElement.isWindow ) {\n        content.parentElement.remove()\n      }\n    }\n  }\n\n  static async onShowDocumentGridPreference(enabled) {\n    if (enabled) {\n      ViewNav.showDocumentGrid(document.body)\n    } else {\n      ViewNav.hideDocumentGrid(document.body)\n    }\n  }\n\n  static async onOfflineFirstPreference(enabled) {\n    // store it where the service worker can see it... before we are loaded\n    lively.focalStorage.setItem(\"swxOfflineFirst\", enabled)\n    if (navigator.serviceWorker && navigator.serviceWorker.controller) {\n      navigator.serviceWorker.controller.postMessage({\n        type: 'config',\n        option: \"offlineFirst\",\n        value: enabled\n      });\n    } else {\n      console.log(\"onOfflineFirstPreference: navigator.serviceWorker.controller not there?\")\n    }\n\n\n  }\n\n\n  static async onBodyPositionPreference(pos) {\n    lively.setPosition(document.body, pos)\n  }\n\n  static async onBodyScrollPreference(pos) {\n    this.deferredUpdateScroll = pos;\n  }\n  \n  static async onFileIndexPreference(bool) {\n    if (bool) {\n      if(!this.fileIndexWorker) {\n        this.fileIndexWorker = new SystemjsWorker(\"src/worker/fileindex-worker.js\")\n      }\n      this.fileIndexWorker.postMessage({message: \"updateDirectory\", url: lively4url + \"/\"})\n    }\n  }\n\n  /*\n   * Continousely send a message to swx to keep it alive, since it boots slowly...\n   */\n  static async onSWXKeepAlivePreference(bool) {\n    while(lively.preferences.get(\"SWXKeepAlive\")) {\n      if (navigator.serviceWorker && navigator.serviceWorker.controller) {\n        navigator.serviceWorker.controller.postMessage({\n          type: 'meta',\n          command: 'keepalive'\n        });        \n      }\n      // console.log(\"swx keep alive\")\n      await lively.sleep(1000)\n    }\n  }\n\n  /*\n   * keep detailed bootlog in indexdb for later visualization and analysis\n   */\n  static async onLogBootPreference(bool) {\n    localStorage[\"logLivelyBoot\"] = bool\n  }\n\n  static isGlobalKeyboardFocusElement(element) {\n    return element === document.body\n      || (element && element.id == \"copy-hack-element\")\n      || (element  && element.tagName == \"LIVELY-CONTAINER\" && element.shadowRoot && !element.shadowRoot.activeElement)\n  }\n\n  static hasGlobalFocus() {\n    return this.isGlobalKeyboardFocusElement(document.activeElement)\n  }\n\n  static globalFocus() {\n    // document.querySelector('#copy-hack-element').remove()\n    // var copyHack = document.querySelector('#copy-hack-element')\n    //   if (!copyHack) {\n    //     copyHack = document.createElement(\"input\")\n    //     lively.setPosition(copyHack, pt(0,0))\n    //     lively.setExtent(copyHack, pt(30,30))\n    //     copyHack.style.backgroundColor = \"red\"\n    //     copyHack.id = \"copy-hack-element\"\n    //     copyHack.isMetaNode = true\n    //     document.body.appendChild(copyHack)\n    //   }\n    // lively.focusWithoutScroll(copyHack)\n\n    this.focusWithoutScroll(document.body)\n  }\n\n  // #TODO: feature is under development and will ship in Chrome 64\n  // same as element.focus({ preventScroll : true}); ?\n  static focusWithoutScroll(element) {\n    if (!element) return;\n    // console.log(\"focusWithoutScroll \" + element)\n    var scrollTop = document.scrollingElement.scrollTop;\n    var scrollLeft = document.scrollingElement.scrollLeft;\n    element.focus({ preventScroll : true});\n    // the focus scrolls as a side affect, but we don't want that\n    document.scrollingElement.scrollTop = scrollTop;\n    document.scrollingElement.scrollLeft = scrollLeft;\n    //console.log(\"scroll back \" + scrollTop + \" \" + scrollLeft )\n  }\n\n  static ensureID(element) {\n    var id = element.getAttribute(\"data-lively-id\")\n    if (!id) {\n      id = generateUUID()\n      element.setAttribute(\"data-lively-id\", id)\n    }\n    return id\n  }\n\n  static elementByID(id, worldContext) {\n    if (!id) return;\n    worldContext = worldContext || document;\n    return worldContext.querySelector('[data-lively-id=\"' + id + '\"]');\n  }\n\n  static query(element, query) {\n   // lively.showElement(element)\n   var result = element.querySelector(query)\n   if (!result && element.isWindow) return; // scope that search to windows\n   if (!result && element.parentElement) result = this.query(element.parentElement, query)\n   if (!result && element.parentNode) result = this.query(element.parentNode, query)\n   if (!result && element.host && element.host.querySelector) result = this.query(element.host, query)\n   return result\n  }\n  \n  static waitOnQuerySelector(element, selector, maxtime) {\n    maxtime = maxtime || 10000;\n    var startTime = Date.now();\n    return new Promise((resolve, reject) => {\n      var check = () => {\n        var found = element.querySelector(selector);\n        if (found) resolve(found);\n        else if (Date.now() - startTime > maxtime) reject();\n        else setTimeout(check, 100);\n      };\n      check();\n    });\n  }\n  \n  static elementToCSSName(element) {\n    try {\n      return element.localName + (element.id  ? \"#\" + element.id : \"\")  + (element.classList && element.classList.length > 0   ? \".\" + Array.from(element.classList).join(\".\") : \"\")      \n    } catch(e) {\n      return \"\" // silent fail.... \n    }\n  }\n\n  static async openPart(partName, worldContext=document.body) {\n    var data = await fetch(`${lively4url}/src/parts/${partName}.html`).then(t => t.text())\n    var element  = lively.clipboard.pasteHTMLDataInto(data, worldContext);\n    element.setAttribute(\"data-lively-part-name\", partName)\n    return element\n  }\n\n  static queryAll(element, query) {\n    var all = new Set()\n    element.querySelectorAll(query).forEach(ea => all.add(ea))\n    var containers = element.querySelectorAll(\"lively-container\")\n    containers.forEach(ea => {\n      ea.shadowRoot.querySelectorAll(query).forEach(ea => all.add(ea))\n    })\n    return Array.from(all)\n  }\n\n  \n  static gotoWindow(element, justFocuWhenInBounds) {\n    element.focus()\n\n    if (!justFocuWhenInBounds) {\n      var elementBounds = lively.getGlobalBounds(element) \n      var windowBounds = rect(0,0, window.innerWidth, window.innerHeight)\n      if (!windowBounds.containsRect(elementBounds)) {\n        // only do somthing if we are not visible\n        document.scrollingElement.scrollTop = 0\n        document.scrollingElement.scrollLeft = 0\n        var offset = pt(window.innerWidth, window.innerHeight).subPt(lively.getExtent(element))\n        \n        var pos = lively.getPosition(element).subPt(offset.scaleBy(0.5))\n        lively.setPosition(document.body, pos.scaleBy(-1), undefined, 1000)        \n      }\n    }\n  }\n\n  //  lively.allPreferences()\n  static allPreferences() {\n    var regexp = /on(.*)Preference/\n    return Object.getOwnPropertyNames(lively)\n      .filter(ea => ea.match(regexp))\n      .map(ea => ea.match(regexp)[1])\n  }\n\n  static async bench(func) {\n    var s = Date.now()\n    await func()\n    return Date.now() - s\n  }\n\n  static get halo() {\n    return HaloService.instance;\n  }\n\n  static onMouseDown(evt) {\n    // lively.showEvent(evt)\n    lively.lastScrollTop = document.scrollingElement.scrollTop;\n    lively.lastScrollLeft = document.scrollingElement.scrollLeft;\n  }\n\n  static async onContextMenu(evt) {\n    if (!evt.shiftKey) { // evt.ctrlKey\n      evt.preventDefault();\n      evt.stopPropagation();\n      if (lively.lastScrollLeft) {\n        document.scrollingElement.scrollTop = lively.lastScrollTop;\n        document.scrollingElement.scrollLeft = lively.lastScrollLeft;\n      }\n      var link = Array.from(evt.composedPath()).find(ea => ea.localName == \"a\")\n      if (link) {\n        // #TODO can we shorten this or hide this context specific behavior, \n        // e.g. asking a link for href in the \"context\" of a lively container should\n        // produce the following behavior! #ContextJS #UseCase \n        var url = link.getAttribute(\"href\")\n        var container = await lively.query(link, \"lively-container\")\n        if (!url.match(/^[a-zA-Z0-9]+:/)) {\n          if (container) {\n            url = container.getURL().toString().replace(/[^/]*$/,\"\") + url\n          }\n        }\n        var items = []\n        if (container) {\n          items.push([\"follow\", () => {\n            container.followPath(url)\n          }])\n        }\n        items.push([\"open in window\", () => {\n          lively.openBrowser(url)\n        }])\n        items.push([\"edit in window\", () => {\n          lively.openBrowser(url, true)\n        }])\n        var menu = new lively.contextmenu(this, items );\n        menu.openIn(document.body, evt, this);\n        \n      } else  {\n        lively.openContextMenu(document.body, evt);\n      }\n      return false;\n    }\n  }\n\n  static halt(time=1000) {\n    window.setTimeout(() => {\n      debugger\n    }, time);\n  }\n\n  static async sleep(time=1000) {\n    return wait(time);\n  }\n  \n  // check something, and sleep and check again... stop after found or timeout\n  // \"when in doubt let it tick\"\n  static async sleepUntil(cb, time=5000, step=50) {\n      var timeout;\n        lively.sleep(time).then(() => {\n          timeout = true})\n      var result  \n      while(!result && !timeout) {\n        result = cb()\n        await lively.sleep(step)\n      }\n      return result\n  }\n\n  static async time(func) {\n    var start = performance.now()\n    if (func) {\n      await func()\n    } \n    return performance.now() - start\n  }\n  \n  \n  static allElements(deep=false, root=document.body, all=new Set()) {\n    if (deep && root.shadowRoot) {\n      this.allElements(deep, root.shadowRoot, all)\n    }\n    root.querySelectorAll(\"*\").forEach(ea => {\n      if (deep && ea.shadowRoot) {\n        this.allElements(deep, ea.shadowRoot, all)\n      }\n      all.add(ea)\n    })\n    all.add(root)\n    return all\n  }\n  \n  static allTextNodes(root){\n    var n, \n        result=[], \n        walk=document.createTreeWalker(root, NodeFilter.SHOW_TEXT,null,false);\n    while(n=walk.nextNode()) {\n      result.push(n);\n    }\n    return result;\n  }\n\n  static findAllElements(filterFunc, deep) {\n    return Array.from(this.allElements(deep)).filter(filterFunc)\n  }\n  \n  static allParents(element, parents=[], deep = false) {\n    if (!element) return parents\n    if (!element.parentElement) {\n      if(deep && element.parentNode) {\n        if (element.parentNode === document) {\n          return parents\n        }\n        parents.push(element.parentNode)\n        parents.push(element.parentNode.host)\n        \n        return this.allParents(element.parentNode.host, parents, deep)\n      } else {\n        return parents\n      }\n    }\n    parents.push(element.parentElement)\n    this.allParents(element.parentElement, parents, deep)\n    return parents\n  }\n  \n  /* test if element is in DOM */\n  static isInBody(element) {\n    return this.allParents(element, undefined, true).includes(document.body)\n  }\n\n  static showHalo(element) {\n    window.that = element\n    HaloService.showHalos(element)\n  }\n  \n  static swxURL(url) {\n    var m = url.toString().match(/^([a-zA-Z0-9]+)\\:\\/?\\/?(.*)$/)\n    if (!m) {\n      throw new Error(\"coudl not convert url to an swx form: \" + url)\n    }\n    return \"https://lively4/scheme/\" + m[1] +\"/\" + m[2]\n  }\n\n  static allElementsFromPoint(pos, root=document, visited=new Set()) {\n    var result = []\n    var elements = root.elementsFromPoint(pos.x, pos.y)\n    // this is a workaround of the issue that elementsFromPoint contains parent elements...\n    \n    elements\n      .filter(e => {\n        const notYetVisited = !visited.has(e);\n        visited.add(e)\n        return notYetVisited;\n      })\n      .forEach(ea => {\n        if (ea.shadowRoot && ea.shadowRoot.elementsFromPoint) {\n          var shadowRootElements = this.allElementsFromPoint(pos, ea.shadowRoot, visited)\n          result.push(...shadowRootElements)        \n        }\n        result.push(ea)\n      })\n\n    return result\n  }\n  \n  \n  static registerSWXFetchHandler() {\n    \n    if (!navigator.serviceWorker) {\n      console.warn(\"[lively] registerSWXFetchHandler faile: no serviceWorker found\")\n      return;\n    }\n    lively.removeEventListener(\"proxy\", navigator.serviceWorker)\n    lively.addEventListener(\"proxy\", navigator.serviceWorker, \"message\", async (evt) => {\n        try {\n          if(!evt.data.name || !evt.data.name.match('swx:proxy:')) return; // not for me\n\n          let url = evt.data.url\n          if (!evt.ports[0]) {\n            console.warn(\"registerSWXFetchHandler got message... but could not answer\")\n            return \n          }\n          if(evt.data.name == 'swx:proxy:GET') {\n            // console.log(\"[lively] registerSWXFetchHandler FETCH SWX: \" + url)\n            evt.ports[0].postMessage({content: await fetch(url, {\n              method: \"GET\",\n              headers: Object.assign(evt.data.headers, {\n                \"lively-proxied\": \"true\"\n              })\n            }).then(r => r.blob())}); \n          } \n        } catch(err) {\n          evt.ports[0].postMessage({error: err});\n        }\n      });\n\n  }\n}\n\nif (!window.lively || window.lively.name != \"Lively\") {\n  window.lively = Lively;\n  console.log(window.lively4stamp, \"loaded lively intializer\");\n  // only load once... not during development\n  Lively.loaded();\n} else {\n  var oldLively = window.lively\n  Lively.previous = oldLively\n  Lively.fileIndexWorker = oldLively.fileIndexWorker\n  window.lively = Lively;\n}\n\n// #TODO pull this this out into boot.js #Continue\nlively.registerSWXFetchHandler() // #BUG this is to late for booting lively itself if not everthing is in the zip\n\n\nvar modulesExported = Lively.exportModules();\n\n\n\n\n\nconsole.log(window.lively4stamp, \"loaded lively\");\n"]}