aboutsummaryrefslogtreecommitdiffstats
path: root/dist/plyr.js.map
diff options
context:
space:
mode:
Diffstat (limited to 'dist/plyr.js.map')
-rw-r--r--dist/plyr.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index 9dc8343e..2a50f4fa 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isKeyboardEvent","KeyboardEvent","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","keyboardEvent","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","resolve","setTimeout","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","prototype","match","querySelectorAll","includes","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","getElement","querySelector","trapFocus","focusable","first","last","trap","keyCode","focused","activeElement","shiftKey","focus","preventDefault","setFocus","tabFocus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","err","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","storage","cancelRequests","blankVideo","debug","log","dedupe","indexOf","closest","reduce","prev","curr","Math","abs","cloneDeep","JSON","parse","stringify","getDeep","path","obj","shift","generateId","prefix","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","resources","vimeo","youtube","i18n","seekTime","title","Storage","enabled","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sort","a","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","setDownloadLink","download","create","inner","home","backButton","href","urls","isEmbed","inject","seektime","insertMethod","addProperty","controlPressed","labels","parseUrl","safe","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","browserLanguages","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","rect","currentTarget","attribute","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","define","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EAEA,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,CAAAC,KAAK;EAAA,SAAKA,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAAnC,GAAiDA,KAAK,CAACC,WAAvD,GAAqE,IAA1E;EAAA,CAA5B;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACF,KAAD,EAAQC,WAAR;EAAA,SAAwBE,OAAO,CAACH,KAAK,IAAIC,WAAT,IAAwBD,KAAK,YAAYC,WAA1C,CAA/B;EAAA,CAAnB;;EACA,IAAMG,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAJ,KAAK;EAAA,SAAIA,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAAvC;EAAA,CAA/B;;EACA,IAAMK,QAAQ,GAAG,SAAXA,QAAW,CAAAL,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BM,MAA9B;EAAA,CAAtB;;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAAP,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BQ,MAA1B,IAAoC,CAACA,MAAM,CAACC,KAAP,CAAaT,KAAb,CAAzC;EAAA,CAAtB;;EACA,IAAMU,QAAQ,GAAG,SAAXA,QAAW,CAAAV,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BW,MAA9B;EAAA,CAAtB;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAAZ,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BG,OAA9B;EAAA,CAAvB;;EACA,IAAMU,UAAU,GAAG,SAAbA,UAAa,CAAAb,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0Bc,QAA9B;EAAA,CAAxB;;EACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAf,KAAK;EAAA,SAAIgB,KAAK,CAACD,OAAN,CAAcf,KAAd,CAAJ;EAAA,CAArB;;EACA,IAAMiB,SAAS,GAAG,SAAZA,SAAY,CAAAjB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQkB,OAAR,CAAd;EAAA,CAAvB;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAnB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQoB,QAAR,CAAd;EAAA,CAAxB;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAArB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQsB,OAAR,CAAd;EAAA,CAAvB;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAvB,KAAK;EAAA,SAAID,cAAc,CAACC,KAAD,CAAd,KAA0BwB,IAA9B;EAAA,CAAxB;;EACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAzB,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQ0B,KAAR,CAAd;EAAA,CAArB;;EACA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAAA3B,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQ4B,aAAR,CAAd;EAAA,CAA7B;;EACA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAA7B,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQ8B,MAAM,CAACC,YAAf,CAAV,IAA0C7B,UAAU,CAACF,KAAD,EAAQ8B,MAAM,CAACE,MAAf,CAAxD;EAAA,CAAnB;;EACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAjC,KAAK;EAAA,SAAIE,UAAU,CAACF,KAAD,EAAQkC,SAAR,CAAV,IAAiC,CAAC9B,iBAAiB,CAACJ,KAAD,CAAlB,IAA6BU,QAAQ,CAACV,KAAK,CAACmC,IAAP,CAA1E;EAAA,CAArB;;EAEA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAApC,KAAK;EAAA,SACjBI,iBAAiB,CAACJ,KAAD,CAAjB,IACC,CAACU,QAAQ,CAACV,KAAD,CAAR,IAAmBe,OAAO,CAACf,KAAD,CAA1B,IAAqCmB,UAAU,CAACnB,KAAD,CAAhD,KAA4D,CAACA,KAAK,CAACqC,MADpE,IAEChC,QAAQ,CAACL,KAAD,CAAR,IAAmB,CAACM,MAAM,CAACgC,IAAP,CAAYtC,KAAZ,EAAmBqC,MAHvB;EAAA,CAArB;;EAKA,IAAME,KAAK,GAAG,SAARA,KAAQ,CAAAvC,KAAK,EAAI;EACnB;EACA,MAAIE,UAAU,CAACF,KAAD,EAAQ8B,MAAM,CAACU,GAAf,CAAd,EAAmC;EAC/B,WAAO,IAAP;EACH,GAJkB;;;EAOnB,MAAI,CAAC9B,QAAQ,CAACV,KAAD,CAAb,EAAsB;EAClB,WAAO,KAAP;EACH,GATkB;;;EAYnB,MAAIyC,MAAM,GAAGzC,KAAb;;EACA,MAAI,CAACA,KAAK,CAAC0C,UAAN,CAAiB,SAAjB,CAAD,IAAgC,CAAC1C,KAAK,CAAC0C,UAAN,CAAiB,UAAjB,CAArC,EAAmE;EAC/DD,IAAAA,MAAM,oBAAazC,KAAb,CAAN;EACH;;EAED,MAAI;EACA,WAAO,CAACoC,OAAO,CAAC,IAAII,GAAJ,CAAQC,MAAR,EAAgBE,QAAjB,CAAf;EACH,GAFD,CAEE,OAAOC,CAAP,EAAU;EACR,WAAO,KAAP;EACH;EACJ,CAtBD;;AAwBA,WAAe;EACXC,EAAAA,eAAe,EAAEzC,iBADN;EAEX0C,EAAAA,MAAM,EAAEzC,QAFG;EAGX0C,EAAAA,MAAM,EAAExC,QAHG;EAIXkC,EAAAA,MAAM,EAAE/B,QAJG;EAKXsC,EAAAA,OAAO,EAAEpC,SALE;EAMXqC,EAAAA,QAAQ,EAAEpC,UANC;EAOXqC,EAAAA,KAAK,EAAEnC,OAPI;EAQXoC,EAAAA,OAAO,EAAElC,SARE;EASXmC,EAAAA,QAAQ,EAAEjC,UATC;EAUXkC,EAAAA,OAAO,EAAEhC,SAVE;EAWXiC,EAAAA,QAAQ,EAAE/B,UAXC;EAYXgC,EAAAA,KAAK,EAAE9B,OAZI;EAaX+B,EAAAA,aAAa,EAAE7B,eAbJ;EAcX8B,EAAAA,GAAG,EAAE5B,KAdM;EAeX6B,EAAAA,KAAK,EAAEzB,OAfI;EAgBX0B,EAAAA,GAAG,EAAEpB,KAhBM;EAiBXqB,EAAAA,KAAK,EAAExB;EAjBI,CAAf;;ECnDA;AACA,EAMA;EACA;;EACA,IAAMyB,wBAAwB,GAAI,YAAM;EACpC;EACA,MAAIC,SAAS,GAAG,KAAhB;;EACA,MAAI;EACA,QAAMC,OAAO,GAAGzD,MAAM,CAAC0D,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;EACjDC,MAAAA,GADiD,iBAC3C;EACFH,QAAAA,SAAS,GAAG,IAAZ;EACA,eAAO,IAAP;EACH;EAJgD,KAArC,CAAhB;EAMAhC,IAAAA,MAAM,CAACoC,gBAAP,CAAwB,MAAxB,EAAgC,IAAhC,EAAsCH,OAAtC;EACAjC,IAAAA,MAAM,CAACqC,mBAAP,CAA2B,MAA3B,EAAmC,IAAnC,EAAyCJ,OAAzC;EACH,GATD,CASE,OAAOnB,CAAP,EAAU;EAEX;;EAED,SAAOkB,SAAP;EACH,CAjBgC,EAAjC;;;AAoBA,EAAO,SAASM,cAAT,CAAwBf,OAAxB,EAAiCE,KAAjC,EAAwCc,QAAxC,EAAmG;EAAA;;EAAA,MAAjDC,MAAiD,uEAAxC,KAAwC;EAAA,MAAjCC,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;;EACtG;EACA,MAAI,CAACnB,OAAD,IAAY,EAAE,sBAAsBA,OAAxB,CAAZ,IAAgDoB,EAAE,CAACb,KAAH,CAASL,KAAT,CAAhD,IAAmE,CAACkB,EAAE,CAACxB,QAAH,CAAYoB,QAAZ,CAAxE,EAA+F;EAC3F;EACH,GAJqG;;;EAOtG,MAAMK,MAAM,GAAGnB,KAAK,CAACoB,KAAN,CAAY,GAAZ,CAAf,CAPsG;EAUtG;;EACA,MAAIZ,OAAO,GAAGS,OAAd,CAXsG;;EActG,MAAIX,wBAAJ,EAA8B;EAC1BE,IAAAA,OAAO,GAAG;EACN;EACAQ,MAAAA,OAAO,EAAPA,OAFM;EAGN;EACAC,MAAAA,OAAO,EAAPA;EAJM,KAAV;EAMH,GArBqG;;;EAwBtGE,EAAAA,MAAM,CAACE,OAAP,CAAe,UAAAC,IAAI,EAAI;EACnB,QAAI,KAAI,IAAI,KAAI,CAACC,cAAb,IAA+BR,MAAnC,EAA2C;EACvC;EACA,MAAA,KAAI,CAACQ,cAAL,CAAoBC,IAApB,CAAyB;EAAE1B,QAAAA,OAAO,EAAPA,OAAF;EAAWwB,QAAAA,IAAI,EAAJA,IAAX;EAAiBR,QAAAA,QAAQ,EAARA,QAAjB;EAA2BN,QAAAA,OAAO,EAAPA;EAA3B,OAAzB;EACH;;EAEDV,IAAAA,OAAO,CAACiB,MAAM,GAAG,kBAAH,GAAwB,qBAA/B,CAAP,CAA6DO,IAA7D,EAAmER,QAAnE,EAA6EN,OAA7E;EACH,GAPD;EAQH;;AAGD,EAAO,SAASiB,EAAT,CAAY3B,OAAZ,EAA6E;EAAA,MAAxDqB,MAAwD,uEAA/C,EAA+C;EAAA,MAA3CL,QAA2C;EAAA,MAAjCE,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;EAChFJ,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B5B,OAA1B,EAAmCqB,MAAnC,EAA2CL,QAA3C,EAAqD,IAArD,EAA2DE,OAA3D,EAAoEC,OAApE;EACH;;AAGD,EAAO,SAASU,GAAT,CAAa7B,OAAb,EAA8E;EAAA,MAAxDqB,MAAwD,uEAA/C,EAA+C;EAAA,MAA3CL,QAA2C;EAAA,MAAjCE,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;EACjFJ,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B5B,OAA1B,EAAmCqB,MAAnC,EAA2CL,QAA3C,EAAqD,KAArD,EAA4DE,OAA5D,EAAqEC,OAArE;EACH;;AAGD,EAAO,SAASW,IAAT,CAAc9B,OAAd,EAA+E;EAAA,MAAxDqB,MAAwD,uEAA/C,EAA+C;EAAA,MAA3CL,QAA2C;EAAA,MAAjCE,OAAiC,uEAAvB,IAAuB;EAAA,MAAjBC,OAAiB,uEAAP,KAAO;;EAClF,WAASY,YAAT,GAA+B;EAC3BF,IAAAA,GAAG,CAAC7B,OAAD,EAAUqB,MAAV,EAAkBU,YAAlB,EAAgCb,OAAhC,EAAyCC,OAAzC,CAAH;;EAD2B,sCAANa,IAAM;EAANA,MAAAA,IAAM;EAAA;;EAE3BhB,IAAAA,QAAQ,CAACiB,KAAT,CAAe,IAAf,EAAqBD,IAArB;EACH;;EAEDjB,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B5B,OAA1B,EAAmCqB,MAAnC,EAA2CU,YAA3C,EAAyD,IAAzD,EAA+Db,OAA/D,EAAwEC,OAAxE;EACH;;AAGD,EAAO,SAASe,YAAT,CAAsBlC,OAAtB,EAAwE;EAAA,MAAzCwB,IAAyC,uEAAlC,EAAkC;EAAA,MAA9BW,OAA8B,uEAApB,KAAoB;EAAA,MAAbC,MAAa,uEAAJ,EAAI;;EAC3E;EACA,MAAI,CAAChB,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwBoB,EAAE,CAACb,KAAH,CAASiB,IAAT,CAA5B,EAA4C;EACxC;EACH,GAJ0E;;;EAO3E,MAAMtB,KAAK,GAAG,IAAImC,WAAJ,CAAgBb,IAAhB,EAAsB;EAChCW,IAAAA,OAAO,EAAPA,OADgC;EAEhCC,IAAAA,MAAM,EAAEnF,MAAM,CAACqF,MAAP,CAAc,EAAd,EAAkBF,MAAlB,EAA0B;EAC9BG,MAAAA,IAAI,EAAE;EADwB,KAA1B;EAFwB,GAAtB,CAAd,CAP2E;;EAe3EvC,EAAAA,OAAO,CAACwC,aAAR,CAAsBtC,KAAtB;EACH;;AAGD,EAAO,SAASuC,eAAT,GAA2B;EAC9B,MAAI,QAAQ,KAAKhB,cAAjB,EAAiC;EAC7B,SAAKA,cAAL,CAAoBF,OAApB,CAA4B,UAAAmB,IAAI,EAAI;EAAA,UACxB1C,OADwB,GACa0C,IADb,CACxB1C,OADwB;EAAA,UACfwB,IADe,GACakB,IADb,CACflB,IADe;EAAA,UACTR,QADS,GACa0B,IADb,CACT1B,QADS;EAAA,UACCN,OADD,GACagC,IADb,CACChC,OADD;EAEhCV,MAAAA,OAAO,CAACc,mBAAR,CAA4BU,IAA5B,EAAkCR,QAAlC,EAA4CN,OAA5C;EACH,KAHD;EAKA,SAAKe,cAAL,GAAsB,EAAtB;EACH;EACJ;;AAGD,EAAO,SAASkB,KAAT,GAAiB;EAAA;;EACpB,SAAO,IAAIC,OAAJ,CACH,UAAAC,OAAO;EAAA,WAAK,MAAI,CAACF,KAAL,GAAaG,UAAU,CAACD,OAAD,EAAU,CAAV,CAAvB,GAAsClB,EAAE,CAACC,IAAH,CAAQ,MAAR,EAAc,MAAI,CAACmB,QAAL,CAAcC,SAA5B,EAAuC,OAAvC,EAAgDH,OAAhD,CAA3C;EAAA,GADJ,EAELI,IAFK,CAEA,YAAM,EAFN,CAAP;EAGH;;EC/GM,SAASC,IAAT,CAAcH,QAAd,EAAwBI,OAAxB,EAAiC;EACpC;EACA,MAAMC,OAAO,GAAGL,QAAQ,CAAC/D,MAAT,GAAkB+D,QAAlB,GAA6B,CAACA,QAAD,CAA7C,CAFoC;EAKpC;;EACApF,EAAAA,KAAK,CAAC0F,IAAN,CAAWD,OAAX,EACKE,OADL,GAEK/B,OAFL,CAEa,UAACvB,OAAD,EAAUuD,KAAV,EAAoB;EACzB,QAAMC,KAAK,GAAGD,KAAK,GAAG,CAAR,GAAYJ,OAAO,CAACM,SAAR,CAAkB,IAAlB,CAAZ,GAAsCN,OAApD,CADyB;;EAIzB,QAAMO,MAAM,GAAG1D,OAAO,CAAC2D,UAAvB;EACA,QAAMC,OAAO,GAAG5D,OAAO,CAAC6D,WAAxB,CALyB;EAQzB;;EACAL,IAAAA,KAAK,CAACM,WAAN,CAAkB9D,OAAlB,EATyB;EAYzB;EACA;;EACA,QAAI4D,OAAJ,EAAa;EACTF,MAAAA,MAAM,CAACK,YAAP,CAAoBP,KAApB,EAA2BI,OAA3B;EACH,KAFD,MAEO;EACHF,MAAAA,MAAM,CAACI,WAAP,CAAmBN,KAAnB;EACH;EACJ,GArBL;EAsBH;;AAGD,EAAO,SAASQ,aAAT,CAAuBhE,OAAvB,EAAgCiE,UAAhC,EAA4C;EAC/C,MAAI,CAAC7C,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwBoB,EAAE,CAACb,KAAH,CAAS0D,UAAT,CAA5B,EAAkD;EAC9C;EACH,GAH8C;EAM/C;;;EACAhH,EAAAA,MAAM,CAACiH,OAAP,CAAeD,UAAf,EACKE,MADL,CACY;EAAA;EAAA,QAAIC,KAAJ;;EAAA,WAAe,CAAChD,EAAE,CAAC5B,eAAH,CAAmB4E,KAAnB,CAAhB;EAAA,GADZ,EAEK7C,OAFL,CAEa;EAAA;EAAA,QAAE8C,GAAF;EAAA,QAAOD,KAAP;;EAAA,WAAkBpE,OAAO,CAACsE,YAAR,CAAqBD,GAArB,EAA0BD,KAA1B,CAAlB;EAAA,GAFb;EAGH;;AAGD,EAAO,SAASG,aAAT,CAAuB/C,IAAvB,EAA6ByC,UAA7B,EAAyCO,IAAzC,EAA+C;EAClD;EACA,MAAMxE,OAAO,GAAGyE,QAAQ,CAACF,aAAT,CAAuB/C,IAAvB,CAAhB,CAFkD;;EAKlD,MAAIJ,EAAE,CAAC3B,MAAH,CAAUwE,UAAV,CAAJ,EAA2B;EACvBD,IAAAA,aAAa,CAAChE,OAAD,EAAUiE,UAAV,CAAb;EACH,GAPiD;;;EAUlD,MAAI7C,EAAE,CAAChC,MAAH,CAAUoF,IAAV,CAAJ,EAAqB;EACjBxE,IAAAA,OAAO,CAAC0E,SAAR,GAAoBF,IAApB;EACH,GAZiD;;;EAelD,SAAOxE,OAAP;EACH;;AAGD,EAAO,SAAS2E,WAAT,CAAqB3E,OAArB,EAA8B4E,MAA9B,EAAsC;EACzC,MAAI,CAACxD,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwB,CAACoB,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAA7B,EAAiD;EAC7C;EACH;;EAEDA,EAAAA,MAAM,CAACjB,UAAP,CAAkBI,YAAlB,CAA+B/D,OAA/B,EAAwC4E,MAAM,CAACf,WAA/C;EACH;;AAGD,EAAO,SAASgB,aAAT,CAAuBrD,IAAvB,EAA6BkC,MAA7B,EAAqCO,UAArC,EAAiDO,IAAjD,EAAuD;EAC1D,MAAI,CAACpD,EAAE,CAACpB,OAAH,CAAW0D,MAAX,CAAL,EAAyB;EACrB;EACH;;EAEDA,EAAAA,MAAM,CAACI,WAAP,CAAmBS,aAAa,CAAC/C,IAAD,EAAOyC,UAAP,EAAmBO,IAAnB,CAAhC;EACH;;AAGD,EAAO,SAASM,aAAT,CAAuB9E,OAAvB,EAAgC;EACnC,MAAIoB,EAAE,CAACrB,QAAH,CAAYC,OAAZ,KAAwBoB,EAAE,CAACvB,KAAH,CAASG,OAAT,CAA5B,EAA+C;EAC3CrC,IAAAA,KAAK,CAAC0F,IAAN,CAAWrD,OAAX,EAAoBuB,OAApB,CAA4BuD,aAA5B;EACA;EACH;;EAED,MAAI,CAAC1D,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAD,IAAwB,CAACoB,EAAE,CAACpB,OAAH,CAAWA,OAAO,CAAC2D,UAAnB,CAA7B,EAA6D;EACzD;EACH;;EAED3D,EAAAA,OAAO,CAAC2D,UAAR,CAAmBoB,WAAnB,CAA+B/E,OAA/B;EACH;;AAGD,EAAO,SAASgF,YAAT,CAAsBhF,OAAtB,EAA+B;EAClC,MAAI,CAACoB,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH;;EAHiC,MAK5BhB,MAL4B,GAKjBgB,OAAO,CAACiF,UALS,CAK5BjG,MAL4B;;EAOlC,SAAOA,MAAM,GAAG,CAAhB,EAAmB;EACfgB,IAAAA,OAAO,CAAC+E,WAAR,CAAoB/E,OAAO,CAACkF,SAA5B;EACAlG,IAAAA,MAAM,IAAI,CAAV;EACH;EACJ;;AAGD,EAAO,SAASmG,cAAT,CAAwBC,QAAxB,EAAkCC,QAAlC,EAA4C;EAC/C,MAAI,CAACjE,EAAE,CAACpB,OAAH,CAAWqF,QAAX,CAAD,IAAyB,CAACjE,EAAE,CAACpB,OAAH,CAAWqF,QAAQ,CAAC1B,UAApB,CAA1B,IAA6D,CAACvC,EAAE,CAACpB,OAAH,CAAWoF,QAAX,CAAlE,EAAwF;EACpF,WAAO,IAAP;EACH;;EAEDC,EAAAA,QAAQ,CAAC1B,UAAT,CAAoB2B,YAApB,CAAiCF,QAAjC,EAA2CC,QAA3C;EAEA,SAAOD,QAAP;EACH;;AAGD,EAAO,SAASG,yBAAT,CAAmCC,GAAnC,EAAwCC,kBAAxC,EAA4D;EAC/D;EACA;EACA;EACA;EAEA,MAAI,CAACrE,EAAE,CAAChC,MAAH,CAAUoG,GAAV,CAAD,IAAmBpE,EAAE,CAACb,KAAH,CAASiF,GAAT,CAAvB,EAAsC;EAClC,WAAO,EAAP;EACH;;EAED,MAAMvB,UAAU,GAAG,EAAnB;EACA,MAAMyB,QAAQ,GAAGD,kBAAjB;EAEAD,EAAAA,GAAG,CAAClE,KAAJ,CAAU,GAAV,EAAeC,OAAf,CAAuB,UAAAoE,CAAC,EAAI;EACxB;EACA,QAAMC,QAAQ,GAAGD,CAAC,CAACE,IAAF,EAAjB;EACA,QAAMC,SAAS,GAAGF,QAAQ,CAACG,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAlB;EACA,QAAMC,QAAQ,GAAGJ,QAAQ,CAACG,OAAT,CAAiB,QAAjB,EAA2B,EAA3B,CAAjB,CAJwB;;EAOxB,QAAME,KAAK,GAAGD,QAAQ,CAAC1E,KAAT,CAAe,GAAf,CAAd;EACA,QAAM+C,GAAG,GAAG4B,KAAK,CAAC,CAAD,CAAjB;EACA,QAAM7B,KAAK,GAAG6B,KAAK,CAACjH,MAAN,GAAe,CAAf,GAAmBiH,KAAK,CAAC,CAAD,CAAL,CAASF,OAAT,CAAiB,OAAjB,EAA0B,EAA1B,CAAnB,GAAmD,EAAjE,CATwB;;EAYxB,QAAMG,KAAK,GAAGN,QAAQ,CAACO,MAAT,CAAgB,CAAhB,CAAd;;EAEA,YAAQD,KAAR;EACI,WAAK,GAAL;EACI;EACA,YAAI9E,EAAE,CAAC3B,MAAH,CAAUiG,QAAV,KAAuBtE,EAAE,CAAChC,MAAH,CAAUsG,QAAQ,CAACU,KAAnB,CAA3B,EAAsD;EAClDV,UAAAA,QAAQ,CAACU,KAAT,eAAsBN,SAAtB;EACH;;EAED7B,QAAAA,UAAU,CAACmC,KAAX,GAAmBN,SAAnB;EACA;;EAEJ,WAAK,GAAL;EACI;EACA7B,QAAAA,UAAU,CAACoC,EAAX,GAAgBT,QAAQ,CAACG,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAhB;EACA;;EAEJ,WAAK,GAAL;EACI;EACA9B,QAAAA,UAAU,CAACI,GAAD,CAAV,GAAkBD,KAAlB;EAEA;;EAEJ;EACI;EAtBR;EAwBH,GAtCD;EAwCA,SAAOH,UAAP;EACH;;AAGD,EAAO,SAASqC,YAAT,CAAsBtG,OAAtB,EAA+BuG,MAA/B,EAAuC;EAC1C,MAAI,CAACnF,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH;;EAED,MAAIwG,IAAI,GAAGD,MAAX;;EAEA,MAAI,CAACnF,EAAE,CAACzB,OAAH,CAAW6G,IAAX,CAAL,EAAuB;EACnBA,IAAAA,IAAI,GAAG,CAACxG,OAAO,CAACuG,MAAhB;EACH;;EAED,MAAIC,IAAJ,EAAU;EACNxG,IAAAA,OAAO,CAACsE,YAAR,CAAqB,QAArB,EAA+B,EAA/B;EACH,GAFD,MAEO;EACHtE,IAAAA,OAAO,CAACyG,eAAR,CAAwB,QAAxB;EACH;EACJ;;AAGD,EAAO,SAASC,WAAT,CAAqB1G,OAArB,EAA8B8F,SAA9B,EAAyCa,KAAzC,EAAgD;EACnD,MAAIvF,EAAE,CAACrB,QAAH,CAAYC,OAAZ,CAAJ,EAA0B;EACtB,WAAOrC,KAAK,CAAC0F,IAAN,CAAWrD,OAAX,EAAoB4G,GAApB,CAAwB,UAAArH,CAAC;EAAA,aAAImH,WAAW,CAACnH,CAAD,EAAIuG,SAAJ,EAAea,KAAf,CAAf;EAAA,KAAzB,CAAP;EACH;;EAED,MAAIvF,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAJ,EAAyB;EACrB,QAAI6G,MAAM,GAAG,QAAb;;EACA,QAAI,OAAOF,KAAP,KAAiB,WAArB,EAAkC;EAC9BE,MAAAA,MAAM,GAAGF,KAAK,GAAG,KAAH,GAAW,QAAzB;EACH;;EAED3G,IAAAA,OAAO,CAAC8G,SAAR,CAAkBD,MAAlB,EAA0Bf,SAA1B;EACA,WAAO9F,OAAO,CAAC8G,SAAR,CAAkBC,QAAlB,CAA2BjB,SAA3B,CAAP;EACH;;EAED,SAAO,KAAP;EACH;;AAGD,EAAO,SAASkB,QAAT,CAAkBhH,OAAlB,EAA2B8F,SAA3B,EAAsC;EACzC,SAAO1E,EAAE,CAACpB,OAAH,CAAWA,OAAX,KAAuBA,OAAO,CAAC8G,SAAR,CAAkBC,QAAlB,CAA2BjB,SAA3B,CAA9B;EACH;;AAGD,EAAO,SAASmB,OAAT,CAAiBjH,OAAjB,EAA0B4F,QAA1B,EAAoC;EACvC,MAAMsB,SAAS,GAAG;EAAEjJ,IAAAA,OAAO,EAAPA;EAAF,GAAlB;;EAEA,WAASkJ,KAAT,GAAiB;EACb,WAAOxJ,KAAK,CAAC0F,IAAN,CAAWoB,QAAQ,CAAC2C,gBAAT,CAA0BxB,QAA1B,CAAX,EAAgDyB,QAAhD,CAAyD,IAAzD,CAAP;EACH;;EAED,MAAMJ,OAAO,GACTC,SAAS,CAACD,OAAV,IACAC,SAAS,CAACI,qBADV,IAEAJ,SAAS,CAACK,kBAFV,IAGAL,SAAS,CAACM,iBAHV,IAIAL,KALJ;EAOA,SAAOF,OAAO,CAACrF,IAAR,CAAa5B,OAAb,EAAsB4F,QAAtB,CAAP;EACH;;AAGD,EAAO,SAAS6B,WAAT,CAAqB7B,QAArB,EAA+B;EAClC,SAAO,KAAK7C,QAAL,CAAcC,SAAd,CAAwBoE,gBAAxB,CAAyCxB,QAAzC,CAAP;EACH;;AAGD,EAAO,SAAS8B,UAAT,CAAoB9B,QAApB,EAA8B;EACjC,SAAO,KAAK7C,QAAL,CAAcC,SAAd,CAAwB2E,aAAxB,CAAsC/B,QAAtC,CAAP;EACH;;AAGD,EAAO,SAASgC,SAAT,GAAmD;EAAA,MAAhC5H,OAAgC,uEAAtB,IAAsB;EAAA,MAAhBiB,MAAgB,uEAAP,KAAO;;EACtD,MAAI,CAACG,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH;;EAED,MAAM6H,SAAS,GAAGJ,WAAW,CAAC7F,IAAZ,CAAiB,IAAjB,EAAuB,yDAAvB,CAAlB;EACA,MAAMkG,KAAK,GAAGD,SAAS,CAAC,CAAD,CAAvB;EACA,MAAME,IAAI,GAAGF,SAAS,CAACA,SAAS,CAAC7I,MAAV,GAAmB,CAApB,CAAtB;;EAEA,MAAMgJ,IAAI,GAAG,SAAPA,IAAO,CAAA9H,KAAK,EAAI;EAClB;EACA,QAAIA,KAAK,CAACmE,GAAN,KAAc,KAAd,IAAuBnE,KAAK,CAAC+H,OAAN,KAAkB,CAA7C,EAAgD;EAC5C;EACH,KAJiB;;;EAOlB,QAAMC,OAAO,GAAGzD,QAAQ,CAAC0D,aAAzB;;EAEA,QAAID,OAAO,KAAKH,IAAZ,IAAoB,CAAC7H,KAAK,CAACkI,QAA/B,EAAyC;EACrC;EACAN,MAAAA,KAAK,CAACO,KAAN;EACAnI,MAAAA,KAAK,CAACoI,cAAN;EACH,KAJD,MAIO,IAAIJ,OAAO,KAAKJ,KAAZ,IAAqB5H,KAAK,CAACkI,QAA/B,EAAyC;EAC5C;EACAL,MAAAA,IAAI,CAACM,KAAL;EACAnI,MAAAA,KAAK,CAACoI,cAAN;EACH;EACJ,GAlBD;;EAoBAvH,EAAAA,cAAc,CAACa,IAAf,CAAoB,IAApB,EAA0B,KAAKmB,QAAL,CAAcC,SAAxC,EAAmD,SAAnD,EAA8DgF,IAA9D,EAAoE/G,MAApE,EAA4E,KAA5E;EACH;;AAGD,EAAO,SAASsH,QAAT,GAAoD;EAAA,MAAlCvI,OAAkC,uEAAxB,IAAwB;EAAA,MAAlBwI,QAAkB,uEAAP,KAAO;;EACvD,MAAI,CAACpH,EAAE,CAACpB,OAAH,CAAWA,OAAX,CAAL,EAA0B;EACtB;EACH,GAHsD;;;EAMvDA,EAAAA,OAAO,CAACqI,KAAR,GANuD;;EASvD,MAAIG,QAAJ,EAAc;EACV9B,IAAAA,WAAW,CAAC1G,OAAD,EAAU,KAAKyI,MAAL,CAAYC,UAAZ,CAAuBF,QAAjC,CAAX;EACH;EACJ;;EC7SD;AACA,EAMO,IAAMG,kBAAkB,GAAI,YAAM;EACrC,MAAM3I,OAAO,GAAGyE,QAAQ,CAACF,aAAT,CAAuB,MAAvB,CAAhB;EAEA,MAAMlD,MAAM,GAAG;EACXuH,IAAAA,gBAAgB,EAAE,qBADP;EAEXC,IAAAA,aAAa,EAAE,eAFJ;EAGXC,IAAAA,WAAW,EAAE,+BAHF;EAIXC,IAAAA,UAAU,EAAE;EAJD,GAAf;EAOA,MAAMvH,IAAI,GAAGvE,MAAM,CAACgC,IAAP,CAAYoC,MAAZ,EAAoB2H,IAApB,CAAyB,UAAA9I,KAAK;EAAA,WAAIF,OAAO,CAACiJ,KAAR,CAAc/I,KAAd,MAAyBgJ,SAA7B;EAAA,GAA9B,CAAb;EAEA,SAAO9H,EAAE,CAAChC,MAAH,CAAUoC,IAAV,IAAkBH,MAAM,CAACG,IAAD,CAAxB,GAAiC,KAAxC;EACH,CAbiC,EAA3B;;AAgBP,EAAO,SAAS2H,OAAT,CAAiBnJ,OAAjB,EAA0B;EAC7B8C,EAAAA,UAAU,CAAC,YAAM;EACb,QAAI;EACAwD,MAAAA,YAAY,CAACtG,OAAD,EAAU,IAAV,CAAZ;EACAA,MAAAA,OAAO,CAACoJ,YAAR,CAFA;;EAGA9C,MAAAA,YAAY,CAACtG,OAAD,EAAU,KAAV,CAAZ;EACH,KAJD,CAIE,OAAOT,CAAP,EAAU;EAEX;EACJ,GARS,EAQP,CARO,CAAV;EASH;;ECjCD;EACA;EACA;EACA;EAEA,IAAM8J,OAAO,GAAG;EACZC,EAAAA,IAAI;EAAE;EAAe,EAAS,CAAC,CAAC7E,QAAQ,CAAC8E,YAD7B;EAEZC,EAAAA,QAAQ,EAAE,sBAAsB/E,QAAQ,CAACgF,eAAT,CAAyBR,KAA/C,IAAwD,CAAC,OAAOS,IAAP,CAAYC,SAAS,CAACC,SAAtB,CAFvD;EAGZC,EAAAA,QAAQ,EAAE,kBAAkBH,IAAlB,CAAuBC,SAAS,CAACG,QAAjC,CAHE;EAIZC,EAAAA,KAAK,EAAE,uBAAuBL,IAAvB,CAA4BC,SAAS,CAACG,QAAtC;EAJK,CAAhB;;ECKA,IAAME,aAAa,GAAG;EAClB,eAAa,QADK;EAElB,eAAa,GAFK;EAGlB,gBAAc,aAHI;EAIlB,eAAa,wBAJK;EAKlB,eAAa;EALK,CAAtB;;EASA,IAAMC,OAAO,GAAG;EACZ;EACAC,EAAAA,KAAK,EAAE,iBAAiBzF,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CAFZ;EAGZ4F,EAAAA,KAAK,EAAE,iBAAiB1F,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CAHZ;EAKZ;EACA;EACA6F,EAAAA,KAPY,iBAON5I,IAPM,EAOA6I,QAPA,EAOUC,WAPV,EAOuB;EAC/B,QAAMC,aAAa,GAAGlB,OAAO,CAACQ,QAAR,IAAoBS,WAApB,IAAmCL,OAAO,CAACK,WAAjE;EACA,QAAME,GAAG,GAAGP,OAAO,CAACzI,IAAD,CAAP,IAAiB6I,QAAQ,KAAK,OAA1C;EACA,QAAMI,EAAE,GAAGD,GAAG,IAAIP,OAAO,CAACS,UAAf,KAA8BlJ,IAAI,KAAK,OAAT,IAAoB,CAAC6H,OAAO,CAACQ,QAA7B,IAAyCU,aAAvE,CAAX;EAEA,WAAO;EACHC,MAAAA,GAAG,EAAHA,GADG;EAEHC,MAAAA,EAAE,EAAFA;EAFG,KAAP;EAIH,GAhBW;EAkBZ;EACA;EACAE,EAAAA,GAAG,EAAG;EAAA,WAAM,CAACtB,OAAO,CAACQ,QAAT,IAAqBzI,EAAE,CAACxB,QAAH,CAAY2E,aAAa,CAAC,OAAD,CAAb,CAAuBqG,yBAAnC,CAA3B;EAAA,GAAD,EApBO;EAsBZ;EACA;EACAC,EAAAA,OAAO,EAAEzJ,EAAE,CAACxB,QAAH,CAAYnB,MAAM,CAACqM,qCAAnB,CAxBG;EA0BZ;EACA;EACAR,EAAAA,WAAW,EAAE,iBAAiB7F,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CA5BlB;EA8BZ;EACA;EACA;EACAwG,EAAAA,IAjCY,gBAiCPC,SAjCO,EAiCI;EAAA,2BACQA,SAAS,CAAC1J,KAAV,CAAgB,GAAhB,CADR;EAAA;EAAA,QACL2J,SADK;;EAEZ,QAAI,CAAC,KAAKC,OAAN,IAAiBD,SAAS,KAAK,KAAKzJ,IAAxC,EAA8C;EAC1C,aAAO,KAAP;EACH;;EAED,QAAIA,IAAJ;;EACA,QAAIwJ,SAAS,IAAIA,SAAS,CAAC3D,QAAV,CAAmB,SAAnB,CAAjB,EAAgD;EAC5C;EACA7F,MAAAA,IAAI,GAAGwJ,SAAP;EACH,KAHD,MAGO,IAAIA,SAAS,KAAK,YAAlB,EAAgC;EACnC;EACAxJ,MAAAA,IAAI,GAAG,aAAP;EACH,KAHM,MAGA,IAAIwJ,SAAS,IAAIhB,aAAjB,EAAgC;EACnC;EACAxI,MAAAA,IAAI,aAAMwJ,SAAN,wBAA4BhB,aAAa,CAACgB,SAAD,CAAzC,OAAJ;EACH;;EAED,QAAI;EACA,aAAOlO,OAAO,CAAC0E,IAAI,IAAI,KAAK2J,KAAL,CAAWC,WAAX,CAAuB5J,IAAvB,EAA6BuE,OAA7B,CAAqC,IAArC,EAA2C,EAA3C,CAAT,CAAd;EACH,KAFD,CAEE,OAAOsF,GAAP,EAAY;EACV,aAAO,KAAP;EACH;EACJ,GAxDW;EA0DZ;EACAC,EAAAA,UAAU,EAAE,gBAAgB7G,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CA3DhB;EA6DZ;EACAmG,EAAAA,UAAU,EAAG,YAAM;EACf,QAAMa,KAAK,GAAG9G,QAAQ,CAACF,aAAT,CAAuB,OAAvB,CAAd;EACAgH,IAAAA,KAAK,CAAC/J,IAAN,GAAa,OAAb;EACA,WAAO+J,KAAK,CAAC/J,IAAN,KAAe,OAAtB;EACH,GAJW,EA9DA;EAoEZ;EACA;EACAgK,EAAAA,KAAK,EAAE,kBAAkB/G,QAAQ,CAACgF,eAtEtB;EAwEZ;EACAgC,EAAAA,WAAW,EAAE9C,kBAAkB,KAAK,KAzExB;EA2EZ;EACA;EACA+C,EAAAA,aAAa,EAAE,gBAAgBjN,MAAhB,IAA0BA,MAAM,CAACkN,UAAP,CAAkB,0BAAlB,EAA8C1E;EA7E3E,CAAhB;;ECnBA;AACA,EAOA,IAAM2E,KAAK,GAAG;EACVC,EAAAA,UADU,wBACG;EAAA;;EACT,QAAI,CAAC,KAAKX,OAAV,EAAmB;EACf,aAAO,EAAP;EACH;;EAED,QAAMY,OAAO,GAAGnO,KAAK,CAAC0F,IAAN,CAAW,KAAK8H,KAAL,CAAW/D,gBAAX,CAA4B,QAA5B,CAAX,CAAhB,CALS;;EAQT,WAAO0E,OAAO,CAAC3H,MAAR,CAAe,UAAA4H,MAAM;EAAA,aAAI9B,OAAO,CAACc,IAAR,CAAanJ,IAAb,CAAkB,KAAlB,EAAwBmK,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAxB,CAAJ;EAAA,KAArB,CAAP;EACH,GAVS;EAYV;EACAC,EAAAA,iBAbU,+BAaU;EAChB;EACA,WAAOL,KAAK,CAACC,UAAN,CACFjK,IADE,CACG,IADH,EAEFgF,GAFE,CAEE,UAAAmF,MAAM;EAAA,aAAI5O,MAAM,CAAC4O,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAD,CAAV;EAAA,KAFR,EAGF7H,MAHE,CAGKrH,OAHL,CAAP;EAIH,GAnBS;EAqBVoP,EAAAA,MArBU,oBAqBD;EACL,QAAI,CAAC,KAAKhB,OAAV,EAAmB;EACf;EACH;;EAED,QAAMiB,MAAM,GAAG,IAAf,CALK;;EAQLlP,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,SAApC,EAA+C;EAC3CvK,MAAAA,GAD2C,iBACrC;EACF;EACA,YAAMkL,OAAO,GAAGF,KAAK,CAACC,UAAN,CAAiBjK,IAAjB,CAAsBuK,MAAtB,CAAhB;EACA,YAAMJ,MAAM,GAAGD,OAAO,CAAC9C,IAAR,CAAa,UAAA+C,MAAM;EAAA,iBAAIA,MAAM,CAACC,YAAP,CAAoB,KAApB,MAA+BG,MAAM,CAACJ,MAA1C;EAAA,SAAnB,CAAf,CAHE;;EAMF,eAAOA,MAAM,IAAI5O,MAAM,CAAC4O,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAD,CAAvB;EACH,OAR0C;EAS3CI,MAAAA,GAT2C,eASvCzP,KATuC,EAShC;EACP;EACA,YAAMmP,OAAO,GAAGF,KAAK,CAACC,UAAN,CAAiBjK,IAAjB,CAAsBuK,MAAtB,CAAhB,CAFO;;EAKP,YAAMJ,MAAM,GAAGD,OAAO,CAAC9C,IAAR,CAAa,UAAA+C,MAAM;EAAA,iBAAI5O,MAAM,CAAC4O,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAD,CAAN,KAAwCrP,KAA5C;EAAA,SAAnB,CAAf,CALO;;EAQP,YAAI,CAACoP,MAAL,EAAa;EACT;EACH,SAVM;;;EAAA,4BAa8CI,MAAM,CAAChB,KAbrD;EAAA,YAaCkB,WAbD,iBAaCA,WAbD;EAAA,YAacC,MAbd,iBAacA,MAbd;EAAA,YAasBC,OAbtB,iBAasBA,OAbtB;EAAA,YAa+BC,UAb/B,iBAa+BA,UAb/B;;EAgBPL,QAAAA,MAAM,CAAChB,KAAP,CAAasB,GAAb,GAAmBV,MAAM,CAACC,YAAP,CAAoB,KAApB,CAAnB,CAhBO;;EAmBP,YAAIO,OAAO,KAAK,MAAZ,IAAsBC,UAA1B,EAAsC;EAClC;EACAL,UAAAA,MAAM,CAACrK,IAAP,CAAY,gBAAZ,EAA8B,YAAM;EAChCqK,YAAAA,MAAM,CAACE,WAAP,GAAqBA,WAArB,CADgC;;EAIhC,gBAAI,CAACC,MAAL,EAAa;EACTH,cAAAA,MAAM,CAACO,IAAP;EACH;EACJ,WAPD,EAFkC;;EAYlCP,UAAAA,MAAM,CAAChB,KAAP,CAAawB,IAAb;EACH,SAhCM;;;EAmCPzK,QAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,eAAxC,EAAyD,KAAzD,EAAgE;EAC5DyB,UAAAA,OAAO,EAAEjQ;EADmD,SAAhE,EAnCO;;EAwCPwP,QAAAA,MAAM,CAACU,OAAP,CAAeT,GAAf,CAAmB;EAAEQ,UAAAA,OAAO,EAAEjQ;EAAX,SAAnB;EACH;EAlD0C,KAA/C;EAoDH,GAjFS;EAmFV;EACA;EACAmQ,EAAAA,cArFU,4BAqFO;EACb,QAAI,CAAC,KAAK5B,OAAV,EAAmB;EACf;EACH,KAHY;;;EAMbpG,IAAAA,aAAa,CAAC8G,KAAK,CAACC,UAAN,CAAiBjK,IAAjB,CAAsB,IAAtB,CAAD,CAAb,CANa;EASb;EACA;;EACA,SAAKuJ,KAAL,CAAW7G,YAAX,CAAwB,KAAxB,EAA+B,KAAKmE,MAAL,CAAYsE,UAA3C,EAXa;EAcb;EACA;;EACA,SAAK5B,KAAL,CAAWwB,IAAX,GAhBa;;EAmBb,SAAKK,KAAL,CAAWC,GAAX,CAAe,4BAAf;EACH;EAzGS,CAAd;;ECRA;AACA;AAMA,EAAO,SAASC,MAAT,CAAgBrN,KAAhB,EAAuB;EAC1B,MAAI,CAACuB,EAAE,CAACvB,KAAH,CAASA,KAAT,CAAL,EAAsB;EAClB,WAAOA,KAAP;EACH;;EAED,SAAOA,KAAK,CAACsE,MAAN,CAAa,UAACzB,IAAD,EAAOa,KAAP;EAAA,WAAiB1D,KAAK,CAACsN,OAAN,CAAczK,IAAd,MAAwBa,KAAzC;EAAA,GAAb,CAAP;EACH;;AAGD,EAAO,SAAS6J,OAAT,CAAiBvN,KAAjB,EAAwBuE,KAAxB,EAA+B;EAClC,MAAI,CAAChD,EAAE,CAACvB,KAAH,CAASA,KAAT,CAAD,IAAoB,CAACA,KAAK,CAACb,MAA/B,EAAuC;EACnC,WAAO,IAAP;EACH;;EAED,SAAOa,KAAK,CAACwN,MAAN,CAAa,UAACC,IAAD,EAAOC,IAAP;EAAA,WAAiBC,IAAI,CAACC,GAAL,CAASF,IAAI,GAAGnJ,KAAhB,IAAyBoJ,IAAI,CAACC,GAAL,CAASH,IAAI,GAAGlJ,KAAhB,CAAzB,GAAkDmJ,IAAlD,GAAyDD,IAA1E;EAAA,GAAb,CAAP;EACH;;ECfM,SAASI,SAAT,CAAmBjO,MAAnB,EAA2B;EAC9B,SAAOkO,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAepO,MAAf,CAAX,CAAP;EACH;;AAGD,EAAO,SAASqO,OAAT,CAAiBrO,MAAjB,EAAyBsO,IAAzB,EAA+B;EAClC,SAAOA,IAAI,CAACzM,KAAL,CAAW,GAAX,EAAgB+L,MAAhB,CAAuB,UAACW,GAAD,EAAM3J,GAAN;EAAA,WAAc2J,GAAG,IAAIA,GAAG,CAAC3J,GAAD,CAAxB;EAAA,GAAvB,EAAsD5E,MAAtD,CAAP;EACH;;AAGD,EAAO,SAASyM,MAAT,GAAyC;EAAA,MAAzBtH,MAAyB,uEAAhB,EAAgB;;EAAA,oCAATkH,OAAS;EAATA,IAAAA,OAAS;EAAA;;EAC5C,MAAI,CAACA,OAAO,CAAC9M,MAAb,EAAqB;EACjB,WAAO4F,MAAP;EACH;;EAED,MAAMmH,MAAM,GAAGD,OAAO,CAACmC,KAAR,EAAf;;EAEA,MAAI,CAAC7M,EAAE,CAAC3B,MAAH,CAAUsM,MAAV,CAAL,EAAwB;EACpB,WAAOnH,MAAP;EACH;;EAED3H,EAAAA,MAAM,CAACgC,IAAP,CAAY8M,MAAZ,EAAoBxK,OAApB,CAA4B,UAAA8C,GAAG,EAAI;EAC/B,QAAIjD,EAAE,CAAC3B,MAAH,CAAUsM,MAAM,CAAC1H,GAAD,CAAhB,CAAJ,EAA4B;EACxB,UAAI,CAACpH,MAAM,CAACgC,IAAP,CAAY2F,MAAZ,EAAoByC,QAApB,CAA6BhD,GAA7B,CAAL,EAAwC;EACpCpH,QAAAA,MAAM,CAACqF,MAAP,CAAcsC,MAAd,sBAAyBP,GAAzB,EAA+B,EAA/B;EACH;;EAED6H,MAAAA,MAAM,CAACtH,MAAM,CAACP,GAAD,CAAP,EAAc0H,MAAM,CAAC1H,GAAD,CAApB,CAAN;EACH,KAND,MAMO;EACHpH,MAAAA,MAAM,CAACqF,MAAP,CAAcsC,MAAd,sBAAyBP,GAAzB,EAA+B0H,MAAM,CAAC1H,GAAD,CAArC;EACH;EACJ,GAVD;EAYA,SAAO6H,MAAM,MAAN,UAAOtH,MAAP,SAAkBkH,OAAlB,EAAP;EACH;;ECzCD;AACA;AAMA,EAAO,SAASoC,UAAT,CAAoBC,MAApB,EAA4B;EAC/B,mBAAUA,MAAV,cAAoBX,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACa,MAAL,KAAgB,KAA3B,CAApB;EACH;;AAGD,EAAO,SAASC,MAAT,CAAgB3R,KAAhB,EAAgC;EAAA,oCAANqF,IAAM;EAANA,IAAAA,IAAM;EAAA;;EACnC,MAAIZ,EAAE,CAACb,KAAH,CAAS5D,KAAT,CAAJ,EAAqB;EACjB,WAAOA,KAAP;EACH;;EAED,SAAOA,KAAK,CAAC4R,QAAN,GAAiBxI,OAAjB,CAAyB,UAAzB,EAAqC,UAACoB,KAAD,EAAQqH,CAAR;EAAA,WAAcxM,IAAI,CAACwM,CAAD,CAAJ,CAAQD,QAAR,EAAd;EAAA,GAArC,CAAP;EACH;;AAGD,EAAO,SAASE,aAAT,CAAuBC,OAAvB,EAAgCC,GAAhC,EAAqC;EACxC,MAAID,OAAO,KAAK,CAAZ,IAAiBC,GAAG,KAAK,CAAzB,IAA8BxR,MAAM,CAACC,KAAP,CAAasR,OAAb,CAA9B,IAAuDvR,MAAM,CAACC,KAAP,CAAauR,GAAb,CAA3D,EAA8E;EAC1E,WAAO,CAAP;EACH;;EAED,SAAO,CAAED,OAAO,GAAGC,GAAX,GAAkB,GAAnB,EAAwBC,OAAxB,CAAgC,CAAhC,CAAP;EACH;;AAGD,EAAO,SAASC,UAAT,GAAyD;EAAA,MAArClS,KAAqC,uEAA7B,EAA6B;EAAA,MAAzBqM,IAAyB,uEAAlB,EAAkB;EAAA,MAAdjD,OAAc,uEAAJ,EAAI;EAC5D,SAAOpJ,KAAK,CAACoJ,OAAN,CACH,IAAI+I,MAAJ,CAAW9F,IAAI,CAACuF,QAAL,GAAgBxI,OAAhB,CAAwB,2BAAxB,EAAqD,MAArD,CAAX,EAAyE,GAAzE,CADG,EAEHA,OAAO,CAACwI,QAAR,EAFG,CAAP;EAIH;;AAGD,EAAO,SAASQ,WAAT,GAAiC;EAAA,MAAZpS,KAAY,uEAAJ,EAAI;EACpC,SAAOA,KAAK,CAAC4R,QAAN,GAAiBxI,OAAjB,CAAyB,QAAzB,EAAmC,UAAAvB,IAAI;EAAA,WAAIA,IAAI,CAAC2B,MAAL,CAAY,CAAZ,EAAe6I,WAAf,KAA+BxK,IAAI,CAACyK,MAAL,CAAY,CAAZ,EAAeC,WAAf,EAAnC;EAAA,GAAvC,CAAP;EACH;;AAGD,EAAO,SAASC,YAAT,GAAkC;EAAA,MAAZxS,KAAY,uEAAJ,EAAI;EACrC,MAAIyC,MAAM,GAAGzC,KAAK,CAAC4R,QAAN,EAAb,CADqC;;EAIrCnP,EAAAA,MAAM,GAAGyP,UAAU,CAACzP,MAAD,EAAS,GAAT,EAAc,GAAd,CAAnB,CAJqC;;EAOrCA,EAAAA,MAAM,GAAGyP,UAAU,CAACzP,MAAD,EAAS,GAAT,EAAc,GAAd,CAAnB,CAPqC;;EAUrCA,EAAAA,MAAM,GAAG2P,WAAW,CAAC3P,MAAD,CAApB,CAVqC;;EAarC,SAAOyP,UAAU,CAACzP,MAAD,EAAS,GAAT,EAAc,EAAd,CAAjB;EACH;;AAGD,EAAO,SAASgQ,WAAT,GAAiC;EAAA,MAAZzS,KAAY,uEAAJ,EAAI;EACpC,MAAIyC,MAAM,GAAGzC,KAAK,CAAC4R,QAAN,EAAb,CADoC;;EAIpCnP,EAAAA,MAAM,GAAG+P,YAAY,CAAC/P,MAAD,CAArB,CAJoC;;EAOpC,SAAOA,MAAM,CAAC+G,MAAP,CAAc,CAAd,EAAiB+I,WAAjB,KAAiC9P,MAAM,CAACiQ,KAAP,CAAa,CAAb,CAAxC;EACH;;AAGD,EAAO,SAASC,SAAT,CAAmBvD,MAAnB,EAA2B;EAC9B,MAAMwD,QAAQ,GAAG9K,QAAQ,CAAC+K,sBAAT,EAAjB;EACA,MAAMxP,OAAO,GAAGyE,QAAQ,CAACF,aAAT,CAAuB,KAAvB,CAAhB;EACAgL,EAAAA,QAAQ,CAACzL,WAAT,CAAqB9D,OAArB;EACAA,EAAAA,OAAO,CAACyP,SAAR,GAAoB1D,MAApB;EACA,SAAOwD,QAAQ,CAACG,UAAT,CAAoBhL,SAA3B;EACH;;AAGD,EAAO,SAASiL,OAAT,CAAiB3P,OAAjB,EAA0B;EAC7B,MAAMmD,OAAO,GAAGsB,QAAQ,CAACF,aAAT,CAAuB,KAAvB,CAAhB;EACApB,EAAAA,OAAO,CAACW,WAAR,CAAoB9D,OAApB;EACA,SAAOmD,OAAO,CAACsM,SAAf;EACH;;EC3ED,IAAMG,SAAS,GAAG;EACdjF,EAAAA,GAAG,EAAE,KADS;EAEdE,EAAAA,OAAO,EAAE,SAFK;EAGde,EAAAA,KAAK,EAAE,OAHO;EAIdiE,EAAAA,KAAK,EAAE,OAJO;EAKdC,EAAAA,OAAO,EAAE;EALK,CAAlB;EAQA,IAAMC,IAAI,GAAG;EACTnP,EAAAA,GADS,iBACkB;EAAA,QAAvByD,GAAuB,uEAAjB,EAAiB;EAAA,QAAboE,MAAa,uEAAJ,EAAI;;EACvB,QAAIrH,EAAE,CAACb,KAAH,CAAS8D,GAAT,KAAiBjD,EAAE,CAACb,KAAH,CAASkI,MAAT,CAArB,EAAuC;EACnC,aAAO,EAAP;EACH;;EAED,QAAIrJ,MAAM,GAAG0O,OAAO,CAACrF,MAAM,CAACsH,IAAR,EAAc1L,GAAd,CAApB;;EAEA,QAAIjD,EAAE,CAACb,KAAH,CAASnB,MAAT,CAAJ,EAAsB;EAClB,UAAInC,MAAM,CAACgC,IAAP,CAAY2Q,SAAZ,EAAuBvI,QAAvB,CAAgChD,GAAhC,CAAJ,EAA0C;EACtC,eAAOuL,SAAS,CAACvL,GAAD,CAAhB;EACH;;EAED,aAAO,EAAP;EACH;;EAED,QAAM0B,OAAO,GAAG;EACZ,oBAAc0C,MAAM,CAACuH,QADT;EAEZ,iBAAWvH,MAAM,CAACwH;EAFN,KAAhB;EAKAhT,IAAAA,MAAM,CAACiH,OAAP,CAAe6B,OAAf,EAAwBxE,OAAxB,CAAgC,gBAAkB;EAAA;EAAA,UAAhB8C,GAAgB;EAAA,UAAXD,KAAW;;EAC9ChF,MAAAA,MAAM,GAAGyP,UAAU,CAACzP,MAAD,EAASiF,GAAT,EAAcD,KAAd,CAAnB;EACH,KAFD;EAIA,WAAOhF,MAAP;EACH;EA1BQ,CAAb;;MCVM8Q;;;EACF,mBAAY/D,MAAZ,EAAoB;EAAA;;EAChB,SAAKgE,OAAL,GAAehE,MAAM,CAAC1D,MAAP,CAAcoE,OAAd,CAAsBsD,OAArC;EACA,SAAK9L,GAAL,GAAW8H,MAAM,CAAC1D,MAAP,CAAcoE,OAAd,CAAsBxI,GAAjC;EACH;;;;;0BAsBGA,KAAK;EACL,UAAI,CAAC6L,OAAO,CAACzP,SAAT,IAAsB,CAAC,KAAK0P,OAAhC,EAAyC;EACrC,eAAO,IAAP;EACH;;EAED,UAAMC,KAAK,GAAG3R,MAAM,CAAC4R,YAAP,CAAoBC,OAApB,CAA4B,KAAKjM,GAAjC,CAAd;;EAEA,UAAIjD,EAAE,CAACb,KAAH,CAAS6P,KAAT,CAAJ,EAAqB;EACjB,eAAO,IAAP;EACH;;EAED,UAAMG,IAAI,GAAG5C,IAAI,CAACC,KAAL,CAAWwC,KAAX,CAAb;EAEA,aAAOhP,EAAE,CAAChC,MAAH,CAAUiF,GAAV,KAAkBA,GAAG,CAACrF,MAAtB,GAA+BuR,IAAI,CAAClM,GAAD,CAAnC,GAA2CkM,IAAlD;EACH;;;0BAEG9Q,QAAQ;EACR;EACA,UAAI,CAACyQ,OAAO,CAACzP,SAAT,IAAsB,CAAC,KAAK0P,OAAhC,EAAyC;EACrC;EACH,OAJO;;;EAOR,UAAI,CAAC/O,EAAE,CAAC3B,MAAH,CAAUA,MAAV,CAAL,EAAwB;EACpB;EACH,OATO;;;EAYR,UAAIoN,OAAO,GAAG,KAAKjM,GAAL,EAAd,CAZQ;;EAeR,UAAIQ,EAAE,CAACb,KAAH,CAASsM,OAAT,CAAJ,EAAuB;EACnBA,QAAAA,OAAO,GAAG,EAAV;EACH,OAjBO;;;EAoBRX,MAAAA,MAAM,CAACW,OAAD,EAAUpN,MAAV,CAAN,CApBQ;;EAuBRhB,MAAAA,MAAM,CAAC4R,YAAP,CAAoBG,OAApB,CAA4B,KAAKnM,GAAjC,EAAsCsJ,IAAI,CAACE,SAAL,CAAehB,OAAf,CAAtC;EACH;;;0BA3DsB;EACnB,UAAI;EACA,YAAI,EAAE,kBAAkBpO,MAApB,CAAJ,EAAiC;EAC7B,iBAAO,KAAP;EACH;;EAED,YAAMiL,IAAI,GAAG,SAAb,CALA;EAQA;;EACAjL,QAAAA,MAAM,CAAC4R,YAAP,CAAoBG,OAApB,CAA4B9G,IAA5B,EAAkCA,IAAlC;EACAjL,QAAAA,MAAM,CAAC4R,YAAP,CAAoBI,UAApB,CAA+B/G,IAA/B;EAEA,eAAO,IAAP;EACH,OAbD,CAaE,OAAOnK,CAAP,EAAU;EACR,eAAO,KAAP;EACH;EACJ;;;;;;EC/BL;EACA;EACA;EACA;AAEA,EAAe,SAASmR,KAAT,CAAepQ,GAAf,EAA2C;EAAA,MAAvBqQ,YAAuB,uEAAR,MAAQ;EACtD,SAAO,IAAI/N,OAAJ,CAAY,UAACC,OAAD,EAAU+N,MAAV,EAAqB;EACpC,QAAI;EACA,UAAMC,OAAO,GAAG,IAAIC,cAAJ,EAAhB,CADA;;EAIA,UAAI,EAAE,qBAAqBD,OAAvB,CAAJ,EAAqC;EACjC;EACH;;EAEDA,MAAAA,OAAO,CAAChQ,gBAAR,CAAyB,MAAzB,EAAiC,YAAM;EACnC,YAAI8P,YAAY,KAAK,MAArB,EAA6B;EACzB,cAAI;EACA9N,YAAAA,OAAO,CAAC8K,IAAI,CAACC,KAAL,CAAWiD,OAAO,CAACE,YAAnB,CAAD,CAAP;EACH,WAFD,CAEE,OAAOxR,CAAP,EAAU;EACRsD,YAAAA,OAAO,CAACgO,OAAO,CAACE,YAAT,CAAP;EACH;EACJ,SAND,MAMO;EACHlO,UAAAA,OAAO,CAACgO,OAAO,CAACG,QAAT,CAAP;EACH;EACJ,OAVD;EAYAH,MAAAA,OAAO,CAAChQ,gBAAR,CAAyB,OAAzB,EAAkC,YAAM;EACpC,cAAM,IAAIoQ,KAAJ,CAAUJ,OAAO,CAACK,MAAlB,CAAN;EACH,OAFD;EAIAL,MAAAA,OAAO,CAACM,IAAR,CAAa,KAAb,EAAoB7Q,GAApB,EAAyB,IAAzB,EAxBA;;EA2BAuQ,MAAAA,OAAO,CAACF,YAAR,GAAuBA,YAAvB;EAEAE,MAAAA,OAAO,CAACO,IAAR;EACH,KA9BD,CA8BE,OAAO7R,CAAP,EAAU;EACRqR,MAAAA,MAAM,CAACrR,CAAD,CAAN;EACH;EACJ,GAlCM,CAAP;EAmCH;;ECzCD;AACA;AAQA,EAAe,SAAS8R,UAAT,CAAoB/Q,GAApB,EAAyB+F,EAAzB,EAA6B;EACxC,MAAI,CAACjF,EAAE,CAAChC,MAAH,CAAUkB,GAAV,CAAL,EAAqB;EACjB;EACH;;EAED,MAAM6N,MAAM,GAAG,OAAf;EACA,MAAMmD,KAAK,GAAGlQ,EAAE,CAAChC,MAAH,CAAUiH,EAAV,CAAd;EACA,MAAIkL,QAAQ,GAAG,KAAf;;EAEA,MAAMC,MAAM,GAAG,SAATA,MAAS;EAAA,WAAM/M,QAAQ,CAACgN,cAAT,CAAwBpL,EAAxB,MAAgC,IAAtC;EAAA,GAAf;;EAEA,MAAMqL,MAAM,GAAG,SAATA,MAAS,CAAC1O,SAAD,EAAY2O,IAAZ,EAAqB;EAChC3O,IAAAA,SAAS,CAACyM,SAAV,GAAsBkC,IAAtB,CADgC;;EAIhC,QAAIL,KAAK,IAAIE,MAAM,EAAnB,EAAuB;EACnB;EACH,KAN+B;;;EAShC/M,IAAAA,QAAQ,CAACmN,IAAT,CAAcC,qBAAd,CAAoC,YAApC,EAAkD7O,SAAlD;EACH,GAVD,CAXwC;;;EAwBxC,MAAI,CAACsO,KAAD,IAAU,CAACE,MAAM,EAArB,EAAyB;EACrB,QAAMM,UAAU,GAAG5B,OAAO,CAACzP,SAA3B,CADqB;;EAIrB,QAAMuC,SAAS,GAAGyB,QAAQ,CAACF,aAAT,CAAuB,KAAvB,CAAlB;EACAvB,IAAAA,SAAS,CAACsB,YAAV,CAAuB,QAAvB,EAAiC,EAAjC;;EAEA,QAAIgN,KAAJ,EAAW;EACPtO,MAAAA,SAAS,CAACsB,YAAV,CAAuB,IAAvB,EAA6B+B,EAA7B;EACH,KAToB;;;EAYrB,QAAIyL,UAAJ,EAAgB;EACZ,UAAMC,MAAM,GAAGtT,MAAM,CAAC4R,YAAP,CAAoBC,OAApB,WAA+BnC,MAA/B,cAAyC9H,EAAzC,EAAf;EACAkL,MAAAA,QAAQ,GAAGQ,MAAM,KAAK,IAAtB;;EAEA,UAAIR,QAAJ,EAAc;EACV,YAAMI,IAAI,GAAGhE,IAAI,CAACC,KAAL,CAAWmE,MAAX,CAAb;EACAL,QAAAA,MAAM,CAAC1O,SAAD,EAAY2O,IAAI,CAACK,OAAjB,CAAN;EACH;EACJ,KApBoB;;;EAuBrBtB,IAAAA,KAAK,CAACpQ,GAAD,CAAL,CACK2C,IADL,CACU,UAAAgP,MAAM,EAAI;EACZ,UAAI7Q,EAAE,CAACb,KAAH,CAAS0R,MAAT,CAAJ,EAAsB;EAClB;EACH;;EAED,UAAIH,UAAJ,EAAgB;EACZrT,QAAAA,MAAM,CAAC4R,YAAP,CAAoBG,OAApB,WACOrC,MADP,cACiB9H,EADjB,GAEIsH,IAAI,CAACE,SAAL,CAAe;EACXmE,UAAAA,OAAO,EAAEC;EADE,SAAf,CAFJ;EAMH;;EAEDP,MAAAA,MAAM,CAAC1O,SAAD,EAAYiP,MAAZ,CAAN;EACH,KAhBL,EAiBKC,KAjBL,CAiBW,YAAM,EAjBjB;EAkBH;EACJ;;EC3ED;AACA;AAMA,EAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAA/N,KAAK;EAAA,SAAIgO,QAAQ,CAAEhO,KAAK,GAAG,EAAR,GAAa,EAAd,GAAoB,EAArB,EAAyB,EAAzB,CAAZ;EAAA,CAAtB;AACP,EAAO,IAAMiO,UAAU,GAAG,SAAbA,UAAa,CAAAjO,KAAK;EAAA,SAAIgO,QAAQ,CAAEhO,KAAK,GAAG,EAAT,GAAe,EAAhB,EAAoB,EAApB,CAAZ;EAAA,CAAxB;AACP,EAAO,IAAMkO,UAAU,GAAG,SAAbA,UAAa,CAAAlO,KAAK;EAAA,SAAIgO,QAAQ,CAAChO,KAAK,GAAG,EAAT,EAAa,EAAb,CAAZ;EAAA,CAAxB;;AAGP,EAAO,SAASmO,UAAT,GAAsE;EAAA,MAAlDC,IAAkD,uEAA3C,CAA2C;EAAA,MAAxCC,YAAwC,uEAAzB,KAAyB;EAAA,MAAlBC,QAAkB,uEAAP,KAAO;;EACzE;EACA,MAAI,CAACtR,EAAE,CAAC1B,MAAH,CAAU8S,IAAV,CAAL,EAAsB;EAClB,WAAOD,UAAU,CAAC,IAAD,EAAOE,YAAP,EAAqBC,QAArB,CAAjB;EACH,GAJwE;;;EAOzE,MAAMpE,MAAM,GAAG,SAATA,MAAS,CAAAlK,KAAK;EAAA,WAAI,WAAIA,KAAJ,EAAYiL,KAAZ,CAAkB,CAAC,CAAnB,CAAJ;EAAA,GAApB,CAPyE;;;EAUzE,MAAIsD,KAAK,GAAGR,QAAQ,CAACK,IAAD,CAApB;EACA,MAAMI,IAAI,GAAGP,UAAU,CAACG,IAAD,CAAvB;EACA,MAAMK,IAAI,GAAGP,UAAU,CAACE,IAAD,CAAvB,CAZyE;;EAezE,MAAIC,YAAY,IAAIE,KAAK,GAAG,CAA5B,EAA+B;EAC3BA,IAAAA,KAAK,aAAMA,KAAN,MAAL;EACH,GAFD,MAEO;EACHA,IAAAA,KAAK,GAAG,EAAR;EACH,GAnBwE;;;EAsBzE,mBAAUD,QAAQ,IAAIF,IAAI,GAAG,CAAnB,GAAuB,GAAvB,GAA6B,EAAvC,SAA4CG,KAA5C,SAAoDrE,MAAM,CAACsE,IAAD,CAA1D,cAAoEtE,MAAM,CAACuE,IAAD,CAA1E;EACH;;ECdD,IAAMC,QAAQ,GAAG;EACb;EACAC,EAAAA,UAFa,wBAEA;EACT,QAAMzS,GAAG,GAAG,IAAInB,GAAJ,CAAQ,KAAKsJ,MAAL,CAAYuK,OAApB,EAA6BvU,MAAM,CAACwU,QAApC,CAAZ;EACA,QAAMC,IAAI,GAAG5S,GAAG,CAAC6S,IAAJ,KAAa1U,MAAM,CAACwU,QAAP,CAAgBE,IAA7B,IAAsC9J,OAAO,CAACC,IAAR,IAAgB,CAAC7K,MAAM,CAAC2U,aAA3E;EAEA,WAAO;EACH9S,MAAAA,GAAG,EAAE,KAAKmI,MAAL,CAAYuK,OADd;EAEHE,MAAAA,IAAI,EAAJA;EAFG,KAAP;EAIH,GAVY;EAYb;EACAG,EAAAA,YAba,0BAaE;EACX,QAAI;EACA,WAAKtQ,QAAL,CAAc+P,QAAd,GAAyBpL,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBR,QAAtB,CAA+B3P,OAArD,CAAzB,CADA;;EAIA,WAAKJ,QAAL,CAAcwQ,OAAd,GAAwB;EACpB7G,QAAAA,IAAI,EAAEjF,WAAW,CAAC7F,IAAZ,CAAiB,IAAjB,EAAuB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8B7G,IAArD,CADc;EAEpB8G,QAAAA,KAAK,EAAE9L,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BC,KAApD,CAFa;EAGpBC,QAAAA,OAAO,EAAE/L,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BE,OAApD,CAHW;EAIpBC,QAAAA,MAAM,EAAEhM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BG,MAApD,CAJY;EAKpBC,QAAAA,WAAW,EAAEjM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BI,WAApD,CALO;EAMpBC,QAAAA,IAAI,EAAElM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BK,IAApD,CANc;EAOpBjJ,QAAAA,GAAG,EAAEjD,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8B5I,GAApD,CAPe;EAQpBE,QAAAA,OAAO,EAAEnD,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8B1I,OAApD,CARW;EASpBgJ,QAAAA,QAAQ,EAAEnM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BM,QAApD,CATU;EAUpBC,QAAAA,QAAQ,EAAEpM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BO,QAApD,CAVU;EAWpBC,QAAAA,UAAU,EAAErM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BQ,UAApD;EAXQ,OAAxB,CAJA;;EAmBA,WAAKhR,QAAL,CAAciR,QAAd,GAAyBtM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBU,QAA5C,CAAzB,CAnBA;;EAsBA,WAAKjR,QAAL,CAAckR,MAAd,GAAuB;EACnBC,QAAAA,IAAI,EAAExM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBW,MAAtB,CAA6BC,IAAnD,CADa;EAEnBC,QAAAA,MAAM,EAAEzM,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBW,MAAtB,CAA6BE,MAAnD;EAFW,OAAvB,CAtBA;;EA4BA,WAAKpR,QAAL,CAAcqR,OAAd,GAAwB;EACpBC,QAAAA,MAAM,EAAE3M,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBc,OAAtB,CAA8BC,MAApD,CADY;EAEpBhI,QAAAA,WAAW,EAAE3E,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBc,OAAtB,CAA8B/H,WAApD,CAFO;EAGpBiI,QAAAA,QAAQ,EAAE5M,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,KAAK6G,MAAL,CAAY6K,SAAZ,CAAsBc,OAAtB,CAA8BE,QAApD;EAHU,OAAxB,CA5BA;;EAmCA,UAAIlT,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAciR,QAAzB,CAAJ,EAAwC;EACpC,aAAKjR,QAAL,CAAcqR,OAAd,CAAsBG,WAAtB,GAAoC,KAAKxR,QAAL,CAAciR,QAAd,CAAuBrM,aAAvB,YAC5B,KAAKc,MAAL,CAAYC,UAAZ,CAAuB8L,OADK,EAApC;EAGH;;EAED,aAAO,IAAP;EACH,KA1CD,CA0CE,OAAOC,KAAP,EAAc;EACZ;EACA,WAAKzH,KAAL,CAAW0H,IAAX,CAAgB,iEAAhB,EAAmFD,KAAnF,EAFY;;EAKZ,WAAKE,oBAAL,CAA0B,IAA1B;EAEA,aAAO,KAAP;EACH;EACJ,GAjEY;EAmEb;EACAC,EAAAA,UApEa,sBAoEFpT,IApEE,EAoEIyC,UApEJ,EAoEgB;EACzB,QAAM4Q,SAAS,GAAG,4BAAlB;EACA,QAAM7B,OAAO,GAAGF,QAAQ,CAACC,UAAT,CAAoBnR,IAApB,CAAyB,IAAzB,CAAhB;EACA,QAAMkT,QAAQ,aAAM,CAAC9B,OAAO,CAACE,IAAT,GAAgBF,OAAO,CAAC1S,GAAxB,GAA8B,EAApC,cAA0C,KAAKmI,MAAL,CAAYsM,UAAtD,CAAd,CAHyB;;EAMzB,QAAMC,IAAI,GAAGvQ,QAAQ,CAACwQ,eAAT,CAAyBJ,SAAzB,EAAoC,KAApC,CAAb;EACA7Q,IAAAA,aAAa,CACTgR,IADS,EAET9I,MAAM,CAACjI,UAAD,EAAa;EACfiR,MAAAA,IAAI,EAAE,cADS;EAEfrN,MAAAA,SAAS,EAAE;EAFI,KAAb,CAFG,CAAb,CAPyB;;EAgBzB,QAAMsN,GAAG,GAAG1Q,QAAQ,CAACwQ,eAAT,CAAyBJ,SAAzB,EAAoC,KAApC,CAAZ;EACA,QAAM9G,IAAI,aAAM+G,QAAN,cAAkBtT,IAAlB,CAAV,CAjByB;EAoBzB;EACA;;EACA,QAAI,UAAU2T,GAAd,EAAmB;EACfA,MAAAA,GAAG,CAACC,cAAJ,CAAmB,8BAAnB,EAAmD,MAAnD,EAA2DrH,IAA3D;EACH,KAxBwB;;;EA2BzBoH,IAAAA,GAAG,CAACC,cAAJ,CAAmB,8BAAnB,EAAmD,YAAnD,EAAiErH,IAAjE,EA3ByB;;EA8BzBiH,IAAAA,IAAI,CAAClR,WAAL,CAAiBqR,GAAjB;EAEA,WAAOH,IAAP;EACH,GArGY;EAuGb;EACAK,EAAAA,WAxGa,uBAwGDhR,GAxGC,EAwGe;EAAA,QAAXiR,IAAW,uEAAJ,EAAI;EACxB,QAAM9Q,IAAI,GAAGuL,IAAI,CAACnP,GAAL,CAASyD,GAAT,EAAc,KAAKoE,MAAnB,CAAb;EAEA,QAAMxE,UAAU,GAAGhH,MAAM,CAACqF,MAAP,CAAc,EAAd,EAAkBgT,IAAlB,EAAwB;EACvClP,MAAAA,KAAK,EAAE,CAACkP,IAAI,CAAClP,KAAN,EAAa,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBnC,MAApC,EAA4CpC,MAA5C,CAAmDrH,OAAnD,EAA4DyY,IAA5D,CAAiE,GAAjE;EADgC,KAAxB,CAAnB;EAIA,WAAOhR,aAAa,CAAC,MAAD,EAASN,UAAT,EAAqBO,IAArB,CAApB;EACH,GAhHY;EAkHb;EACAgR,EAAAA,WAnHa,uBAmHDhR,IAnHC,EAmHK;EACd,QAAIpD,EAAE,CAACb,KAAH,CAASiE,IAAT,CAAJ,EAAoB;EAChB,aAAO,IAAP;EACH;;EAED,QAAMiR,KAAK,GAAGlR,aAAa,CAAC,MAAD,EAAS;EAChC6B,MAAAA,KAAK,EAAE,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBgN,IAAvB,CAA4BtR;EADH,KAAT,CAA3B;EAIAqR,IAAAA,KAAK,CAAC3R,WAAN,CACIS,aAAa,CACT,MADS,EAET;EACI6B,MAAAA,KAAK,EAAE,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBgN,IAAvB,CAA4BD;EADvC,KAFS,EAKTjR,IALS,CADjB;EAUA,WAAOiR,KAAP;EACH,GAvIY;EAyIb;EACAE,EAAAA,YA1Ia,wBA0IAC,UA1IA,EA0IYN,IA1IZ,EA0IkB;EAC3B,QAAMrR,UAAU,GAAGhH,MAAM,CAACqF,MAAP,CAAc,EAAd,EAAkBgT,IAAlB,CAAnB;EACA,QAAI9T,IAAI,GAAG4N,WAAW,CAACwG,UAAD,CAAtB;EAEA,QAAMC,KAAK,GAAG;EACV7V,MAAAA,OAAO,EAAE,QADC;EAEViB,MAAAA,MAAM,EAAE,KAFE;EAGV6U,MAAAA,KAAK,EAAE,IAHG;EAIVd,MAAAA,IAAI,EAAE,IAJI;EAKVe,MAAAA,YAAY,EAAE,IALJ;EAMVC,MAAAA,WAAW,EAAE;EANH,KAAd;EASA,KAAC,SAAD,EAAY,MAAZ,EAAoB,OAApB,EAA6BzU,OAA7B,CAAqC,UAAA8C,GAAG,EAAI;EACxC,UAAIpH,MAAM,CAACgC,IAAP,CAAYgF,UAAZ,EAAwBoD,QAAxB,CAAiChD,GAAjC,CAAJ,EAA2C;EACvCwR,QAAAA,KAAK,CAACxR,GAAD,CAAL,GAAaJ,UAAU,CAACI,GAAD,CAAvB;EACA,eAAOJ,UAAU,CAACI,GAAD,CAAjB;EACH;EACJ,KALD,EAb2B;;EAqB3B,QAAIwR,KAAK,CAAC7V,OAAN,KAAkB,QAAlB,IAA8B,CAAC/C,MAAM,CAACgC,IAAP,CAAYgF,UAAZ,EAAwBoD,QAAxB,CAAiC,MAAjC,CAAnC,EAA6E;EACzEpD,MAAAA,UAAU,CAACzC,IAAX,GAAkB,QAAlB;EACH,KAvB0B;;;EA0B3B,QAAIvE,MAAM,CAACgC,IAAP,CAAYgF,UAAZ,EAAwBoD,QAAxB,CAAiC,OAAjC,CAAJ,EAA+C;EAC3C,UAAI,CAACpD,UAAU,CAACmC,KAAX,CAAiBiB,QAAjB,CAA0B,KAAKoB,MAAL,CAAYC,UAAZ,CAAuBuN,OAAjD,CAAL,EAAgE;EAC5DhS,QAAAA,UAAU,CAACmC,KAAX,eAAwB,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBuN,OAA/C;EACH;EACJ,KAJD,MAIO;EACHhS,MAAAA,UAAU,CAACmC,KAAX,GAAmB,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBuN,OAA1C;EACH,KAhC0B;;;EAmC3B,YAAQL,UAAR;EACI,WAAK,MAAL;EACIC,QAAAA,KAAK,CAAC5U,MAAN,GAAe,IAAf;EACA4U,QAAAA,KAAK,CAACC,KAAN,GAAc,MAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,OAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,MAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,OAApB;EACA;;EAEJ,WAAK,MAAL;EACIH,QAAAA,KAAK,CAAC5U,MAAN,GAAe,IAAf;EACA4U,QAAAA,KAAK,CAACC,KAAN,GAAc,MAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,QAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,QAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,OAApB;EACA;;EAEJ,WAAK,UAAL;EACIH,QAAAA,KAAK,CAAC5U,MAAN,GAAe,IAAf;EACA4U,QAAAA,KAAK,CAACC,KAAN,GAAc,gBAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,iBAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,cAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,aAApB;EACA;;EAEJ,WAAK,YAAL;EACIH,QAAAA,KAAK,CAAC5U,MAAN,GAAe,IAAf;EACA4U,QAAAA,KAAK,CAACC,KAAN,GAAc,iBAAd;EACAD,QAAAA,KAAK,CAACE,YAAN,GAAqB,gBAArB;EACAF,QAAAA,KAAK,CAACb,IAAN,GAAa,kBAAb;EACAa,QAAAA,KAAK,CAACG,WAAN,GAAoB,iBAApB;EACA;;EAEJ,WAAK,YAAL;EACI/R,QAAAA,UAAU,CAACmC,KAAX,eAAwB,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBuN,OAA/C;EACAzU,QAAAA,IAAI,GAAG,MAAP;EACAqU,QAAAA,KAAK,CAACC,KAAN,GAAc,MAAd;EACAD,QAAAA,KAAK,CAACb,IAAN,GAAa,MAAb;EACA;;EAEJ;EACI,YAAI5T,EAAE,CAACb,KAAH,CAASsV,KAAK,CAACC,KAAf,CAAJ,EAA2B;EACvBD,UAAAA,KAAK,CAACC,KAAN,GAActU,IAAd;EACH;;EACD,YAAIJ,EAAE,CAACb,KAAH,CAASsV,KAAK,CAACb,IAAf,CAAJ,EAA0B;EACtBa,UAAAA,KAAK,CAACb,IAAN,GAAaY,UAAb;EACH;;EA9CT;;EAiDA,QAAMM,MAAM,GAAG3R,aAAa,CAACsR,KAAK,CAAC7V,OAAP,CAA5B,CApF2B;;EAuF3B,QAAI6V,KAAK,CAAC5U,MAAV,EAAkB;EACd;EACAiV,MAAAA,MAAM,CAACpS,WAAP,CACIgP,QAAQ,CAAC8B,UAAT,CAAoBhT,IAApB,CAAyB,IAAzB,EAA+BiU,KAAK,CAACG,WAArC,EAAkD;EAC9C5P,QAAAA,KAAK,EAAE;EADuC,OAAlD,CADJ;EAKA8P,MAAAA,MAAM,CAACpS,WAAP,CACIgP,QAAQ,CAAC8B,UAAT,CAAoBhT,IAApB,CAAyB,IAAzB,EAA+BiU,KAAK,CAACb,IAArC,EAA2C;EACvC5O,QAAAA,KAAK,EAAE;EADgC,OAA3C,CADJ,EAPc;;EAcd8P,MAAAA,MAAM,CAACpS,WAAP,CACIgP,QAAQ,CAACuC,WAAT,CAAqBzT,IAArB,CAA0B,IAA1B,EAAgCiU,KAAK,CAACE,YAAtC,EAAoD;EAChD3P,QAAAA,KAAK,EAAE;EADyC,OAApD,CADJ;EAKA8P,MAAAA,MAAM,CAACpS,WAAP,CACIgP,QAAQ,CAACuC,WAAT,CAAqBzT,IAArB,CAA0B,IAA1B,EAAgCiU,KAAK,CAACC,KAAtC,EAA6C;EACzC1P,QAAAA,KAAK,EAAE;EADkC,OAA7C,CADJ;EAKH,KAxBD,MAwBO;EACH8P,MAAAA,MAAM,CAACpS,WAAP,CAAmBgP,QAAQ,CAAC8B,UAAT,CAAoBhT,IAApB,CAAyB,IAAzB,EAA+BiU,KAAK,CAACb,IAArC,CAAnB;EACAkB,MAAAA,MAAM,CAACpS,WAAP,CAAmBgP,QAAQ,CAACuC,WAAT,CAAqBzT,IAArB,CAA0B,IAA1B,EAAgCiU,KAAK,CAACC,KAAtC,CAAnB;EACH,KAlH0B;;;EAqH3B5J,IAAAA,MAAM,CAACjI,UAAD,EAAasB,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8B/R,IAA9B,CAAD,EAAsCyC,UAAtC,CAAtC,CAAN;EACAD,IAAAA,aAAa,CAACkS,MAAD,EAASjS,UAAT,CAAb,CAtH2B;;EAyH3B,QAAIzC,IAAI,KAAK,MAAb,EAAqB;EACjB,UAAI,CAACJ,EAAE,CAACvB,KAAH,CAAS,KAAKkD,QAAL,CAAcwQ,OAAd,CAAsB/R,IAAtB,CAAT,CAAL,EAA4C;EACxC,aAAKuB,QAAL,CAAcwQ,OAAd,CAAsB/R,IAAtB,IAA8B,EAA9B;EACH;;EAED,WAAKuB,QAAL,CAAcwQ,OAAd,CAAsB/R,IAAtB,EAA4BE,IAA5B,CAAiCwU,MAAjC;EACH,KAND,MAMO;EACH,WAAKnT,QAAL,CAAcwQ,OAAd,CAAsB/R,IAAtB,IAA8B0U,MAA9B;EACH;;EAED,WAAOA,MAAP;EACH,GA9QY;EAgRb;EACAC,EAAAA,WAjRa,uBAiRD3U,IAjRC,EAiRKyC,UAjRL,EAiRiB;EAC1B;EACA,QAAMtH,KAAK,GAAG4H,aAAa,CACvB,OADuB,EAEvB2H,MAAM,CACF3G,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBW,MAAtB,CAA6BzS,IAA7B,CAAD,CADvB,EAEF;EACIA,MAAAA,IAAI,EAAE,OADV;EAEI4U,MAAAA,GAAG,EAAE,CAFT;EAGIzH,MAAAA,GAAG,EAAE,GAHT;EAII0H,MAAAA,IAAI,EAAE,IAJV;EAKIjS,MAAAA,KAAK,EAAE,CALX;EAMIkS,MAAAA,YAAY,EAAE,KANlB;EAOI;EACApB,MAAAA,IAAI,EAAE,QARV;EASI,oBAAcnF,IAAI,CAACnP,GAAL,CAASY,IAAT,EAAe,KAAKiH,MAApB,CATlB;EAUI,uBAAiB,CAVrB;EAWI,uBAAiB,GAXrB;EAYI,uBAAiB;EAZrB,KAFE,EAgBFxE,UAhBE,CAFiB,CAA3B;EAsBA,SAAKlB,QAAL,CAAckR,MAAd,CAAqBzS,IAArB,IAA6B7E,KAA7B,CAxB0B;;EA2B1BmW,IAAAA,QAAQ,CAACyD,eAAT,CAAyB3U,IAAzB,CAA8B,IAA9B,EAAoCjF,KAApC;EAEA,WAAOA,KAAP;EACH,GA/SY;EAiTb;EACA6Z,EAAAA,cAlTa,0BAkTEhV,IAlTF,EAkTQyC,UAlTR,EAkToB;EAC7B,QAAM+P,QAAQ,GAAGzP,aAAa,CAC1B,UAD0B,EAE1B2H,MAAM,CACF3G,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBc,OAAtB,CAA8B5S,IAA9B,CAAD,CADvB,EAEF;EACI4U,MAAAA,GAAG,EAAE,CADT;EAEIzH,MAAAA,GAAG,EAAE,GAFT;EAGIvK,MAAAA,KAAK,EAAE,CAHX;EAII8Q,MAAAA,IAAI,EAAE,cAJV;EAKI,qBAAe;EALnB,KAFE,EASFjR,UATE,CAFoB,CAA9B,CAD6B;;EAiB7B,QAAIzC,IAAI,KAAK,QAAb,EAAuB;EACnBwS,MAAAA,QAAQ,CAAClQ,WAAT,CAAqBS,aAAa,CAAC,MAAD,EAAS,IAAT,EAAe,GAAf,CAAlC;EAEA,UAAMkS,SAAS,GAAG;EACdC,QAAAA,MAAM,EAAE,QADM;EAEdrC,QAAAA,MAAM,EAAE;EAFM,QAGhB7S,IAHgB,CAAlB;EAIA,UAAMmV,MAAM,GAAGF,SAAS,GAAG1G,IAAI,CAACnP,GAAL,CAAS6V,SAAT,EAAoB,KAAKhO,MAAzB,CAAH,GAAsC,EAA9D;EAEAuL,MAAAA,QAAQ,CAACtP,SAAT,eAA0BiS,MAAM,CAACzH,WAAP,EAA1B;EACH;;EAED,SAAKnM,QAAL,CAAcqR,OAAd,CAAsB5S,IAAtB,IAA8BwS,QAA9B;EAEA,WAAOA,QAAP;EACH,GAlVY;EAoVb;EACA4C,EAAAA,UArVa,sBAqVFpV,IArVE,EAqVI;EACb,QAAMyC,UAAU,GAAGsB,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBc,OAAtB,CAA8B5S,IAA9B,CAAD,CAA5C;EAEA,QAAMwB,SAAS,GAAGuB,aAAa,CAC3B,KAD2B,EAE3B2H,MAAM,CAACjI,UAAD,EAAa;EACfmC,MAAAA,KAAK,EAAE,UAAG,KAAKqC,MAAL,CAAYC,UAAZ,CAAuB0L,OAAvB,CAA+B5B,IAAlC,cAA0CvO,UAAU,CAACmC,KAAX,GAAmBnC,UAAU,CAACmC,KAA9B,GAAsC,EAAhF,EAAqFP,IAArF,EADQ;EAEf,oBAAckK,IAAI,CAACnP,GAAL,CAASY,IAAT,EAAe,KAAKiH,MAApB;EAFC,KAAb,CAFqB,EAM3B,OAN2B,CAA/B,CAHa;;EAab,SAAK1F,QAAL,CAAcqR,OAAd,CAAsB5S,IAAtB,IAA8BwB,SAA9B;EAEA,WAAOA,SAAP;EACH,GArWY;EAuWb;EACA;EACA;EACA6T,EAAAA,qBA1Wa,iCA0WSC,QA1WT,EA0WmBtV,IA1WnB,EA0WyB;EAAA;;EAClC;EACAG,IAAAA,EAAE,CACEmV,QADF,EAEE,eAFF,EAGE,UAAA5W,KAAK,EAAI;EACL;EACA,UAAI,CAAC,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiBmH,QAAjB,CAA0BnH,KAAK,CAAC6W,KAAhC,CAAL,EAA6C;EACzC;EACH,OAJI;;;EAOL7W,MAAAA,KAAK,CAACoI,cAAN;EACApI,MAAAA,KAAK,CAAC8W,eAAN,GARK;;EAWL,UAAI9W,KAAK,CAACsB,IAAN,KAAe,SAAnB,EAA8B;EAC1B;EACH;;EAED,UAAMyV,aAAa,GAAGhQ,OAAO,CAAC6P,QAAD,EAAW,wBAAX,CAA7B,CAfK;;EAkBL,UAAI,CAACG,aAAD,IAAkB,CAAC,EAAD,EAAK,EAAL,EAAS5P,QAAT,CAAkBnH,KAAK,CAAC6W,KAAxB,CAAtB,EAAsD;EAClDjE,QAAAA,QAAQ,CAACoE,aAAT,CAAuBtV,IAAvB,CAA4B,KAA5B,EAAkCJ,IAAlC,EAAwC,IAAxC;EACH,OAFD,MAEO;EACH,YAAIoD,MAAJ;;EAEA,YAAI1E,KAAK,CAAC6W,KAAN,KAAgB,EAApB,EAAwB;EACpB,cAAI7W,KAAK,CAAC6W,KAAN,KAAgB,EAAhB,IAAuBE,aAAa,IAAI/W,KAAK,CAAC6W,KAAN,KAAgB,EAA5D,EAAiE;EAC7DnS,YAAAA,MAAM,GAAGkS,QAAQ,CAACK,kBAAlB;;EAEA,gBAAI,CAAC/V,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,cAAAA,MAAM,GAAGkS,QAAQ,CAACnT,UAAT,CAAoByT,iBAA7B;EACH;EACJ,WAND,MAMO;EACHxS,YAAAA,MAAM,GAAGkS,QAAQ,CAACO,sBAAlB;;EAEA,gBAAI,CAACjW,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,cAAAA,MAAM,GAAGkS,QAAQ,CAACnT,UAAT,CAAoB2T,gBAA7B;EACH;EACJ;;EAED/O,UAAAA,QAAQ,CAAC3G,IAAT,CAAc,KAAd,EAAoBgD,MAApB,EAA4B,IAA5B;EACH;EACJ;EACJ,KA5CH,EA6CE,KA7CF,CAAF,CAFkC;EAmDlC;;EACAjD,IAAAA,EAAE,CAACmV,QAAD,EAAW,OAAX,EAAoB,UAAA5W,KAAK,EAAI;EAC3B,UAAIA,KAAK,CAAC6W,KAAN,KAAgB,EAApB,EAAwB;EACpB;EACH;;EAEDjE,MAAAA,QAAQ,CAACyE,kBAAT,CAA4B3V,IAA5B,CAAiC,KAAjC,EAAuC,IAAvC,EAA6C,IAA7C;EACH,KANC,CAAF;EAOH,GAraY;EAuab;EACA4V,EAAAA,cAxaa,gCAwa+D;EAAA;;EAAA,QAA3DpT,KAA2D,QAA3DA,KAA2D;EAAA,QAApDqT,IAAoD,QAApDA,IAAoD;EAAA,QAA9CjW,IAA8C,QAA9CA,IAA8C;EAAA,QAAxCyO,KAAwC,QAAxCA,KAAwC;EAAA,0BAAjCwF,KAAiC;EAAA,QAAjCA,KAAiC,2BAAzB,IAAyB;EAAA,4BAAnBiC,OAAmB;EAAA,QAAnBA,OAAmB,6BAAT,KAAS;EACxE,QAAMzT,UAAU,GAAGsB,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBW,MAAtB,CAA6BzS,IAA7B,CAAD,CAA5C;EAEA,QAAMsV,QAAQ,GAAGvS,aAAa,CAC1B,QAD0B,EAE1B2H,MAAM,CAACjI,UAAD,EAAa;EACfzC,MAAAA,IAAI,EAAE,QADS;EAEf0T,MAAAA,IAAI,EAAE,eAFS;EAGf9O,MAAAA,KAAK,EAAE,UAAG,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBuN,OAA1B,cAAqChS,UAAU,CAACmC,KAAX,GAAmBnC,UAAU,CAACmC,KAA9B,GAAsC,EAA3E,EAAgFP,IAAhF,EAHQ;EAIf,sBAAgB6R,OAJD;EAKftT,MAAAA,KAAK,EAALA;EALe,KAAb,CAFoB,CAA9B;EAWA,QAAMuT,IAAI,GAAGpT,aAAa,CAAC,MAAD,CAA1B,CAdwE;;EAiBxEoT,IAAAA,IAAI,CAAClI,SAAL,GAAiBQ,KAAjB;;EAEA,QAAI7O,EAAE,CAACpB,OAAH,CAAWyV,KAAX,CAAJ,EAAuB;EACnBkC,MAAAA,IAAI,CAAC7T,WAAL,CAAiB2R,KAAjB;EACH;;EAEDqB,IAAAA,QAAQ,CAAChT,WAAT,CAAqB6T,IAArB,EAvBwE;;EA0BxE1a,IAAAA,MAAM,CAAC0D,cAAP,CAAsBmW,QAAtB,EAAgC,SAAhC,EAA2C;EACvCc,MAAAA,UAAU,EAAE,IAD2B;EAEvChX,MAAAA,GAFuC,iBAEjC;EACF,eAAOkW,QAAQ,CAAC9K,YAAT,CAAsB,cAAtB,MAA0C,MAAjD;EACH,OAJsC;EAKvCI,MAAAA,GALuC,eAKnCsL,OALmC,EAK1B;EACT;EACA,YAAIA,OAAJ,EAAa;EACT/Z,UAAAA,KAAK,CAAC0F,IAAN,CAAWyT,QAAQ,CAACnT,UAAT,CAAoBkU,QAA/B,EACK1T,MADL,CACY,UAAA2T,IAAI;EAAA,mBAAI7Q,OAAO,CAAC6Q,IAAD,EAAO,wBAAP,CAAX;EAAA,WADhB,EAEKvW,OAFL,CAEa,UAAAuW,IAAI;EAAA,mBAAIA,IAAI,CAACxT,YAAL,CAAkB,cAAlB,EAAkC,OAAlC,CAAJ;EAAA,WAFjB;EAGH;;EAEDwS,QAAAA,QAAQ,CAACxS,YAAT,CAAsB,cAAtB,EAAsCoT,OAAO,GAAG,MAAH,GAAY,OAAzD;EACH;EAdsC,KAA3C;EAiBA,SAAKK,SAAL,CAAeC,IAAf,CACIlB,QADJ,EAEI,aAFJ,EAGI,UAAA5W,KAAK,EAAI;EACL,UAAIkB,EAAE,CAACjB,aAAH,CAAiBD,KAAjB,KAA2BA,KAAK,CAAC6W,KAAN,KAAgB,EAA/C,EAAmD;EAC/C;EACH;;EAED7W,MAAAA,KAAK,CAACoI,cAAN;EACApI,MAAAA,KAAK,CAAC8W,eAAN;EAEAF,MAAAA,QAAQ,CAACY,OAAT,GAAmB,IAAnB;;EAEA,cAAQlW,IAAR;EACI,aAAK,UAAL;EACI,UAAA,MAAI,CAACyW,YAAL,GAAoB9a,MAAM,CAACiH,KAAD,CAA1B;EACA;;EAEJ,aAAK,SAAL;EACI,UAAA,MAAI,CAACwI,OAAL,GAAexI,KAAf;EACA;;EAEJ,aAAK,OAAL;EACI,UAAA,MAAI,CAAC8T,KAAL,GAAaC,UAAU,CAAC/T,KAAD,CAAvB;EACA;;EAEJ;EACI;EAdR;;EAiBA0O,MAAAA,QAAQ,CAACoE,aAAT,CAAuBtV,IAAvB,CAA4B,MAA5B,EAAkC,MAAlC,EAA0CR,EAAE,CAACjB,aAAH,CAAiBD,KAAjB,CAA1C;EACH,KA/BL,EAgCIsB,IAhCJ,EAiCI,KAjCJ;EAoCAsR,IAAAA,QAAQ,CAAC+D,qBAAT,CAA+BjV,IAA/B,CAAoC,IAApC,EAA0CkV,QAA1C,EAAoDtV,IAApD;EAEAiW,IAAAA,IAAI,CAAC3T,WAAL,CAAiBgT,QAAjB;EACH,GA1fY;EA4fb;EACAvE,EAAAA,UA7fa,2BA6f0B;EAAA,QAA5BC,IAA4B,uEAArB,CAAqB;EAAA,QAAlBE,QAAkB,uEAAP,KAAO;;EACnC;EACA,QAAI,CAACtR,EAAE,CAAC1B,MAAH,CAAU8S,IAAV,CAAL,EAAsB;EAClB,aAAOA,IAAP;EACH,KAJkC;;;EAOnC,QAAM4F,UAAU,GAAGjG,QAAQ,CAAC,KAAKmC,QAAN,CAAR,GAA0B,CAA7C;EAEA,WAAO/B,UAAU,CAACC,IAAD,EAAO4F,UAAP,EAAmB1F,QAAnB,CAAjB;EACH,GAvgBY;EAygBb;EACA2F,EAAAA,iBA1gBa,+BA0gBgD;EAAA,QAA3CzT,MAA2C,uEAAlC,IAAkC;EAAA,QAA5B4N,IAA4B,uEAArB,CAAqB;EAAA,QAAlBE,QAAkB,uEAAP,KAAO;;EACzD;EACA,QAAI,CAACtR,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAD,IAAuB,CAACxD,EAAE,CAAC1B,MAAH,CAAU8S,IAAV,CAA5B,EAA6C;EACzC;EACH,KAJwD;;;EAOzD5N,IAAAA,MAAM,CAACF,SAAP,GAAmBoO,QAAQ,CAACP,UAAT,CAAoBC,IAApB,EAA0BE,QAA1B,CAAnB;EACH,GAlhBY;EAohBb;EACA4F,EAAAA,YArhBa,0BAqhBE;EACX,QAAI,CAAC,KAAK7X,SAAL,CAAegK,EAApB,EAAwB;EACpB;EACH,KAHU;;;EAMX,QAAIrJ,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAckR,MAAd,CAAqBE,MAAhC,CAAJ,EAA6C;EACzCrB,MAAAA,QAAQ,CAACyF,QAAT,CAAkB3W,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmB,QAAL,CAAckR,MAAd,CAAqBE,MAAlD,EAA0D,KAAKqE,KAAL,GAAa,CAAb,GAAiB,KAAKrE,MAAhF;EACH,KARU;;;EAWX,QAAI/S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcwQ,OAAd,CAAsBK,IAAjC,CAAJ,EAA4C;EACxC,WAAK7Q,QAAL,CAAcwQ,OAAd,CAAsBK,IAAtB,CAA2B6E,OAA3B,GAAqC,KAAKD,KAAL,IAAc,KAAKrE,MAAL,KAAgB,CAAnE;EACH;EACJ,GAniBY;EAqiBb;EACAoE,EAAAA,QAtiBa,oBAsiBJ3T,MAtiBI,EAsiBe;EAAA,QAAXR,KAAW,uEAAH,CAAG;;EACxB,QAAI,CAAChD,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrB;EACH,KAHuB;;;EAMxBA,IAAAA,MAAM,CAACR,KAAP,GAAeA,KAAf,CANwB;;EASxB0O,IAAAA,QAAQ,CAACyD,eAAT,CAAyB3U,IAAzB,CAA8B,IAA9B,EAAoCgD,MAApC;EACH,GAhjBY;EAkjBb;EACA8T,EAAAA,cAnjBa,0BAmjBExY,KAnjBF,EAmjBS;EAAA;;EAClB,QAAI,CAAC,KAAKO,SAAL,CAAegK,EAAhB,IAAsB,CAACrJ,EAAE,CAAClB,KAAH,CAASA,KAAT,CAA3B,EAA4C;EACxC;EACH;;EAED,QAAIkE,KAAK,GAAG,CAAZ;;EAEA,QAAMuU,WAAW,GAAG,SAAdA,WAAc,CAAC/T,MAAD,EAASjI,KAAT,EAAmB;EACnC,UAAMyH,KAAK,GAAGhD,EAAE,CAAC1B,MAAH,CAAU/C,KAAV,IAAmBA,KAAnB,GAA2B,CAAzC;EACA,UAAMqX,QAAQ,GAAG5S,EAAE,CAACpB,OAAH,CAAW4E,MAAX,IAAqBA,MAArB,GAA8B,MAAI,CAAC7B,QAAL,CAAcqR,OAAd,CAAsBC,MAArE,CAFmC;;EAKnC,UAAIjT,EAAE,CAACpB,OAAH,CAAWgU,QAAX,CAAJ,EAA0B;EACtBA,QAAAA,QAAQ,CAAC5P,KAAT,GAAiBA,KAAjB,CADsB;;EAItB,YAAM0R,KAAK,GAAG9B,QAAQ,CAAC4E,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAAd;;EACA,YAAIxX,EAAE,CAACpB,OAAH,CAAW8V,KAAX,CAAJ,EAAuB;EACnBA,UAAAA,KAAK,CAAC7Q,UAAN,CAAiB,CAAjB,EAAoB4T,SAApB,GAAgCzU,KAAhC;EACH;EACJ;EACJ,KAdD;;EAgBA,QAAIlE,KAAJ,EAAW;EACP,cAAQA,KAAK,CAACsB,IAAd;EACI;EACA,aAAK,YAAL;EACA,aAAK,SAAL;EACA,aAAK,QAAL;EACI4C,UAAAA,KAAK,GAAGqK,aAAa,CAAC,KAAKpC,WAAN,EAAmB,KAAKiI,QAAxB,CAArB,CADJ;;EAII,cAAIpU,KAAK,CAACsB,IAAN,KAAe,YAAnB,EAAiC;EAC7BsR,YAAAA,QAAQ,CAACyF,QAAT,CAAkB3W,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmB,QAAL,CAAckR,MAAd,CAAqBC,IAAlD,EAAwD9P,KAAxD;EACH;;EAED;EAEJ;;EACA,aAAK,SAAL;EACA,aAAK,UAAL;EACIuU,UAAAA,WAAW,CAAC,KAAK5V,QAAL,CAAcqR,OAAd,CAAsBC,MAAvB,EAA+B,KAAKyE,QAAL,GAAgB,GAA/C,CAAX;EAEA;;EAEJ;EACI;EAtBR;EAwBH;EACJ,GApmBY;EAsmBb;EACAvC,EAAAA,eAvmBa,2BAumBG3R,MAvmBH,EAumBW;EACpB;EACA,QAAM2G,KAAK,GAAGnK,EAAE,CAAClB,KAAH,CAAS0E,MAAT,IAAmBA,MAAM,CAACA,MAA1B,GAAmCA,MAAjD,CAFoB;;EAKpB,QAAI,CAACxD,EAAE,CAACpB,OAAH,CAAWuL,KAAX,CAAD,IAAsBA,KAAK,CAACS,YAAN,CAAmB,MAAnB,MAA+B,OAAzD,EAAkE;EAC9D;EACH,KAPmB;;;EAUpB,QAAI/E,OAAO,CAACsE,KAAD,EAAQ,KAAK9C,MAAL,CAAY6K,SAAZ,CAAsBW,MAAtB,CAA6BC,IAArC,CAAX,EAAuD;EACnD3I,MAAAA,KAAK,CAACjH,YAAN,CAAmB,eAAnB,EAAoC,KAAK+H,WAAzC;EACA,UAAMA,WAAW,GAAGyG,QAAQ,CAACP,UAAT,CAAoB,KAAKlG,WAAzB,CAApB;EACA,UAAMiI,QAAQ,GAAGxB,QAAQ,CAACP,UAAT,CAAoB,KAAK+B,QAAzB,CAAjB;EACA,UAAMhG,SAAM,GAAGyB,IAAI,CAACnP,GAAL,CAAS,WAAT,EAAsB,KAAK6H,MAA3B,CAAf;EACA8C,MAAAA,KAAK,CAACjH,YAAN,CACI,gBADJ,EAEIgK,SAAM,CAACvI,OAAP,CAAe,eAAf,EAAgCsG,WAAhC,EAA6CtG,OAA7C,CAAqD,YAArD,EAAmEuO,QAAnE,CAFJ;EAIH,KATD,MASO,IAAIrN,OAAO,CAACsE,KAAD,EAAQ,KAAK9C,MAAL,CAAY6K,SAAZ,CAAsBW,MAAtB,CAA6BE,MAArC,CAAX,EAAyD;EAC5D,UAAM4E,OAAO,GAAGxN,KAAK,CAACnH,KAAN,GAAc,GAA9B;EACAmH,MAAAA,KAAK,CAACjH,YAAN,CAAmB,eAAnB,EAAoCyU,OAApC;EACAxN,MAAAA,KAAK,CAACjH,YAAN,CAAmB,gBAAnB,YAAwCyU,OAAO,CAACnK,OAAR,CAAgB,CAAhB,CAAxC;EACH,KAJM,MAIA;EACHrD,MAAAA,KAAK,CAACjH,YAAN,CAAmB,eAAnB,EAAoCiH,KAAK,CAACnH,KAA1C;EACH,KAzBmB;;;EA4BpB,QAAI,CAACiF,OAAO,CAACG,QAAb,EAAuB;EACnB;EACH,KA9BmB;;;EAiCpB+B,IAAAA,KAAK,CAACtC,KAAN,CAAY+P,WAAZ,CAAwB,SAAxB,YAAsCzN,KAAK,CAACnH,KAAN,GAAcmH,KAAK,CAACoD,GAApB,GAA0B,GAAhE;EACH,GAzoBY;EA2oBb;EACAsK,EAAAA,iBA5oBa,6BA4oBK/Y,KA5oBL,EA4oBY;EAAA;;EACrB;EACA,QACI,CAAC,KAAKuI,MAAL,CAAYyQ,QAAZ,CAAqBhF,IAAtB,IACA,CAAC9S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAckR,MAAd,CAAqBC,IAAhC,CADD,IAEA,CAAC9S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcqR,OAAd,CAAsBG,WAAjC,CAFD,IAGA,KAAKD,QAAL,KAAkB,CAJtB,EAKE;EACE;EACH,KAToB;;;EAYrB,QAAIyE,OAAO,GAAG,CAAd;EACA,QAAMI,UAAU,GAAG,KAAKpW,QAAL,CAAciR,QAAd,CAAuBoF,qBAAvB,EAAnB;EACA,QAAMC,OAAO,aAAM,KAAK5Q,MAAL,CAAYC,UAAZ,CAAuB8L,OAA7B,cAAb;;EAEA,QAAMvT,MAAM,GAAG,gBAAAA,OAAM,EAAI;EACrByF,MAAAA,WAAW,CAAC,MAAI,CAAC3D,QAAL,CAAcqR,OAAd,CAAsBG,WAAvB,EAAoC8E,OAApC,EAA6CpY,OAA7C,CAAX;EACH,KAFD,CAhBqB;;;EAqBrB,QAAI,KAAKuK,KAAT,EAAgB;EACZvK,MAAAA,MAAM,CAAC,KAAD,CAAN;EACA;EACH,KAxBoB;;;EA2BrB,QAAIG,EAAE,CAAClB,KAAH,CAASA,KAAT,CAAJ,EAAqB;EACjB6Y,MAAAA,OAAO,GAAG,MAAMI,UAAU,CAACG,KAAjB,IAA0BpZ,KAAK,CAACqZ,KAAN,GAAcJ,UAAU,CAACK,IAAnD,CAAV;EACH,KAFD,MAEO,IAAIxS,QAAQ,CAAC,KAAKjE,QAAL,CAAcqR,OAAd,CAAsBG,WAAvB,EAAoC8E,OAApC,CAAZ,EAA0D;EAC7DN,MAAAA,OAAO,GAAGZ,UAAU,CAAC,KAAKpV,QAAL,CAAcqR,OAAd,CAAsBG,WAAtB,CAAkCtL,KAAlC,CAAwCuQ,IAAzC,EAA+C,EAA/C,CAApB;EACH,KAFM,MAEA;EACH;EACH,KAjCoB;;;EAoCrB,QAAIT,OAAO,GAAG,CAAd,EAAiB;EACbA,MAAAA,OAAO,GAAG,CAAV;EACH,KAFD,MAEO,IAAIA,OAAO,GAAG,GAAd,EAAmB;EACtBA,MAAAA,OAAO,GAAG,GAAV;EACH,KAxCoB;;;EA2CrBjG,IAAAA,QAAQ,CAACuF,iBAAT,CAA2BzW,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAcqR,OAAd,CAAsBG,WAA5D,EAAyE,KAAKD,QAAL,GAAgB,GAAhB,GAAsByE,OAA/F,EA3CqB;;EA8CrB,SAAKhW,QAAL,CAAcqR,OAAd,CAAsBG,WAAtB,CAAkCtL,KAAlC,CAAwCuQ,IAAxC,aAAkDT,OAAlD,OA9CqB;EAiDrB;;EACA,QAAI3X,EAAE,CAAClB,KAAH,CAASA,KAAT,KAAmB,CAAC,YAAD,EAAe,YAAf,EAA6BmH,QAA7B,CAAsCnH,KAAK,CAACsB,IAA5C,CAAvB,EAA0E;EACtEP,MAAAA,MAAM,CAACf,KAAK,CAACsB,IAAN,KAAe,YAAhB,CAAN;EACH;EACJ,GAjsBY;EAmsBb;EACAiY,EAAAA,UApsBa,sBAosBFvZ,KApsBE,EAosBK;EACd;EACA,QAAMwZ,MAAM,GAAG,CAACtY,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcqR,OAAd,CAAsBE,QAAjC,CAAD,IAA+C,KAAK7L,MAAL,CAAYkR,UAA1E,CAFc;;EAKd7G,IAAAA,QAAQ,CAACuF,iBAAT,CAA2BzW,IAA3B,CACI,IADJ,EAEI,KAAKmB,QAAL,CAAcqR,OAAd,CAAsB/H,WAF1B,EAGIqN,MAAM,GAAG,KAAKpF,QAAL,GAAgB,KAAKjI,WAAxB,GAAsC,KAAKA,WAHrD,EAIIqN,MAJJ,EALc;;EAad,QAAIxZ,KAAK,IAAIA,KAAK,CAACsB,IAAN,KAAe,YAAxB,IAAwC,KAAK2J,KAAL,CAAWyO,OAAvD,EAAgE;EAC5D;EACH,KAfa;;;EAkBd9G,IAAAA,QAAQ,CAAC4F,cAAT,CAAwB9W,IAAxB,CAA6B,IAA7B,EAAmC1B,KAAnC;EACH,GAvtBY;EAytBb;EACA2Z,EAAAA,cA1tBa,4BA0tBI;EACb;EACA,QAAI,CAAC,KAAKpZ,SAAL,CAAegK,EAAhB,IAAuB,CAAC,KAAKhC,MAAL,CAAYkR,UAAb,IAA2B,KAAKtN,WAA3D,EAAyE;EACrE;EACH,KAJY;EAOb;EACA;EACA;;;EACA,QAAI,KAAKiI,QAAL,aAAiB,CAAjB,EAAsB,EAAtB,CAAJ,EAA8B;EAC1BhO,MAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAcqR,OAAd,CAAsB/H,WAAvB,EAAoC,IAApC,CAAZ;EACA/F,MAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAciR,QAAf,EAAyB,IAAzB,CAAZ;EACA;EACH,KAdY;;;EAiBb,QAAI5S,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAckR,MAAd,CAAqBC,IAAhC,CAAJ,EAA2C;EACvC,WAAKnR,QAAL,CAAckR,MAAd,CAAqBC,IAArB,CAA0B5P,YAA1B,CAAuC,eAAvC,EAAwD,KAAKgQ,QAA7D;EACH,KAnBY;;;EAsBb,QAAMwF,WAAW,GAAG1Y,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcqR,OAAd,CAAsBE,QAAjC,CAApB,CAtBa;;EAyBb,QAAI,CAACwF,WAAD,IAAgB,KAAKrR,MAAL,CAAYsR,eAA5B,IAA+C,KAAKzN,MAAxD,EAAgE;EAC5DwG,MAAAA,QAAQ,CAACuF,iBAAT,CAA2BzW,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAcqR,OAAd,CAAsB/H,WAA5D,EAAyE,KAAKiI,QAA9E;EACH,KA3BY;;;EA8Bb,QAAIwF,WAAJ,EAAiB;EACbhH,MAAAA,QAAQ,CAACuF,iBAAT,CAA2BzW,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAcqR,OAAd,CAAsBE,QAA5D,EAAsE,KAAKA,QAA3E;EACH,KAhCY;;;EAmCbxB,IAAAA,QAAQ,CAACmG,iBAAT,CAA2BrX,IAA3B,CAAgC,IAAhC;EACH,GA9vBY;EAgwBb;EACAoY,EAAAA,gBAjwBa,4BAiwBIC,OAjwBJ,EAiwBahZ,MAjwBb,EAiwBqB;EAC9BqF,IAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAc8Q,QAAd,CAAuBN,OAAvB,CAA+B0G,OAA/B,CAAD,EAA0C,CAAChZ,MAA3C,CAAZ;EACH,GAnwBY;EAqwBb;EACAiZ,EAAAA,aAtwBa,yBAswBCD,OAtwBD,EAswBUjX,SAtwBV,EAswBqBrG,KAtwBrB,EAswB4B;EACrC,QAAMwd,IAAI,GAAG,KAAKpX,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BH,OAA9B,CAAb;EACA,QAAI7V,KAAK,GAAG,IAAZ;EACA,QAAIqT,IAAI,GAAGzU,SAAX;;EAEA,QAAIiX,OAAO,KAAK,UAAhB,EAA4B;EACxB7V,MAAAA,KAAK,GAAG,KAAK6T,YAAb;EACH,KAFD,MAEO;EACH7T,MAAAA,KAAK,GAAG,CAAChD,EAAE,CAACb,KAAH,CAAS5D,KAAT,CAAD,GAAmBA,KAAnB,GAA2B,KAAKsd,OAAL,CAAnC,CADG;;EAIH,UAAI7Y,EAAE,CAACb,KAAH,CAAS6D,KAAT,CAAJ,EAAqB;EACjBA,QAAAA,KAAK,GAAG,KAAKqE,MAAL,CAAYwR,OAAZ,EAAqBI,OAA7B;EACH,OANE;;;EASH,UAAI,CAACjZ,EAAE,CAACb,KAAH,CAAS,KAAKG,OAAL,CAAauZ,OAAb,CAAT,CAAD,IAAoC,CAAC,KAAKvZ,OAAL,CAAauZ,OAAb,EAAsB5S,QAAtB,CAA+BjD,KAA/B,CAAzC,EAAgF;EAC5E,aAAK4I,KAAL,CAAW0H,IAAX,iCAAyCtQ,KAAzC,mBAAuD6V,OAAvD;EACA;EACH,OAZE;;;EAeH,UAAI,CAAC,KAAKxR,MAAL,CAAYwR,OAAZ,EAAqBvZ,OAArB,CAA6B2G,QAA7B,CAAsCjD,KAAtC,CAAL,EAAmD;EAC/C,aAAK4I,KAAL,CAAW0H,IAAX,8BAAsCtQ,KAAtC,mBAAoD6V,OAApD;EACA;EACH;EACJ,KA1BoC;;;EA6BrC,QAAI,CAAC7Y,EAAE,CAACpB,OAAH,CAAWyX,IAAX,CAAL,EAAuB;EACnBA,MAAAA,IAAI,GAAG0C,IAAI,IAAIA,IAAI,CAACxS,aAAL,CAAmB,eAAnB,CAAf;EACH,KA/BoC;;;EAkCrC,QAAI,CAACvG,EAAE,CAACpB,OAAH,CAAWyX,IAAX,CAAL,EAAuB;EACnB;EACH,KApCoC;;;EAuCrC,QAAM3B,KAAK,GAAG,KAAK/S,QAAL,CAAc8Q,QAAd,CAAuBN,OAAvB,CAA+B0G,OAA/B,EAAwCtS,aAAxC,YAA0D,KAAKc,MAAL,CAAYC,UAAZ,CAAuBgN,IAAvB,CAA4BtR,KAAtF,EAAd;EACA0R,IAAAA,KAAK,CAACrG,SAAN,GAAkBqD,QAAQ,CAACwH,QAAT,CAAkB1Y,IAAlB,CAAuB,IAAvB,EAA6BqY,OAA7B,EAAsC7V,KAAtC,CAAlB,CAxCqC;;EA2CrC,QAAMQ,MAAM,GAAG6S,IAAI,IAAIA,IAAI,CAAC9P,aAAL,oBAA8BvD,KAA9B,SAAvB;;EAEA,QAAIhD,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAJ,EAAwB;EACpBA,MAAAA,MAAM,CAAC8S,OAAP,GAAiB,IAAjB;EACH;EACJ,GAtzBY;EAwzBb;EACA4C,EAAAA,QAzzBa,oBAyzBJL,OAzzBI,EAyzBK7V,KAzzBL,EAyzBY;EACrB,YAAQ6V,OAAR;EACI,WAAK,OAAL;EACI,eAAO7V,KAAK,KAAK,CAAV,GAAc2L,IAAI,CAACnP,GAAL,CAAS,QAAT,EAAmB,KAAK6H,MAAxB,CAAd,aAAmDrE,KAAnD,YAAP;;EAEJ,WAAK,SAAL;EACI,YAAIhD,EAAE,CAAC1B,MAAH,CAAU0E,KAAV,CAAJ,EAAsB;EAClB,cAAM0R,KAAK,GAAG/F,IAAI,CAACnP,GAAL,wBAAyBwD,KAAzB,GAAkC,KAAKqE,MAAvC,CAAd;;EAEA,cAAI,CAACqN,KAAK,CAAC9W,MAAX,EAAmB;EACf,6BAAUoF,KAAV;EACH;;EAED,iBAAO0R,KAAP;EACH;;EAED,eAAO/G,WAAW,CAAC3K,KAAD,CAAlB;;EAEJ,WAAK,UAAL;EACI,eAAO0P,QAAQ,CAACwG,QAAT,CAAkB1Y,IAAlB,CAAuB,IAAvB,CAAP;;EAEJ;EACI,eAAO,IAAP;EArBR;EAuBH,GAj1BY;EAm1Bb;EACA2Y,EAAAA,cAp1Ba,0BAo1BE7Z,OAp1BF,EAo1BW;EAAA;;EACpB;EACA,QAAI,CAACU,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BxN,OAAzC,CAAL,EAAwD;EACpD;EACH;;EAED,QAAMpL,IAAI,GAAG,SAAb;EACA,QAAMiW,IAAI,GAAG,KAAK1U,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BxN,OAA9B,CAAsCjF,aAAtC,CAAoD,eAApD,CAAb,CAPoB;;EAUpB,QAAIvG,EAAE,CAACvB,KAAH,CAASa,OAAT,CAAJ,EAAuB;EACnB,WAAKA,OAAL,CAAakM,OAAb,GAAuBM,MAAM,CAACxM,OAAD,CAAN,CAAgByD,MAAhB,CAAuB,UAAAyI,OAAO;EAAA,eAAI,MAAI,CAACnE,MAAL,CAAYmE,OAAZ,CAAoBlM,OAApB,CAA4B2G,QAA5B,CAAqCuF,OAArC,CAAJ;EAAA,OAA9B,CAAvB;EACH,KAZmB;;;EAepB,QAAM3L,MAAM,GAAG,CAACG,EAAE,CAACb,KAAH,CAAS,KAAKG,OAAL,CAAakM,OAAtB,CAAD,IAAmC,KAAKlM,OAAL,CAAakM,OAAb,CAAqB5N,MAArB,GAA8B,CAAhF;EACA8T,IAAAA,QAAQ,CAACkH,gBAAT,CAA0BpY,IAA1B,CAA+B,IAA/B,EAAqCJ,IAArC,EAA2CP,MAA3C,EAhBoB;;EAmBpB+D,IAAAA,YAAY,CAACyS,IAAD,CAAZ,CAnBoB;;EAsBpB3E,IAAAA,QAAQ,CAAC0H,SAAT,CAAmB5Y,IAAnB,CAAwB,IAAxB,EAtBoB;;EAyBpB,QAAI,CAACX,MAAL,EAAa;EACT;EACH,KA3BmB;;;EA8BpB,QAAMwZ,QAAQ,GAAG,SAAXA,QAAW,CAAA7N,OAAO,EAAI;EACxB,UAAMkJ,KAAK,GAAG/F,IAAI,CAACnP,GAAL,wBAAyBgM,OAAzB,GAAoC,MAAI,CAACnE,MAAzC,CAAd;;EAEA,UAAI,CAACqN,KAAK,CAAC9W,MAAX,EAAmB;EACf,eAAO,IAAP;EACH;;EAED,aAAO8T,QAAQ,CAAC0C,WAAT,CAAqB5T,IAArB,CAA0B,MAA1B,EAAgCkU,KAAhC,CAAP;EACH,KARD,CA9BoB;;;EAyCpB,SAAKpV,OAAL,CAAakM,OAAb,CACK8N,IADL,CACU,UAACC,CAAD,EAAIC,CAAJ,EAAU;EACZ,UAAMC,OAAO,GAAG,MAAI,CAACpS,MAAL,CAAYmE,OAAZ,CAAoBlM,OAApC;EACA,aAAOma,OAAO,CAAC1N,OAAR,CAAgBwN,CAAhB,IAAqBE,OAAO,CAAC1N,OAAR,CAAgByN,CAAhB,CAArB,GAA0C,CAA1C,GAA8C,CAAC,CAAtD;EACH,KAJL,EAKKrZ,OALL,CAKa,UAAAqL,OAAO,EAAI;EAChBkG,MAAAA,QAAQ,CAAC0E,cAAT,CAAwB5V,IAAxB,CAA6B,MAA7B,EAAmC;EAC/BwC,QAAAA,KAAK,EAAEwI,OADwB;EAE/B6K,QAAAA,IAAI,EAAJA,IAF+B;EAG/BjW,QAAAA,IAAI,EAAJA,IAH+B;EAI/ByO,QAAAA,KAAK,EAAE6C,QAAQ,CAACwH,QAAT,CAAkB1Y,IAAlB,CAAuB,MAAvB,EAA6B,SAA7B,EAAwCgL,OAAxC,CAJwB;EAK/B6I,QAAAA,KAAK,EAAEgF,QAAQ,CAAC7N,OAAD;EALgB,OAAnC;EAOH,KAbL;EAeAkG,IAAAA,QAAQ,CAACoH,aAAT,CAAuBtY,IAAvB,CAA4B,IAA5B,EAAkCJ,IAAlC,EAAwCiW,IAAxC;EACH,GA74BY;EA+4Bb;;EACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA;EACA;EAEA;EACAqD,EAAAA,eA/7Ba,6BA+7BK;EAAA;;EACd;EACA,QAAI,CAAC1Z,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BtG,QAAzC,CAAL,EAAyD;EACrD;EACH,KAJa;;;EAOd,QAAMtS,IAAI,GAAG,UAAb;EACA,QAAMiW,IAAI,GAAG,KAAK1U,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BtG,QAA9B,CAAuCnM,aAAvC,CAAqD,eAArD,CAAb;EACA,QAAMoT,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBpZ,IAAnB,CAAwB,IAAxB,CAAf;EACA,QAAMX,MAAM,GAAGnE,OAAO,CAACie,MAAM,CAAC/b,MAAR,CAAtB,CAVc;;EAad8T,IAAAA,QAAQ,CAACkH,gBAAT,CAA0BpY,IAA1B,CAA+B,IAA/B,EAAqCJ,IAArC,EAA2CP,MAA3C,EAbc;;EAgBd+D,IAAAA,YAAY,CAACyS,IAAD,CAAZ,CAhBc;;EAmBd3E,IAAAA,QAAQ,CAAC0H,SAAT,CAAmB5Y,IAAnB,CAAwB,IAAxB,EAnBc;;EAsBd,QAAI,CAACX,MAAL,EAAa;EACT;EACH,KAxBa;;;EA2Bd,QAAMP,OAAO,GAAGqa,MAAM,CAACnU,GAAP,CAAW,UAACvG,KAAD,EAAQ+D,KAAR;EAAA,aAAmB;EAC1CA,QAAAA,KAAK,EAALA,KAD0C;EAE1CsT,QAAAA,OAAO,EAAE,MAAI,CAAC5D,QAAL,CAAcmH,OAAd,IAAyB,MAAI,CAAChD,YAAL,KAAsB7T,KAFd;EAG1C6L,QAAAA,KAAK,EAAE6D,QAAQ,CAACwG,QAAT,CAAkB1Y,IAAlB,CAAuB,MAAvB,EAA6BvB,KAA7B,CAHmC;EAI1CoV,QAAAA,KAAK,EAAEpV,KAAK,CAAC6a,QAAN,IAAkBpI,QAAQ,CAAC0C,WAAT,CAAqB5T,IAArB,CAA0B,MAA1B,EAAgCvB,KAAK,CAAC6a,QAAN,CAAelM,WAAf,EAAhC,CAJiB;EAK1CyI,QAAAA,IAAI,EAAJA,IAL0C;EAM1CjW,QAAAA,IAAI,EAAE;EANoC,OAAnB;EAAA,KAAX,CAAhB,CA3Bc;;EAqCdd,IAAAA,OAAO,CAACya,OAAR,CAAgB;EACZ/W,MAAAA,KAAK,EAAE,CAAC,CADI;EAEZsT,MAAAA,OAAO,EAAE,CAAC,KAAK5D,QAAL,CAAcmH,OAFZ;EAGZhL,MAAAA,KAAK,EAAEF,IAAI,CAACnP,GAAL,CAAS,UAAT,EAAqB,KAAK6H,MAA1B,CAHK;EAIZgP,MAAAA,IAAI,EAAJA,IAJY;EAKZjW,MAAAA,IAAI,EAAE;EALM,KAAhB,EArCc;;EA8Cdd,IAAAA,OAAO,CAACa,OAAR,CAAgBuR,QAAQ,CAAC0E,cAAT,CAAwBQ,IAAxB,CAA6B,IAA7B,CAAhB;EAEAlF,IAAAA,QAAQ,CAACoH,aAAT,CAAuBtY,IAAvB,CAA4B,IAA5B,EAAkCJ,IAAlC,EAAwCiW,IAAxC;EACH,GAh/BY;EAk/Bb;EACA2D,EAAAA,YAn/Ba,wBAm/BA1a,OAn/BA,EAm/BS;EAAA;;EAClB;EACA,QAAI,CAACU,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BlC,KAAzC,CAAL,EAAsD;EAClD;EACH;;EAED,QAAM1W,IAAI,GAAG,OAAb;EACA,QAAMiW,IAAI,GAAG,KAAK1U,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BlC,KAA9B,CAAoCvQ,aAApC,CAAkD,eAAlD,CAAb,CAPkB;;EAUlB,QAAIvG,EAAE,CAACvB,KAAH,CAASa,OAAT,CAAJ,EAAuB;EACnB,WAAKA,OAAL,CAAawX,KAAb,GAAqBxX,OAArB;EACH,KAFD,MAEO,IAAI,KAAKwK,OAAL,IAAgB,KAAKmQ,OAAzB,EAAkC;EACrC,WAAK3a,OAAL,CAAawX,KAAb,GAAqB,CAAC,GAAD,EAAM,IAAN,EAAY,CAAZ,EAAe,IAAf,EAAqB,GAArB,EAA0B,IAA1B,EAAgC,CAAhC,CAArB;EACH,KAdiB;;;EAiBlB,SAAKxX,OAAL,CAAawX,KAAb,GAAqB,KAAKxX,OAAL,CAAawX,KAAb,CAAmB/T,MAAnB,CAA0B,UAAA+T,KAAK;EAAA,aAAI,MAAI,CAACzP,MAAL,CAAYyP,KAAZ,CAAkBxX,OAAlB,CAA0B2G,QAA1B,CAAmC6Q,KAAnC,CAAJ;EAAA,KAA/B,CAArB,CAjBkB;;EAoBlB,QAAMjX,MAAM,GAAG,CAACG,EAAE,CAACb,KAAH,CAAS,KAAKG,OAAL,CAAawX,KAAtB,CAAD,IAAiC,KAAKxX,OAAL,CAAawX,KAAb,CAAmBlZ,MAAnB,GAA4B,CAA5E;EACA8T,IAAAA,QAAQ,CAACkH,gBAAT,CAA0BpY,IAA1B,CAA+B,IAA/B,EAAqCJ,IAArC,EAA2CP,MAA3C,EArBkB;;EAwBlB+D,IAAAA,YAAY,CAACyS,IAAD,CAAZ,CAxBkB;;EA2BlB3E,IAAAA,QAAQ,CAAC0H,SAAT,CAAmB5Y,IAAnB,CAAwB,IAAxB,EA3BkB;;EA8BlB,QAAI,CAACX,MAAL,EAAa;EACT;EACH,KAhCiB;;;EAmClB,SAAKP,OAAL,CAAawX,KAAb,CAAmB3W,OAAnB,CAA2B,UAAA2W,KAAK,EAAI;EAChCpF,MAAAA,QAAQ,CAAC0E,cAAT,CAAwB5V,IAAxB,CAA6B,MAA7B,EAAmC;EAC/BwC,QAAAA,KAAK,EAAE8T,KADwB;EAE/BT,QAAAA,IAAI,EAAJA,IAF+B;EAG/BjW,QAAAA,IAAI,EAAJA,IAH+B;EAI/ByO,QAAAA,KAAK,EAAE6C,QAAQ,CAACwH,QAAT,CAAkB1Y,IAAlB,CAAuB,MAAvB,EAA6B,OAA7B,EAAsCsW,KAAtC;EAJwB,OAAnC;EAMH,KAPD;EASApF,IAAAA,QAAQ,CAACoH,aAAT,CAAuBtY,IAAvB,CAA4B,IAA5B,EAAkCJ,IAAlC,EAAwCiW,IAAxC;EACH,GAhiCY;EAkiCb;EACA+C,EAAAA,SAniCa,uBAmiCD;EAAA,QACAjH,OADA,GACY,KAAKxQ,QAAL,CAAc8Q,QAD1B,CACAN,OADA;EAER,QAAM8F,OAAO,GAAG,CAACjY,EAAE,CAACb,KAAH,CAASgT,OAAT,CAAD,IAAsBtW,MAAM,CAACqe,MAAP,CAAc/H,OAAd,EAAuBgI,IAAvB,CAA4B,UAAArF,MAAM;EAAA,aAAI,CAACA,MAAM,CAAC3P,MAAZ;EAAA,KAAlC,CAAtC;EAEAD,IAAAA,YAAY,CAAC,KAAKvD,QAAL,CAAc8Q,QAAd,CAAuB6B,IAAxB,EAA8B,CAAC2D,OAA/B,CAAZ;EACH,GAxiCY;EA0iCb;EACA9B,EAAAA,kBA3iCa,8BA2iCM4C,IA3iCN,EA2iC8B;EAAA,QAAlB3R,QAAkB,uEAAP,KAAO;;EACvC,QAAI,KAAKzF,QAAL,CAAc8Q,QAAd,CAAuB2H,KAAvB,CAA6BjV,MAAjC,EAAyC;EACrC;EACH;;EAED,QAAI3B,MAAM,GAAGuV,IAAb;;EAEA,QAAI,CAAC/Y,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,MAAAA,MAAM,GAAG3H,MAAM,CAACqe,MAAP,CAAc,KAAKvY,QAAL,CAAc8Q,QAAd,CAAuBuG,MAArC,EAA6CpR,IAA7C,CAAkD,UAAAmR,IAAI;EAAA,eAAI,CAACA,IAAI,CAAC5T,MAAV;EAAA,OAAtD,CAAT;EACH;;EAED,QAAMkV,SAAS,GAAG7W,MAAM,CAAC+C,aAAP,CAAqB,oBAArB,CAAlB;EAEAY,IAAAA,QAAQ,CAAC3G,IAAT,CAAc,IAAd,EAAoB6Z,SAApB,EAA+BjT,QAA/B;EACH,GAzjCY;EA2jCb;EACAkT,EAAAA,UA5jCa,sBA4jCF/e,KA5jCE,EA4jCK;EAAA,QACN6e,KADM,GACI,KAAKzY,QAAL,CAAc8Q,QADlB,CACN2H,KADM;EAEd,QAAMtF,MAAM,GAAG,KAAKnT,QAAL,CAAcwQ,OAAd,CAAsBM,QAArC,CAFc;;EAKd,QAAI,CAACzS,EAAE,CAACpB,OAAH,CAAWwb,KAAX,CAAD,IAAsB,CAACpa,EAAE,CAACpB,OAAH,CAAWkW,MAAX,CAA3B,EAA+C;EAC3C;EACH,KAPa;;;EAAA,QAUN3P,MAVM,GAUKiV,KAVL,CAUNjV,MAVM;EAWd,QAAIoV,IAAI,GAAGpV,MAAX;;EAEA,QAAInF,EAAE,CAACzB,OAAH,CAAWhD,KAAX,CAAJ,EAAuB;EACnBgf,MAAAA,IAAI,GAAGhf,KAAP;EACH,KAFD,MAEO,IAAIyE,EAAE,CAACjB,aAAH,CAAiBxD,KAAjB,KAA2BA,KAAK,CAACoa,KAAN,KAAgB,EAA/C,EAAmD;EACtD4E,MAAAA,IAAI,GAAG,KAAP;EACH,KAFM,MAEA,IAAIva,EAAE,CAAClB,KAAH,CAASvD,KAAT,CAAJ,EAAqB;EACxB,UAAMif,UAAU,GAAGJ,KAAK,CAACzU,QAAN,CAAepK,KAAK,CAACiI,MAArB,CAAnB,CADwB;EAIxB;EACA;;EACA,UAAIgX,UAAU,IAAK,CAACA,UAAD,IAAejf,KAAK,CAACiI,MAAN,KAAiBsR,MAAhC,IAA0CyF,IAA7D,EAAoE;EAChE;EACH;EACJ,KA1Ba;;;EA6BdzF,IAAAA,MAAM,CAAC5R,YAAP,CAAoB,eAApB,EAAqCqX,IAArC,EA7Bc;;EAgCdrV,IAAAA,YAAY,CAACkV,KAAD,EAAQ,CAACG,IAAT,CAAZ,CAhCc;;EAmCdjV,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBgN,IAAvB,CAA4BvE,IAAtD,EAA4DwK,IAA5D,CAAX,CAnCc;;EAsCd,QAAIA,IAAI,IAAIva,EAAE,CAACjB,aAAH,CAAiBxD,KAAjB,CAAZ,EAAqC;EACjCmW,MAAAA,QAAQ,CAACyE,kBAAT,CAA4B3V,IAA5B,CAAiC,IAAjC,EAAuC,IAAvC,EAA6C,IAA7C;EACH,KAFD,MAEO,IAAI,CAAC+Z,IAAD,IAAS,CAACpV,MAAd,EAAsB;EACzB;EACAgC,MAAAA,QAAQ,CAAC3G,IAAT,CAAc,IAAd,EAAoBsU,MAApB,EAA4B9U,EAAE,CAACjB,aAAH,CAAiBxD,KAAjB,CAA5B;EACH;EACJ,GAxmCY;EA0mCb;EACAkf,EAAAA,WA3mCa,uBA2mCDC,GA3mCC,EA2mCI;EACb,QAAMC,KAAK,GAAGD,GAAG,CAACrY,SAAJ,CAAc,IAAd,CAAd;EACAsY,IAAAA,KAAK,CAAC9S,KAAN,CAAY+S,QAAZ,GAAuB,UAAvB;EACAD,IAAAA,KAAK,CAAC9S,KAAN,CAAYgT,OAAZ,GAAsB,CAAtB;EACAF,IAAAA,KAAK,CAACtV,eAAN,CAAsB,QAAtB,EAJa;;EAObqV,IAAAA,GAAG,CAACnY,UAAJ,CAAeG,WAAf,CAA2BiY,KAA3B,EAPa;;EAUb,QAAMzC,KAAK,GAAGyC,KAAK,CAACG,WAApB;EACA,QAAMC,MAAM,GAAGJ,KAAK,CAACK,YAArB,CAXa;;EAcbtX,IAAAA,aAAa,CAACiX,KAAD,CAAb;EAEA,WAAO;EACHzC,MAAAA,KAAK,EAALA,KADG;EAEH6C,MAAAA,MAAM,EAANA;EAFG,KAAP;EAIH,GA/nCY;EAioCb;EACAjF,EAAAA,aAloCa,2BAkoC8B;EAAA;;EAAA,QAA7B1V,IAA6B,uEAAtB,EAAsB;EAAA,QAAlBgH,QAAkB,uEAAP,KAAO;EACvC,QAAM5D,MAAM,GAAGH,QAAQ,CAACgN,cAAT,yBAAyC,KAAKpL,EAA9C,cAAoD7E,IAApD,EAAf,CADuC;;EAIvC,QAAI,CAACJ,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrB;EACH,KANsC;;;EASvC,QAAM5B,SAAS,GAAG4B,MAAM,CAACjB,UAAzB;EACA,QAAM+K,OAAO,GAAG/Q,KAAK,CAAC0F,IAAN,CAAWL,SAAS,CAAC6U,QAArB,EAA+B7O,IAA/B,CAAoC,UAAA8O,IAAI;EAAA,aAAI,CAACA,IAAI,CAACvR,MAAV;EAAA,KAAxC,CAAhB,CAVuC;;EAavC,QAAI0D,OAAO,CAACwB,WAAR,IAAuB,CAACxB,OAAO,CAACyB,aAApC,EAAmD;EAC/C;EACA1I,MAAAA,SAAS,CAACiG,KAAV,CAAgBqQ,KAAhB,aAA2B5K,OAAO,CAACwN,WAAnC;EACAlZ,MAAAA,SAAS,CAACiG,KAAV,CAAgBkT,MAAhB,aAA4BzN,OAAO,CAAC0N,YAApC,QAH+C;;EAM/C,UAAMC,IAAI,GAAGvJ,QAAQ,CAAC+I,WAAT,CAAqBja,IAArB,CAA0B,IAA1B,EAAgCgD,MAAhC,CAAb,CAN+C;;EAS/C,UAAM0X,OAAO,GAAG,SAAVA,OAAU,CAAApc,KAAK,EAAI;EACrB;EACA,YAAIA,KAAK,CAAC0E,MAAN,KAAiB5B,SAAjB,IAA8B,CAAC,CAAC,OAAD,EAAU,QAAV,EAAoBqE,QAApB,CAA6BnH,KAAK,CAACqc,YAAnC,CAAnC,EAAqF;EACjF;EACH,SAJoB;;;EAOrBvZ,QAAAA,SAAS,CAACiG,KAAV,CAAgBqQ,KAAhB,GAAwB,EAAxB;EACAtW,QAAAA,SAAS,CAACiG,KAAV,CAAgBkT,MAAhB,GAAyB,EAAzB,CARqB;;EAWrBta,QAAAA,GAAG,CAACD,IAAJ,CAAS,MAAT,EAAeoB,SAAf,EAA0B2F,kBAA1B,EAA8C2T,OAA9C;EACH,OAZD,CAT+C;;;EAwB/C3a,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAcoB,SAAd,EAAyB2F,kBAAzB,EAA6C2T,OAA7C,EAxB+C;;EA2B/CtZ,MAAAA,SAAS,CAACiG,KAAV,CAAgBqQ,KAAhB,aAA2B+C,IAAI,CAAC/C,KAAhC;EACAtW,MAAAA,SAAS,CAACiG,KAAV,CAAgBkT,MAAhB,aAA4BE,IAAI,CAACF,MAAjC;EACH,KA1CsC;;;EA6CvC7V,IAAAA,YAAY,CAACoI,OAAD,EAAU,IAAV,CAAZ,CA7CuC;;EAgDvCpI,IAAAA,YAAY,CAAC1B,MAAD,EAAS,KAAT,CAAZ,CAhDuC;;EAmDvCkO,IAAAA,QAAQ,CAACyE,kBAAT,CAA4B3V,IAA5B,CAAiC,IAAjC,EAAuCgD,MAAvC,EAA+C4D,QAA/C;EACH,GAtrCY;EAwrCb;EACAgU,EAAAA,eAzrCa,6BAyrCK;EACd,QAAMtG,MAAM,GAAG,KAAKnT,QAAL,CAAcwQ,OAAd,CAAsBkJ,QAArC,CADc;;EAId,QAAI,CAACrb,EAAE,CAACpB,OAAH,CAAWkW,MAAX,CAAL,EAAyB;EACrB;EACH,KANa;;;EASdA,IAAAA,MAAM,CAAC5R,YAAP,CAAoB,MAApB,EAA4B,KAAKmY,QAAjC;EACH,GAnsCY;EAqsCb;EACA;EACAC,EAAAA,MAvsCa,kBAusCN/K,IAvsCM,EAusCA;EAAA;;EACT;EACA,QAAM3O,SAAS,GAAGuB,aAAa,CAAC,KAAD,EAAQgB,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBR,QAAtB,CAA+B3P,OAAhC,CAAjC,CAA/B,CAFS;;EAKT,QAAI,KAAKsF,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,SAA9B,CAAJ,EAA8C;EAC1CrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;EACH,KAPQ;;;EAUT,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;EACzCrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,QAAjC,CAAtB;EACH,KAZQ;;;EAeT,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;EACvCrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;EACH,KAjBQ;;;EAoBT,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;EAC/CrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,cAAjC,CAAtB;EACH,KAtBQ;;;EAyBT,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3C,UAAM2M,QAAQ,GAAGzP,aAAa,CAAC,KAAD,EAAQgB,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBU,QAAvB,CAAjC,CAA9B,CAD2C;;EAI3CA,MAAAA,QAAQ,CAAClQ,WAAT,CACIgP,QAAQ,CAACqD,WAAT,CAAqBvU,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC;EACpCyE,QAAAA,EAAE,sBAAesL,IAAI,CAACtL,EAApB;EADkC,OAAxC,CADJ,EAJ2C;;EAW3C2N,MAAAA,QAAQ,CAAClQ,WAAT,CAAqBgP,QAAQ,CAAC0D,cAAT,CAAwB5U,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC,CAArB,EAX2C;EAe3C;;EACA,UAAI,KAAK6G,MAAL,CAAYyQ,QAAZ,CAAqBhF,IAAzB,EAA+B;EAC3B,YAAMM,OAAO,GAAGjQ,aAAa,CACzB,MADyB,EAEzB;EACI6B,UAAAA,KAAK,EAAE,KAAKqC,MAAL,CAAYC,UAAZ,CAAuB8L;EADlC,SAFyB,EAKzB,OALyB,CAA7B;EAQAR,QAAAA,QAAQ,CAAClQ,WAAT,CAAqB0Q,OAArB;EACA,aAAKzR,QAAL,CAAcqR,OAAd,CAAsBG,WAAtB,GAAoCC,OAApC;EACH;;EAED,WAAKzR,QAAL,CAAciR,QAAd,GAAyBA,QAAzB;EACAhR,MAAAA,SAAS,CAACc,WAAV,CAAsB,KAAKf,QAAL,CAAciR,QAApC;EACH,KAxDQ;;;EA2DT,QAAI,KAAKvL,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;EAC/CrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC8D,UAAT,CAAoBhV,IAApB,CAAyB,IAAzB,EAA+B,aAA/B,CAAtB;EACH,KA7DQ;;;EAgET,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3CrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC8D,UAAT,CAAoBhV,IAApB,CAAyB,IAAzB,EAA+B,UAA/B,CAAtB;EACH,KAlEQ;;;EAqET,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,MAA9B,KAAyC,KAAKoB,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,QAA9B,CAA7C,EAAsF;EAClF,UAAM8M,MAAM,GAAG5P,aAAa,CAAC,KAAD,EAAQ;EAChC6B,QAAAA,KAAK,EAAE;EADyB,OAAR,CAA5B,CADkF;;EAMlF,UAAI,KAAKqC,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;EACvC8M,QAAAA,MAAM,CAACrQ,WAAP,CAAmBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAnB;EACH,OARiF;;;EAWlF,UAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;EACzC;EACA,YAAMpD,UAAU,GAAG;EACf0K,UAAAA,GAAG,EAAE,CADU;EAEf0H,UAAAA,IAAI,EAAE,IAFS;EAGfjS,UAAAA,KAAK,EAAE,KAAKqE,MAAL,CAAY0L;EAHJ,SAAnB,CAFyC;;EASzCA,QAAAA,MAAM,CAACrQ,WAAP,CACIgP,QAAQ,CAACqD,WAAT,CAAqBvU,IAArB,CACI,IADJ,EAEI,QAFJ,EAGIsK,MAAM,CAACjI,UAAD,EAAa;EACfoC,UAAAA,EAAE,wBAAiBsL,IAAI,CAACtL,EAAtB;EADa,SAAb,CAHV,CADJ;EAUA,aAAKtD,QAAL,CAAcoR,MAAd,GAAuBA,MAAvB;EACH;;EAEDnR,MAAAA,SAAS,CAACc,WAAV,CAAsBqQ,MAAtB;EACH,KAvGQ;;;EA0GT,QAAI,KAAK1L,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3CrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,CAAtB;EACH,KA5GQ;;;EA+GT,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,KAA6C,CAACjG,EAAE,CAACb,KAAH,CAAS,KAAKkI,MAAL,CAAYoL,QAArB,CAAlD,EAAkF;EAC9E,UAAMoC,OAAO,GAAG1R,aAAa,CAAC,KAAD,EAAQ;EACjC6B,QAAAA,KAAK,EAAE,YAD0B;EAEjCG,QAAAA,MAAM,EAAE;EAFyB,OAAR,CAA7B;EAKA0P,MAAAA,OAAO,CAACnS,WAAR,CACIgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6C;EACzC,yBAAiB,IADwB;EAEzC,iDAAkC+P,IAAI,CAACtL,EAAvC,CAFyC;EAGzC,yBAAiB;EAHwB,OAA7C,CADJ;EAQA,UAAMmV,KAAK,GAAGjX,aAAa,CAAC,KAAD,EAAQ;EAC/B6B,QAAAA,KAAK,EAAE,uBADwB;EAE/BC,QAAAA,EAAE,0BAAmBsL,IAAI,CAACtL,EAAxB,CAF6B;EAG/BE,QAAAA,MAAM,EAAE;EAHuB,OAAR,CAA3B;EAMA,UAAMoW,KAAK,GAAGpY,aAAa,CAAC,KAAD,CAA3B;EAEA,UAAMqY,IAAI,GAAGrY,aAAa,CAAC,KAAD,EAAQ;EAC9B8B,QAAAA,EAAE,0BAAmBsL,IAAI,CAACtL,EAAxB;EAD4B,OAAR,CAA1B,CAtB8E;;EA2B9E,UAAMqP,IAAI,GAAGnR,aAAa,CAAC,KAAD,EAAQ;EAC9B2Q,QAAAA,IAAI,EAAE;EADwB,OAAR,CAA1B;EAIA0H,MAAAA,IAAI,CAAC9Y,WAAL,CAAiB4R,IAAjB;EACAiH,MAAAA,KAAK,CAAC7Y,WAAN,CAAkB8Y,IAAlB;EACA,WAAK7Z,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8BwC,IAA9B,GAAqCA,IAArC,CAjC8E;;EAoC9E,WAAKnU,MAAL,CAAYoL,QAAZ,CAAqBtS,OAArB,CAA6B,UAAAC,IAAI,EAAI;EACjC;EACA,YAAMsV,QAAQ,GAAGvS,aAAa,CAC1B,QAD0B,EAE1B2H,MAAM,CAAC3G,yBAAyB,CAAC,MAAI,CAACkD,MAAL,CAAY6K,SAAZ,CAAsBC,OAAtB,CAA8BM,QAA/B,CAA1B,EAAoE;EACtErS,UAAAA,IAAI,EAAE,QADgE;EAEtE4E,UAAAA,KAAK,YAAK,MAAI,CAACqC,MAAL,CAAYC,UAAZ,CAAuBuN,OAA5B,cAAuC,MAAI,CAACxN,MAAL,CAAYC,UAAZ,CAAuBuN,OAA9D,cAFiE;EAGtEf,UAAAA,IAAI,EAAE,UAHgE;EAItE,2BAAiB,IAJqD;EAKtE3O,UAAAA,MAAM,EAAE;EAL8D,SAApE,CAFoB,CAA9B,CAFiC;;EAcjCuM,QAAAA,QAAQ,CAAC+D,qBAAT,CAA+BjV,IAA/B,CAAoC,MAApC,EAA0CkV,QAA1C,EAAoDtV,IAApD,EAdiC;;EAiBjCG,QAAAA,EAAE,CAACmV,QAAD,EAAW,OAAX,EAAoB,YAAM;EACxBhE,UAAAA,QAAQ,CAACoE,aAAT,CAAuBtV,IAAvB,CAA4B,MAA5B,EAAkCJ,IAAlC,EAAwC,KAAxC;EACH,SAFC,CAAF;EAIA,YAAMmW,IAAI,GAAGpT,aAAa,CAAC,MAAD,EAAS,IAAT,EAAewL,IAAI,CAACnP,GAAL,CAASY,IAAT,EAAe,MAAI,CAACiH,MAApB,CAAf,CAA1B;EAEA,YAAMrE,KAAK,GAAGG,aAAa,CAAC,MAAD,EAAS;EAChC6B,UAAAA,KAAK,EAAE,MAAI,CAACqC,MAAL,CAAYC,UAAZ,CAAuBgN,IAAvB,CAA4BtR;EADH,SAAT,CAA3B,CAvBiC;;EA4BjCA,QAAAA,KAAK,CAACqL,SAAN,GAAkBkC,IAAI,CAACnQ,IAAD,CAAtB;EAEAmW,QAAAA,IAAI,CAAC7T,WAAL,CAAiBM,KAAjB;EACA0S,QAAAA,QAAQ,CAAChT,WAAT,CAAqB6T,IAArB;EACAjC,QAAAA,IAAI,CAAC5R,WAAL,CAAiBgT,QAAjB,EAhCiC;;EAmCjC,YAAMqD,IAAI,GAAG5V,aAAa,CAAC,KAAD,EAAQ;EAC9B8B,UAAAA,EAAE,0BAAmBsL,IAAI,CAACtL,EAAxB,cAA8B7E,IAA9B,CAD4B;EAE9B+E,UAAAA,MAAM,EAAE;EAFsB,SAAR,CAA1B,CAnCiC;;EAyCjC,YAAMsW,UAAU,GAAGtY,aAAa,CAAC,QAAD,EAAW;EACvC/C,UAAAA,IAAI,EAAE,QADiC;EAEvC4E,UAAAA,KAAK,YAAK,MAAI,CAACqC,MAAL,CAAYC,UAAZ,CAAuBuN,OAA5B,cAAuC,MAAI,CAACxN,MAAL,CAAYC,UAAZ,CAAuBuN,OAA9D;EAFkC,SAAX,CAAhC,CAzCiC;;EA+CjC4G,QAAAA,UAAU,CAAC/Y,WAAX,CACIS,aAAa,CACT,MADS,EAET;EACI,yBAAe;EADnB,SAFS,EAKTwL,IAAI,CAACnP,GAAL,CAASY,IAAT,EAAe,MAAI,CAACiH,MAApB,CALS,CADjB,EA/CiC;;EA0DjCoU,QAAAA,UAAU,CAAC/Y,WAAX,CACIS,aAAa,CACT,MADS,EAET;EACI6B,UAAAA,KAAK,EAAE,MAAI,CAACqC,MAAL,CAAYC,UAAZ,CAAuBnC;EADlC,SAFS,EAKTwJ,IAAI,CAACnP,GAAL,CAAS,UAAT,EAAqB,MAAI,CAAC6H,MAA1B,CALS,CADjB,EA1DiC;;EAqEjC9G,QAAAA,EAAE,CACEwY,IADF,EAEE,SAFF,EAGE,UAAAja,KAAK,EAAI;EACL;EACA,cAAIA,KAAK,CAAC6W,KAAN,KAAgB,EAApB,EAAwB;EACpB;EACH,WAJI;;;EAOL7W,UAAAA,KAAK,CAACoI,cAAN;EACApI,UAAAA,KAAK,CAAC8W,eAAN,GARK;;EAWLlE,UAAAA,QAAQ,CAACoE,aAAT,CAAuBtV,IAAvB,CAA4B,MAA5B,EAAkC,MAAlC,EAA0C,IAA1C;EACH,SAfH,EAgBE,KAhBF,CAAF,CArEiC;;EAyFjCD,QAAAA,EAAE,CAACkb,UAAD,EAAa,OAAb,EAAsB,YAAM;EAC1B/J,UAAAA,QAAQ,CAACoE,aAAT,CAAuBtV,IAAvB,CAA4B,MAA5B,EAAkC,MAAlC,EAA0C,KAA1C;EACH,SAFC,CAAF,CAzFiC;;EA8FjCuY,QAAAA,IAAI,CAACrW,WAAL,CAAiB+Y,UAAjB,EA9FiC;;EAiGjC1C,QAAAA,IAAI,CAACrW,WAAL,CACIS,aAAa,CAAC,KAAD,EAAQ;EACjB2Q,UAAAA,IAAI,EAAE;EADW,SAAR,CADjB;EAMAyH,QAAAA,KAAK,CAAC7Y,WAAN,CAAkBqW,IAAlB;EAEA,QAAA,MAAI,CAACpX,QAAL,CAAc8Q,QAAd,CAAuBN,OAAvB,CAA+B/R,IAA/B,IAAuCsV,QAAvC;EACA,QAAA,MAAI,CAAC/T,QAAL,CAAc8Q,QAAd,CAAuBuG,MAAvB,CAA8B5Y,IAA9B,IAAsC2Y,IAAtC;EACH,OA3GD;EA6GAqB,MAAAA,KAAK,CAAC1X,WAAN,CAAkB6Y,KAAlB;EACA1G,MAAAA,OAAO,CAACnS,WAAR,CAAoB0X,KAApB;EACAxY,MAAAA,SAAS,CAACc,WAAV,CAAsBmS,OAAtB;EAEA,WAAKlT,QAAL,CAAc8Q,QAAd,CAAuB2H,KAAvB,GAA+BA,KAA/B;EACA,WAAKzY,QAAL,CAAc8Q,QAAd,CAAuB6B,IAAvB,GAA8BO,OAA9B;EACH,KAtQQ;;;EAyQT,QAAI,KAAKxN,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,KAA9B,KAAwC4C,OAAO,CAACU,GAApD,EAAyD;EACrD3H,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,KAAjC,CAAtB;EACH,KA3QQ;;;EA8QT,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,SAA9B,KAA4C4C,OAAO,CAACY,OAAxD,EAAiE;EAC7D7H,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;EACH,KAhRQ;;;EAmRT,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;EAC3C,UAAMpD,WAAU,GAAG;EACfjE,QAAAA,OAAO,EAAE,GADM;EAEf8c,QAAAA,IAAI,EAAE,KAAKL,QAFI;EAGf7X,QAAAA,MAAM,EAAE;EAHO,OAAnB;EAD2C,UAOnC6X,QAPmC,GAOtB,KAAKhU,MAAL,CAAYsU,IAPU,CAOnCN,QAPmC;;EAS3C,UAAI,CAACrb,EAAE,CAACd,GAAH,CAAOmc,QAAP,CAAD,IAAqB,KAAKO,OAA9B,EAAuC;EACnC9Q,QAAAA,MAAM,CAACjI,WAAD,EAAa;EACf+Q,UAAAA,IAAI,iBAAU,KAAK3K,QAAf,CADW;EAEfyL,UAAAA,KAAK,EAAE,KAAKzL;EAFG,SAAb,CAAN;EAIH;;EAEDrH,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6CqC,WAA7C,CAAtB;EACH,KApSQ;;;EAuST,QAAI,KAAKwE,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;EAC7CrE,MAAAA,SAAS,CAACc,WAAV,CAAsBgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAAtB;EACH,KAzSQ;;;EA4ST,QAAI,KAAK6G,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;EAC7C,WAAKtE,QAAL,CAAcC,SAAd,CAAwBc,WAAxB,CAAoCgP,QAAQ,CAAC6C,YAAT,CAAsB/T,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAApC;EACH;;EAED,SAAKmB,QAAL,CAAc+P,QAAd,GAAyB9P,SAAzB,CAhTS;;EAmTT,QAAI,KAAKkI,OAAT,EAAkB;EACd4H,MAAAA,QAAQ,CAACyH,cAAT,CAAwB3Y,IAAxB,CAA6B,IAA7B,EAAmCgK,KAAK,CAACK,iBAAN,CAAwBrK,IAAxB,CAA6B,IAA7B,CAAnC;EACH;;EAEDkR,IAAAA,QAAQ,CAACsI,YAAT,CAAsBxZ,IAAtB,CAA2B,IAA3B;EAEA,WAAOoB,SAAP;EACH,GAjgDY;EAmgDb;EACAia,EAAAA,MApgDa,oBAogDJ;EAAA;;EACL;EACA,QAAI,KAAKxU,MAAL,CAAY4I,UAAhB,EAA4B;EACxB,UAAM2D,IAAI,GAAGlC,QAAQ,CAACC,UAAT,CAAoBnR,IAApB,CAAyB,IAAzB,CAAb,CADwB;;EAIxB,UAAIoT,IAAI,CAAC9B,IAAT,EAAe;EACX7B,QAAAA,UAAU,CAAC2D,IAAI,CAAC1U,GAAN,EAAW,aAAX,CAAV;EACH;EACJ,KATI;;;EAYL,SAAK+F,EAAL,GAAUmH,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACa,MAAL,KAAgB,KAA3B,CAAV,CAZK;;EAeL,QAAIrL,SAAS,GAAG,IAAhB;EACA,SAAKD,QAAL,CAAc+P,QAAd,GAAyB,IAAzB,CAhBK;;EAmBL,QAAM+C,KAAK,GAAG;EACVxP,MAAAA,EAAE,EAAE,KAAKA,EADC;EAEV6W,MAAAA,QAAQ,EAAE,KAAKzU,MAAL,CAAYuH,QAFZ;EAGVC,MAAAA,KAAK,EAAE,KAAKxH,MAAL,CAAYwH;EAHT,KAAd;EAKA,QAAIyB,MAAM,GAAG,IAAb,CAxBK;;EA2BL,QAAItQ,EAAE,CAACxB,QAAH,CAAY,KAAK6I,MAAL,CAAYqK,QAAxB,CAAJ,EAAuC;EACnC,WAAKrK,MAAL,CAAYqK,QAAZ,GAAuB,KAAKrK,MAAL,CAAYqK,QAAZ,CAAqBlR,IAArB,CAA0B,KAAKiU,KAA/B,CAAvB;EACH,KA7BI;;;EAgCL,QAAI,CAAC,KAAKpN,MAAL,CAAYqK,QAAjB,EAA2B;EACvB,WAAKrK,MAAL,CAAYqK,QAAZ,GAAuB,EAAvB;EACH;;EAED,QAAI1R,EAAE,CAACpB,OAAH,CAAW,KAAKyI,MAAL,CAAYqK,QAAvB,KAAoC1R,EAAE,CAAChC,MAAH,CAAU,KAAKqJ,MAAL,CAAYqK,QAAtB,CAAxC,EAAyE;EACrE;EACA9P,MAAAA,SAAS,GAAG,KAAKyF,MAAL,CAAYqK,QAAxB;EACH,KAHD,MAGO;EACH;EACA9P,MAAAA,SAAS,GAAG8P,QAAQ,CAAC4J,MAAT,CAAgB9a,IAAhB,CAAqB,IAArB,EAA2B;EACnCyE,QAAAA,EAAE,EAAE,KAAKA,EAD0B;EAEnC6W,QAAAA,QAAQ,EAAE,KAAKzU,MAAL,CAAYuH,QAFa;EAGnCkI,QAAAA,KAAK,EAAE,KAAKA,KAHuB;EAInCtL,QAAAA,OAAO,EAAE,KAAKA,OAJqB;EAKnCkH,QAAAA,QAAQ,EAAEA,QAAQ,CAACwG,QAAT,CAAkB1Y,IAAlB,CAAuB,IAAvB,CALyB;EAOnC;;EAPmC,OAA3B,CAAZ;EASA8P,MAAAA,MAAM,GAAG,KAAT;EACH,KAnDI;;;EAsDL,QAAM3L,OAAO,GAAG,SAAVA,OAAU,CAAApJ,KAAK,EAAI;EACrB,UAAIsV,MAAM,GAAGtV,KAAb;EAEAM,MAAAA,MAAM,CAACiH,OAAP,CAAe2R,KAAf,EAAsBtU,OAAtB,CAA8B,iBAAkB;EAAA;EAAA,YAAhB8C,GAAgB;EAAA,YAAXD,KAAW;;EAC5C6N,QAAAA,MAAM,GAAGpD,UAAU,CAACoD,MAAD,aAAa5N,GAAb,QAAqBD,KAArB,CAAnB;EACH,OAFD;EAIA,aAAO6N,MAAP;EACH,KARD,CAtDK;;;EAiEL,QAAIP,MAAJ,EAAY;EACR,UAAItQ,EAAE,CAAChC,MAAH,CAAU,KAAKqJ,MAAL,CAAYqK,QAAtB,CAAJ,EAAqC;EACjC9P,QAAAA,SAAS,GAAG+C,OAAO,CAAC/C,SAAD,CAAnB;EACH,OAFD,MAEO,IAAI5B,EAAE,CAACpB,OAAH,CAAWgD,SAAX,CAAJ,EAA2B;EAC9BA,QAAAA,SAAS,CAACyM,SAAV,GAAsB1J,OAAO,CAAC/C,SAAS,CAACyM,SAAX,CAA7B;EACH;EACJ,KAvEI;;;EA0EL,QAAI7K,MAAJ,CA1EK;;EA6EL,QAAIxD,EAAE,CAAChC,MAAH,CAAU,KAAKqJ,MAAL,CAAY6K,SAAZ,CAAsBR,QAAtB,CAA+B9P,SAAzC,CAAJ,EAAyD;EACrD4B,MAAAA,MAAM,GAAGH,QAAQ,CAACkD,aAAT,CAAuB,KAAKc,MAAL,CAAY6K,SAAZ,CAAsBR,QAAtB,CAA+B9P,SAAtD,CAAT;EACH,KA/EI;;;EAkFL,QAAI,CAAC5B,EAAE,CAACpB,OAAH,CAAW4E,MAAX,CAAL,EAAyB;EACrBA,MAAAA,MAAM,GAAG,KAAK7B,QAAL,CAAcC,SAAvB;EACH,KApFI;;;EAuFL,QAAMma,YAAY,GAAG/b,EAAE,CAACpB,OAAH,CAAWgD,SAAX,IAAwB,uBAAxB,GAAkD,oBAAvE;EACA4B,IAAAA,MAAM,CAACuY,YAAD,CAAN,CAAqB,YAArB,EAAmCna,SAAnC,EAxFK;;EA2FL,QAAI,CAAC5B,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc+P,QAAzB,CAAL,EAAyC;EACrCA,MAAAA,QAAQ,CAACO,YAAT,CAAsBzR,IAAtB,CAA2B,IAA3B;EACH,KA7FI;;;EAgGL,QAAI,CAACR,EAAE,CAACb,KAAH,CAAS,KAAKwC,QAAL,CAAcwQ,OAAvB,CAAL,EAAsC;EAClC,UAAM6J,WAAW,GAAG,SAAdA,WAAc,CAAAlH,MAAM,EAAI;EAC1B,YAAMpQ,SAAS,GAAG,OAAI,CAAC2C,MAAL,CAAYC,UAAZ,CAAuB2U,cAAzC;EACApgB,QAAAA,MAAM,CAAC0D,cAAP,CAAsBuV,MAAtB,EAA8B,SAA9B,EAAyC;EACrC0B,UAAAA,UAAU,EAAE,IADyB;EAErChX,UAAAA,GAFqC,iBAE/B;EACF,mBAAOoG,QAAQ,CAACkP,MAAD,EAASpQ,SAAT,CAAf;EACH,WAJoC;EAKrCsG,UAAAA,GALqC,iBAKhB;EAAA,gBAAjBqM,OAAiB,uEAAP,KAAO;EACjB/R,YAAAA,WAAW,CAACwP,MAAD,EAASpQ,SAAT,EAAoB2S,OAApB,CAAX;EACH;EAPoC,SAAzC;EASH,OAXD,CADkC;;;EAelCxb,MAAAA,MAAM,CAACqe,MAAP,CAAc,KAAKvY,QAAL,CAAcwQ,OAA5B,EACKpP,MADL,CACYrH,OADZ,EAEKyE,OAFL,CAEa,UAAA2U,MAAM,EAAI;EACf,YAAI9U,EAAE,CAACvB,KAAH,CAASqW,MAAT,KAAoB9U,EAAE,CAACrB,QAAH,CAAYmW,MAAZ,CAAxB,EAA6C;EACzCvY,UAAAA,KAAK,CAAC0F,IAAN,CAAW6S,MAAX,EAAmB/R,MAAnB,CAA0BrH,OAA1B,EAAmCyE,OAAnC,CAA2C6b,WAA3C;EACH,SAFD,MAEO;EACHA,UAAAA,WAAW,CAAClH,MAAD,CAAX;EACH;EACJ,OARL;EASH,KAxHI;;;EA2HL,QAAIzX,MAAM,CAACkL,SAAP,CAAiBC,SAAjB,CAA2BvC,QAA3B,CAAoC,MAApC,CAAJ,EAAiD;EAC7C8B,MAAAA,OAAO,CAACvE,MAAD,CAAP;EACH,KA7HI;;;EAgIL,QAAI,KAAK6D,MAAL,CAAYyQ,QAAZ,CAAqBpG,QAAzB,EAAmC;EAAA,yBACG,KAAKrK,MADR;EAAA,UACvBC,UADuB,gBACvBA,UADuB;EAAA,UACX4K,SADW,gBACXA,SADW;EAE/B,UAAM1N,QAAQ,aAAM0N,SAAS,CAACR,QAAV,CAAmB3P,OAAzB,cAAoCmQ,SAAS,CAACgK,MAA9C,eAAyD5U,UAAU,CAACnC,MAApE,CAAd;EACA,UAAM+W,MAAM,GAAG7V,WAAW,CAAC7F,IAAZ,CAAiB,IAAjB,EAAuBgE,QAAvB,CAAf;EAEAjI,MAAAA,KAAK,CAAC0F,IAAN,CAAWia,MAAX,EAAmB/b,OAAnB,CAA2B,UAAAuU,KAAK,EAAI;EAChCpP,QAAAA,WAAW,CAACoP,KAAD,EAAQ,OAAI,CAACrN,MAAL,CAAYC,UAAZ,CAAuBnC,MAA/B,EAAuC,KAAvC,CAAX;EACAG,QAAAA,WAAW,CAACoP,KAAD,EAAQ,OAAI,CAACrN,MAAL,CAAYC,UAAZ,CAAuB8L,OAA/B,EAAwC,IAAxC,CAAX;EACH,OAHD;EAIH;EACJ;EA9oDY,CAAjB;;ECfA;;;;;;AAKA,EAAO,SAAS+I,QAAT,CAAkB5gB,KAAlB,EAAsC;EAAA,MAAb6gB,IAAa,uEAAN,IAAM;EACzC,MAAIld,GAAG,GAAG3D,KAAV;;EAEA,MAAI6gB,IAAJ,EAAU;EACN,QAAMC,MAAM,GAAGhZ,QAAQ,CAACF,aAAT,CAAuB,GAAvB,CAAf;EACAkZ,IAAAA,MAAM,CAACX,IAAP,GAAcxc,GAAd;EACAA,IAAAA,GAAG,GAAGmd,MAAM,CAACX,IAAb;EACH;;EAED,MAAI;EACA,WAAO,IAAI3d,GAAJ,CAAQmB,GAAR,CAAP;EACH,GAFD,CAEE,OAAOf,CAAP,EAAU;EACR,WAAO,IAAP;EACH;EACJ;;AAGD,EAAO,SAASme,cAAT,CAAwB/gB,KAAxB,EAA+B;EAClC,MAAMghB,MAAM,GAAG,IAAIC,eAAJ,EAAf;;EAEA,MAAIxc,EAAE,CAAC3B,MAAH,CAAU9C,KAAV,CAAJ,EAAsB;EAClBM,IAAAA,MAAM,CAACiH,OAAP,CAAevH,KAAf,EAAsB4E,OAAtB,CAA8B,gBAAkB;EAAA;EAAA,UAAhB8C,GAAgB;EAAA,UAAXD,KAAW;;EAC5CuZ,MAAAA,MAAM,CAACvR,GAAP,CAAW/H,GAAX,EAAgBD,KAAhB;EACH,KAFD;EAGH;;EAED,SAAOuZ,MAAP;EACH;;ECdD,IAAM7J,QAAQ,GAAG;EACb;EACA+J,EAAAA,KAFa,mBAEL;EACJ;EACA,QAAI,CAAC,KAAKpd,SAAL,CAAegK,EAApB,EAAwB;EACpB;EACH,KAJG;;;EAOJ,QAAI,CAAC,KAAKqT,OAAN,IAAiB,KAAKC,SAAtB,IAAoC,KAAK7S,OAAL,IAAgB,CAACjB,OAAO,CAACqB,UAAjE,EAA8E;EAC1E;EACA,UACIlK,EAAE,CAACvB,KAAH,CAAS,KAAK4I,MAAL,CAAYqK,QAArB,KACA,KAAKrK,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CADA,IAEA,KAAKoB,MAAL,CAAYoL,QAAZ,CAAqBxM,QAArB,CAA8B,UAA9B,CAHJ,EAIE;EACEyL,QAAAA,QAAQ,CAACgI,eAAT,CAAyBlZ,IAAzB,CAA8B,IAA9B;EACH;;EAED;EACH,KAlBG;;;EAqBJ,QAAI,CAACR,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc+Q,QAAzB,CAAL,EAAyC;EACrC,WAAK/Q,QAAL,CAAc+Q,QAAd,GAAyBvP,aAAa,CAAC,KAAD,EAAQgB,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBQ,QAAvB,CAAjC,CAAtC;EAEAnP,MAAAA,WAAW,CAAC,KAAK5B,QAAL,CAAc+Q,QAAf,EAAyB,KAAK/Q,QAAL,CAAcI,OAAvC,CAAX;EACH,KAzBG;EA4BJ;;;EACA,QAAIkG,OAAO,CAACC,IAAR,IAAgB7K,MAAM,CAACU,GAA3B,EAAgC;EAC5B,UAAM4D,QAAQ,GAAG,KAAKoI,KAAL,CAAW/D,gBAAX,CAA4B,OAA5B,CAAjB;EAEAzJ,MAAAA,KAAK,CAAC0F,IAAN,CAAWN,QAAX,EAAqBxB,OAArB,CAA6B,UAAAlB,KAAK,EAAI;EAClC,YAAMoM,GAAG,GAAGpM,KAAK,CAAC2L,YAAN,CAAmB,KAAnB,CAAZ;EACA,YAAM1L,GAAG,GAAGid,QAAQ,CAAC9Q,GAAD,CAApB;;EAEA,YACInM,GAAG,KAAK,IAAR,IACAA,GAAG,CAAChB,QAAJ,KAAiBb,MAAM,CAACwU,QAAP,CAAgB6J,IAAhB,CAAqBxd,QADtC,IAEA,CAAC,OAAD,EAAU,QAAV,EAAoB+H,QAApB,CAA6B/G,GAAG,CAAC0d,QAAjC,CAHJ,EAIE;EACEtN,UAAAA,KAAK,CAACjE,GAAD,EAAM,MAAN,CAAL,CACKxJ,IADL,CACU,UAAAgb,IAAI,EAAI;EACV5d,YAAAA,KAAK,CAACiE,YAAN,CAAmB,KAAnB,EAA0B7F,MAAM,CAACU,GAAP,CAAW+e,eAAX,CAA2BD,IAA3B,CAA1B;EACH,WAHL,EAIK/L,KAJL,CAIW,YAAM;EACTpN,YAAAA,aAAa,CAACzE,KAAD,CAAb;EACH,WANL;EAOH;EACJ,OAjBD;EAkBH,KAlDG;EAqDJ;EACA;EACA;EACA;EACA;;;EAEA,QAAM8d,gBAAgB,GAAGxU,SAAS,CAACyU,SAAV,IAAuB,CAACzU,SAAS,CAACuR,QAAV,IAAsBvR,SAAS,CAAC0U,YAAhC,IAAgD,IAAjD,CAAhD;EACA,QAAMD,SAAS,GAAGlR,MAAM,CAACiR,gBAAgB,CAACvX,GAAjB,CAAqB,UAAAsU,QAAQ;EAAA,aAAIA,QAAQ,CAAC5Z,KAAT,CAAe,GAAf,EAAoB,CAApB,CAAJ;EAAA,KAA7B,CAAD,CAAxB;EAEA,QAAI4Z,QAAQ,GAAG,CAAC,KAAKrO,OAAL,CAAajM,GAAb,CAAiB,UAAjB,KAAgC,KAAK6H,MAAL,CAAYqL,QAAZ,CAAqBoH,QAArD,IAAiE,MAAlE,EAA0EhM,WAA1E,EAAf,CA9DI;;EAiEJ,QAAIgM,QAAQ,KAAK,MAAjB,EAAyB;EAAA,sCACRkD,SADQ;;EACpBlD,MAAAA,QADoB;EAExB;;EAED,QAAIoD,MAAM,GAAG,KAAKzR,OAAL,CAAajM,GAAb,CAAiB,UAAjB,CAAb;;EACA,QAAI,CAACQ,EAAE,CAACzB,OAAH,CAAW2e,MAAX,CAAL,EAAyB;EAClBA,MAAAA,MADkB,GACP,KAAK7V,MAAL,CAAYqL,QADL,CAClBwK,MADkB;EAExB;;EAEDrhB,IAAAA,MAAM,CAACqF,MAAP,CAAc,KAAKwR,QAAnB,EAA6B;EACzBmH,MAAAA,OAAO,EAAE,KADgB;EAEzBqD,MAAAA,MAAM,EAANA,MAFyB;EAGzBpD,MAAAA,QAAQ,EAARA,QAHyB;EAIzBkD,MAAAA,SAAS,EAATA;EAJyB,KAA7B,EA1EI;;EAkFJ,QAAI,KAAKlT,OAAT,EAAkB;EACd,UAAMqT,WAAW,GAAG,KAAK9V,MAAL,CAAYqL,QAAZ,CAAqBpC,MAArB,GAA8B,sBAA9B,GAAuD,aAA3E;EACA/P,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAc,KAAKuJ,KAAL,CAAWG,UAAzB,EAAqCiT,WAArC,EAAkDzK,QAAQ,CAACpC,MAAT,CAAgBsG,IAAhB,CAAqB,IAArB,CAAlD;EACH,KArFG;;;EAwFJlV,IAAAA,UAAU,CAACgR,QAAQ,CAACpC,MAAT,CAAgBsG,IAAhB,CAAqB,IAArB,CAAD,EAA6B,CAA7B,CAAV;EACH,GA3FY;EA6Fb;EACAtG,EAAAA,MA9Fa,oBA8FJ;EAAA;;EACL,QAAMqJ,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBpZ,IAAnB,CAAwB,IAAxB,EAA8B,IAA9B,CAAf,CADK;;EAAA,yBAGgD,KAAKkS,QAHrD;EAAA,QAGGwK,MAHH,kBAGGA,MAHH;EAAA,QAGWpD,QAHX,kBAGWA,QAHX;EAAA,QAGqBsD,IAHrB,kBAGqBA,IAHrB;EAAA,QAG2BC,gBAH3B,kBAG2BA,gBAH3B;EAIL,QAAMC,cAAc,GAAG5hB,OAAO,CAACie,MAAM,CAAC/R,IAAP,CAAY,UAAA3I,KAAK;EAAA,aAAIA,KAAK,CAAC6a,QAAN,KAAmBA,QAAvB;EAAA,KAAjB,CAAD,CAA9B,CAJK;;EAOL,QAAI,KAAKhQ,OAAL,IAAgB,KAAK4S,OAAzB,EAAkC;EAC9B/C,MAAAA,MAAM,CAAC5W,MAAP,CAAc,UAAA9D,KAAK;EAAA,eAAI,CAACme,IAAI,CAAC5d,GAAL,CAASP,KAAT,CAAL;EAAA,OAAnB,EAAyCkB,OAAzC,CAAiD,UAAAlB,KAAK,EAAI;EACtD,QAAA,KAAI,CAAC2M,KAAL,CAAWC,GAAX,CAAe,aAAf,EAA8B5M,KAA9B,EADsD;;;EAGtDme,QAAAA,IAAI,CAACpS,GAAL,CAAS/L,KAAT,EAAgB;EACZga,UAAAA,OAAO,EAAEha,KAAK,CAACse,IAAN,KAAe;EADZ,SAAhB,EAHsD;;EAQtDte,QAAAA,KAAK,CAACse,IAAN,GAAa,QAAb,CARsD;;EAWtDhd,QAAAA,EAAE,CAACC,IAAH,CAAQ,KAAR,EAAcvB,KAAd,EAAqB,WAArB,EAAkC;EAAA,iBAAMyT,QAAQ,CAAC8K,UAAT,CAAoBhd,IAApB,CAAyB,KAAzB,CAAN;EAAA,SAAlC;EACH,OAZD;EAaH,KArBI;;;EAwBL,QAAK8c,cAAc,IAAI,KAAKxD,QAAL,KAAkBA,QAArC,IAAkD,CAACH,MAAM,CAAC1T,QAAP,CAAgBoX,gBAAhB,CAAvD,EAA0F;EACtF3K,MAAAA,QAAQ,CAAC+K,WAAT,CAAqBjd,IAArB,CAA0B,IAA1B,EAAgCsZ,QAAhC;EACApH,MAAAA,QAAQ,CAAC7S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B0c,MAAM,IAAII,cAArC;EACH,KA3BI;;;EA8BLhY,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBoL,QAAvB,CAAgC3D,OAA1D,EAAmE,CAAC/O,EAAE,CAACb,KAAH,CAASwa,MAAT,CAApE,CAAX,CA9BK;;EAiCL,QAAI,CAAC,KAAKtS,MAAL,CAAYqK,QAAZ,IAAwB,EAAzB,EAA6BzL,QAA7B,CAAsC,UAAtC,KAAqD,KAAKoB,MAAL,CAAYoL,QAAZ,CAAqBxM,QAArB,CAA8B,UAA9B,CAAzD,EAAoG;EAChGyL,MAAAA,QAAQ,CAACgI,eAAT,CAAyBlZ,IAAzB,CAA8B,IAA9B;EACH;EACJ,GAlIY;EAoIb;EACA;EACAX,EAAAA,MAtIa,kBAsINtE,KAtIM,EAsIiB;EAAA,QAAhBuE,OAAgB,uEAAN,IAAM;;EAC1B;EACA,QAAI,CAAC,KAAKT,SAAL,CAAegK,EAApB,EAAwB;EACpB;EACH;;EAJyB,QAMlBwQ,OANkB,GAMN,KAAKnH,QANC,CAMlBmH,OANkB;;EAO1B,QAAM6D,WAAW,GAAG,KAAKrW,MAAL,CAAYC,UAAZ,CAAuBoL,QAAvB,CAAgCwK,MAApD,CAP0B;EAU1B;;EACA,QAAMA,MAAM,GAAGld,EAAE,CAAC5B,eAAH,CAAmB7C,KAAnB,IAA4B,CAACse,OAA7B,GAAuCte,KAAtD,CAX0B;;EAc1B,QAAI2hB,MAAM,KAAKrD,OAAf,EAAwB;EACpB;EACA,UAAI,CAAC/Z,OAAL,EAAc;EACV,aAAK4S,QAAL,CAAcwK,MAAd,GAAuBA,MAAvB;EACA,aAAKzR,OAAL,CAAaT,GAAb,CAAiB;EAAE0H,UAAAA,QAAQ,EAAEwK;EAAZ,SAAjB;EACH,OALmB;;;EAQpB,UAAI,CAAC,KAAKpD,QAAN,IAAkBoD,MAAlB,IAA4B,CAACpd,OAAjC,EAA0C;EACtC,YAAM6Z,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBpZ,IAAnB,CAAwB,IAAxB,CAAf;EACA,YAAMvB,KAAK,GAAGyT,QAAQ,CAACiL,SAAT,CAAmBnd,IAAnB,CAAwB,IAAxB,GAA+B,KAAKkS,QAAL,CAAcoH,QAA7C,4BAA0D,KAAKpH,QAAL,CAAcsK,SAAxE,IAAoF,IAApF,CAAd,CAFsC;;EAKtC,aAAKtK,QAAL,CAAcoH,QAAd,GAAyB7a,KAAK,CAAC6a,QAA/B,CALsC;;EAQtCpH,QAAAA,QAAQ,CAAC1H,GAAT,CAAaxK,IAAb,CAAkB,IAAlB,EAAwBmZ,MAAM,CAAC5N,OAAP,CAAe9M,KAAf,CAAxB;EACA;EACH,OAlBmB;;;EAqBpB,UAAI,KAAK0C,QAAL,CAAcwQ,OAAd,CAAsBO,QAA1B,EAAoC;EAChC,aAAK/Q,QAAL,CAAcwQ,OAAd,CAAsBO,QAAtB,CAA+B2E,OAA/B,GAAyC6F,MAAzC;EACH,OAvBmB;;;EA0BpB5X,MAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B8b,WAA1B,EAAuCR,MAAvC,CAAX;EAEA,WAAKxK,QAAL,CAAcmH,OAAd,GAAwBqD,MAAxB,CA5BoB;;EA+BpBxL,MAAAA,QAAQ,CAACoH,aAAT,CAAuBtY,IAAvB,CAA4B,IAA5B,EAAkC,UAAlC,EA/BoB;;EAkCpBM,MAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCmT,MAAM,GAAG,iBAAH,GAAuB,kBAAjE;EACH;EACJ,GAxLY;EA0Lb;EACA;EACAlS,EAAAA,GA5La,eA4LT7I,KA5LS,EA4Lc;EAAA,QAAhBrC,OAAgB,uEAAN,IAAM;EACvB,QAAM6Z,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBpZ,IAAnB,CAAwB,IAAxB,CAAf,CADuB;;EAIvB,QAAI2B,KAAK,KAAK,CAAC,CAAf,EAAkB;EACduQ,MAAAA,QAAQ,CAAC7S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B,KAA3B,EAAkCV,OAAlC;EACA;EACH;;EAED,QAAI,CAACE,EAAE,CAAC1B,MAAH,CAAU6D,KAAV,CAAL,EAAuB;EACnB,WAAKyJ,KAAL,CAAW0H,IAAX,CAAgB,0BAAhB,EAA4CnR,KAA5C;EACA;EACH;;EAED,QAAI,EAAEA,KAAK,IAAIwX,MAAX,CAAJ,EAAwB;EACpB,WAAK/N,KAAL,CAAW0H,IAAX,CAAgB,iBAAhB,EAAmCnR,KAAnC;EACA;EACH;;EAED,QAAI,KAAKuQ,QAAL,CAAcmE,YAAd,KAA+B1U,KAAnC,EAA0C;EACtC,WAAKuQ,QAAL,CAAcmE,YAAd,GAA6B1U,KAA7B;EACA,UAAMlD,KAAK,GAAG0a,MAAM,CAACxX,KAAD,CAApB;;EAFsC,iBAGjBlD,KAAK,IAAI,EAHQ;EAAA,UAG9B6a,QAH8B,QAG9BA,QAH8B;;;EAMtC,WAAKpH,QAAL,CAAc2K,gBAAd,GAAiCpe,KAAjC,CANsC;;EAStCyS,MAAAA,QAAQ,CAACoH,aAAT,CAAuBtY,IAAvB,CAA4B,IAA5B,EAAkC,UAAlC,EATsC;;EAYtC,UAAI,CAACV,OAAL,EAAc;EACV,aAAK4S,QAAL,CAAcoH,QAAd,GAAyBA,QAAzB;EACA,aAAKrO,OAAL,CAAaT,GAAb,CAAiB;EAAE8O,UAAAA,QAAQ,EAARA;EAAF,SAAjB;EACH,OAfqC;;;EAkBtC,UAAI,KAAKG,OAAT,EAAkB;EACd,aAAK2D,KAAL,CAAWC,eAAX,CAA2B/D,QAA3B;EACH,OApBqC;;;EAuBtChZ,MAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoC,gBAApC;EACH,KA3CsB;;;EA8CvB2I,IAAAA,QAAQ,CAAC7S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B,IAA3B,EAAiCV,OAAjC;;EAEA,QAAI,KAAKgK,OAAL,IAAgB,KAAK4S,OAAzB,EAAkC;EAC9B;EACAhK,MAAAA,QAAQ,CAAC8K,UAAT,CAAoBhd,IAApB,CAAyB,IAAzB;EACH;EACJ,GAhPY;EAkPb;EACA;EACAid,EAAAA,WApPa,uBAoPDliB,KApPC,EAoPsB;EAAA,QAAhBuE,OAAgB,uEAAN,IAAM;;EAC/B,QAAI,CAACE,EAAE,CAAChC,MAAH,CAAUzC,KAAV,CAAL,EAAuB;EACnB,WAAKqQ,KAAL,CAAW0H,IAAX,CAAgB,2BAAhB,EAA6C/X,KAA7C;EACA;EACH,KAJ8B;;;EAM/B,QAAMue,QAAQ,GAAGve,KAAK,CAACuS,WAAN,EAAjB;EACA,SAAK4E,QAAL,CAAcoH,QAAd,GAAyBA,QAAzB,CAP+B;;EAU/B,QAAMH,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBpZ,IAAnB,CAAwB,IAAxB,CAAf;EACA,QAAMvB,KAAK,GAAGyT,QAAQ,CAACiL,SAAT,CAAmBnd,IAAnB,CAAwB,IAAxB,EAA8B,CAACsZ,QAAD,CAA9B,CAAd;EACApH,IAAAA,QAAQ,CAAC1H,GAAT,CAAaxK,IAAb,CAAkB,IAAlB,EAAwBmZ,MAAM,CAAC5N,OAAP,CAAe9M,KAAf,CAAxB,EAA+Ca,OAA/C;EACH,GAjQY;EAmQb;EACA;EACA;EACA8Z,EAAAA,SAtQa,uBAsQa;EAAA;;EAAA,QAAhBtJ,MAAgB,uEAAP,KAAO;EACtB;EACA,QAAMqJ,MAAM,GAAGpd,KAAK,CAAC0F,IAAN,CAAW,CAAC,KAAK8H,KAAL,IAAc,EAAf,EAAmBG,UAAnB,IAAiC,EAA5C,CAAf,CAFsB;EAItB;;EACA,WAAOyP,MAAM,CACR5W,MADE,CACK,UAAA9D,KAAK;EAAA,aAAI,CAAC,MAAI,CAAC6K,OAAN,IAAiBwG,MAAjB,IAA2B,MAAI,CAACoC,QAAL,CAAc0K,IAAd,CAAmBU,GAAnB,CAAuB7e,KAAvB,CAA/B;EAAA,KADV,EAEF8D,MAFE,CAEK,UAAA9D,KAAK;EAAA,aAAI,CAAC,UAAD,EAAa,WAAb,EAA0BgH,QAA1B,CAAmChH,KAAK,CAACvB,IAAzC,CAAJ;EAAA,KAFV,CAAP;EAGH,GA9QY;EAgRb;EACAigB,EAAAA,SAjRa,qBAiRHX,SAjRG,EAiRuB;EAAA;;EAAA,QAAfzX,KAAe,uEAAP,KAAO;EAChC,QAAMoU,MAAM,GAAGjH,QAAQ,CAACkH,SAAT,CAAmBpZ,IAAnB,CAAwB,IAAxB,CAAf;;EACA,QAAMud,aAAa,GAAG,SAAhBA,aAAgB,CAAA9e,KAAK;EAAA,aAAIlD,MAAM,CAAC,CAAC,MAAI,CAAC2W,QAAL,CAAc0K,IAAd,CAAmB5d,GAAnB,CAAuBP,KAAvB,KAAiC,EAAlC,EAAsCga,OAAvC,CAAV;EAAA,KAA3B;;EACA,QAAM+E,MAAM,GAAGzhB,KAAK,CAAC0F,IAAN,CAAW0X,MAAX,EAAmBL,IAAnB,CAAwB,UAACC,CAAD,EAAIC,CAAJ;EAAA,aAAUuE,aAAa,CAACvE,CAAD,CAAb,GAAmBuE,aAAa,CAACxE,CAAD,CAA1C;EAAA,KAAxB,CAAf;EACA,QAAIta,KAAJ;EACA+d,IAAAA,SAAS,CAACiB,KAAV,CAAgB,UAAAnE,QAAQ,EAAI;EACxB7a,MAAAA,KAAK,GAAG+e,MAAM,CAACpW,IAAP,CAAY,UAAA3I,KAAK;EAAA,eAAIA,KAAK,CAAC6a,QAAN,KAAmBA,QAAvB;EAAA,OAAjB,CAAR;EACA,aAAO,CAAC7a,KAAR,CAFwB;EAG3B,KAHD,EALgC;;EAUhC,WAAOA,KAAK,KAAKsG,KAAK,GAAGyY,MAAM,CAAC,CAAD,CAAT,GAAelW,SAAzB,CAAZ;EACH,GA5RY;EA8Rb;EACAoW,EAAAA,eA/Ra,6BA+RK;EACd,WAAOxL,QAAQ,CAACkH,SAAT,CAAmBpZ,IAAnB,CAAwB,IAAxB,EAA8B,KAAKqW,YAAnC,CAAP;EACH,GAjSY;EAmSb;EACAqC,EAAAA,QApSa,oBAoSJja,KApSI,EAoSG;EACZ,QAAI4X,YAAY,GAAG5X,KAAnB;;EAEA,QAAI,CAACe,EAAE,CAACf,KAAH,CAAS4X,YAAT,CAAD,IAA2BhO,OAAO,CAACqB,UAAnC,IAAiD,KAAKwI,QAAL,CAAcmH,OAAnE,EAA4E;EACxEhD,MAAAA,YAAY,GAAGnE,QAAQ,CAACwL,eAAT,CAAyB1d,IAAzB,CAA8B,IAA9B,CAAf;EACH;;EAED,QAAIR,EAAE,CAACf,KAAH,CAAS4X,YAAT,CAAJ,EAA4B;EACxB,UAAI,CAAC7W,EAAE,CAACb,KAAH,CAAS0X,YAAY,CAACnC,KAAtB,CAAL,EAAmC;EAC/B,eAAOmC,YAAY,CAACnC,KAApB;EACH;;EAED,UAAI,CAAC1U,EAAE,CAACb,KAAH,CAAS0X,YAAY,CAACiD,QAAtB,CAAL,EAAsC;EAClC,eAAO7a,KAAK,CAAC6a,QAAN,CAAelM,WAAf,EAAP;EACH;;EAED,aAAOe,IAAI,CAACnP,GAAL,CAAS,SAAT,EAAoB,KAAK6H,MAAzB,CAAP;EACH;;EAED,WAAOsH,IAAI,CAACnP,GAAL,CAAS,UAAT,EAAqB,KAAK6H,MAA1B,CAAP;EACH,GAxTY;EA0Tb;EACA;EACAmW,EAAAA,UA5Ta,sBA4TFjiB,KA5TE,EA4TK;EACd;EACA,QAAI,CAAC,KAAK8D,SAAL,CAAegK,EAApB,EAAwB;EACpB;EACH;;EAED,QAAI,CAACrJ,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc+Q,QAAzB,CAAL,EAAyC;EACrC,WAAK9G,KAAL,CAAW0H,IAAX,CAAgB,kCAAhB;EACA;EACH,KATa;;;EAYd,QAAI,CAACtT,EAAE,CAAC5B,eAAH,CAAmB7C,KAAnB,CAAD,IAA8B,CAACgB,KAAK,CAACD,OAAN,CAAcf,KAAd,CAAnC,EAAyD;EACrD,WAAKqQ,KAAL,CAAW0H,IAAX,CAAgB,2BAAhB,EAA6C/X,KAA7C;EACA;EACH;;EAED,QAAI4iB,IAAI,GAAG5iB,KAAX,CAjBc;;EAoBd,QAAI,CAAC4iB,IAAL,EAAW;EACP,UAAMlf,KAAK,GAAGyT,QAAQ,CAACwL,eAAT,CAAyB1d,IAAzB,CAA8B,IAA9B,CAAd;EACA2d,MAAAA,IAAI,GAAG5hB,KAAK,CAAC0F,IAAN,CAAW,CAAChD,KAAK,IAAI,EAAV,EAAcmf,UAAd,IAA4B,EAAvC,EACF5Y,GADE,CACE,UAAAxG,GAAG;EAAA,eAAIA,GAAG,CAACqf,YAAJ,EAAJ;EAAA,OADL,EAEF7Y,GAFE,CAEE+I,OAFF,CAAP;EAGH,KAzBa;;;EA4Bd,QAAMqC,OAAO,GAAGuN,IAAI,CAAC3Y,GAAL,CAAS,UAAA8Y,OAAO;EAAA,aAAIA,OAAO,CAAC7Z,IAAR,EAAJ;EAAA,KAAhB,EAAoC0P,IAApC,CAAyC,IAAzC,CAAhB;EACA,QAAMoK,OAAO,GAAG3N,OAAO,KAAK,KAAKjP,QAAL,CAAc+Q,QAAd,CAAuBrE,SAAnD;;EAEA,QAAIkQ,OAAJ,EAAa;EACT;EACA3a,MAAAA,YAAY,CAAC,KAAKjC,QAAL,CAAc+Q,QAAf,CAAZ;EACA,UAAM8L,OAAO,GAAGrb,aAAa,CAAC,MAAD,EAASgB,yBAAyB,CAAC,KAAKkD,MAAL,CAAY6K,SAAZ,CAAsBsM,OAAvB,CAAlC,CAA7B;EACAA,MAAAA,OAAO,CAACnQ,SAAR,GAAoBuC,OAApB;EACA,WAAKjP,QAAL,CAAc+Q,QAAd,CAAuBhQ,WAAvB,CAAmC8b,OAAnC,EALS;;EAQT1d,MAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoC,WAApC;EACH;EACJ;EArWY,CAAjB;;ECxBA;EACA;EACA;EAEA,IAAM0U,QAAQ,GAAG;EACb;EACA1P,EAAAA,OAAO,EAAE,IAFI;EAIb;EACAF,EAAAA,KAAK,EAAE,EALM;EAOb;EACAjD,EAAAA,KAAK,EAAE,KARM;EAUb;EACA8S,EAAAA,QAAQ,EAAE,KAXG;EAab;EACAC,EAAAA,SAAS,EAAE,IAdE;EAgBb;EACA;EACAzV,EAAAA,WAAW,EAAE,IAlBA;EAoBb;EACA0F,EAAAA,QAAQ,EAAE,EArBG;EAuBb;EACAmE,EAAAA,MAAM,EAAE,CAxBK;EAyBbqE,EAAAA,KAAK,EAAE,KAzBM;EA2Bb;EACAlE,EAAAA,QAAQ,EAAE,IA5BG;EA8Bb;EACA;EACAyF,EAAAA,eAAe,EAAE,IAhCJ;EAkCb;EACAJ,EAAAA,UAAU,EAAE,IAnCC;EAqCb;EACAqG,EAAAA,YAAY,EAAE,IAtCD;EAwCb;EACAC,EAAAA,KAAK,EAAE,MAzCM;EA2Cb;EACAC,EAAAA,WAAW,EAAE,IA5CA;EA8Cb;EACAC,EAAAA,YAAY,EAAE,IA/CD;EAiDb;EACAC,EAAAA,UAAU,EAAE,KAlDC;EAoDb;EACAC,EAAAA,kBAAkB,EAAE,IArDP;EAuDb;EACAhP,EAAAA,UAAU,EAAE,IAxDC;EAyDb0D,EAAAA,UAAU,EAAE,MAzDC;EA0Db/B,EAAAA,OAAO,EAAE,qCA1DI;EA4Db;EACAjG,EAAAA,UAAU,EAAE,sCA7DC;EA+Db;EACAH,EAAAA,OAAO,EAAE;EACLyN,IAAAA,OAAO,EAAE,GADJ;EAEL3Z,IAAAA,OAAO,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,GAA/B,EAAoC,GAApC,EAAyC,GAAzC,EAA8C,GAA9C,EAAmD,GAAnD;EAFJ,GAhEI;EAqEb;EACA4f,EAAAA,IAAI,EAAE;EACFhC,IAAAA,MAAM,EAAE,KADN;EAGF;;EAHE,GAtEO;EA4Eb;EACApG,EAAAA,KAAK,EAAE;EACHqI,IAAAA,QAAQ,EAAE,CADP;EAEH7f,IAAAA,OAAO,EAAE,CAAC,GAAD,EAAM,IAAN,EAAY,CAAZ,EAAe,IAAf,EAAqB,GAArB,EAA0B,IAA1B,EAAgC,CAAhC;EAFN,GA7EM;EAkFb;EACA8f,EAAAA,QAAQ,EAAE;EACNtY,IAAAA,OAAO,EAAE,IADH;EAENuY,IAAAA,MAAM,EAAE;EAFF,GAnFG;EAwFb;EACAvH,EAAAA,QAAQ,EAAE;EACNpG,IAAAA,QAAQ,EAAE,KADJ;EAENoB,IAAAA,IAAI,EAAE;EAFA,GAzFG;EA8Fb;EACAJ,EAAAA,QAAQ,EAAE;EACNwK,IAAAA,MAAM,EAAE,KADF;EAENpD,IAAAA,QAAQ,EAAE,MAFJ;EAGN;EACA;EACAxJ,IAAAA,MAAM,EAAE;EALF,GA/FG;EAuGb;EACAqC,EAAAA,UAAU,EAAE;EACR5D,IAAAA,OAAO,EAAE,IADD;EACO;EACfuQ,IAAAA,QAAQ,EAAE,IAFF;EAEQ;EAChBC,IAAAA,SAAS,EAAE,KAHH;;EAAA,GAxGC;EA8Gb;EACA9T,EAAAA,OAAO,EAAE;EACLsD,IAAAA,OAAO,EAAE,IADJ;EAEL9L,IAAAA,GAAG,EAAE;EAFA,GA/GI;EAoHb;EACAyO,EAAAA,QAAQ,EAAE,CACN,YADM;EAGN;EACA,QAJM;EAMN,YANM,EAON,cAPM,EAQN,MARM,EASN,QATM,EAUN,UAVM,EAWN,UAXM,EAYN,KAZM,EAaN,SAbM;EAeN,cAfM,CArHG;EAsIbe,EAAAA,QAAQ,EAAE,CAAC,UAAD,EAAa,SAAb,EAAwB,OAAxB,CAtIG;EAwIb;EACA9D,EAAAA,IAAI,EAAE;EACF0D,IAAAA,OAAO,EAAE,SADP;EAEFC,IAAAA,MAAM,EAAE,oBAFN;EAGFhH,IAAAA,IAAI,EAAE,MAHJ;EAIF8G,IAAAA,KAAK,EAAE,OAJL;EAKFG,IAAAA,WAAW,EAAE,qBALX;EAMFO,IAAAA,IAAI,EAAE,MANJ;EAOF0M,IAAAA,SAAS,EAAE,6BAPT;EAQFlK,IAAAA,MAAM,EAAE,QARN;EASFoC,IAAAA,QAAQ,EAAE,UATR;EAUFzM,IAAAA,WAAW,EAAE,cAVX;EAWFiI,IAAAA,QAAQ,EAAE,UAXR;EAYFH,IAAAA,MAAM,EAAE,QAZN;EAaFP,IAAAA,IAAI,EAAE,MAbJ;EAcFiN,IAAAA,MAAM,EAAE,QAdN;EAeFC,IAAAA,cAAc,EAAE,iBAfd;EAgBFC,IAAAA,eAAe,EAAE,kBAhBf;EAiBFtE,IAAAA,QAAQ,EAAE,UAjBR;EAkBFuE,IAAAA,eAAe,EAAE,kBAlBf;EAmBFC,IAAAA,cAAc,EAAE,iBAnBd;EAoBFC,IAAAA,UAAU,EAAE,oBApBV;EAqBFpN,IAAAA,QAAQ,EAAE,UArBR;EAsBFD,IAAAA,QAAQ,EAAE,UAtBR;EAuBFsN,IAAAA,QAAQ,EAAE,0BAvBR;EAwBFjJ,IAAAA,KAAK,EAAE,OAxBL;EAyBFkJ,IAAAA,MAAM,EAAE,QAzBN;EA0BFxU,IAAAA,OAAO,EAAE,SA1BP;EA2BF0T,IAAAA,IAAI,EAAE,MA3BJ;EA4BFpa,IAAAA,KAAK,EAAE,OA5BL;EA6BFmb,IAAAA,GAAG,EAAE,KA7BH;EA8BFC,IAAAA,GAAG,EAAE,KA9BH;EA+BFC,IAAAA,KAAK,EAAE,OA/BL;EAgCFC,IAAAA,QAAQ,EAAE,UAhCR;EAiCFrR,IAAAA,OAAO,EAAE,SAjCP;EAkCFsR,IAAAA,aAAa,EAAE,IAlCb;EAmCFC,IAAAA,YAAY,EAAE;EACV,YAAM,IADI;EAEV,YAAM,IAFI;EAGV,YAAM,IAHI;EAIV,WAAK,IAJK;EAKV,WAAK,IALK;EAMV,WAAK;EANK;EAnCZ,GAzIO;EAsLb;EACA3E,EAAAA,IAAI,EAAE;EACFN,IAAAA,QAAQ,EAAE,IADR;EAEF5M,IAAAA,KAAK,EAAE;EACH8R,MAAAA,GAAG,EAAE,wCADF;EAEHC,MAAAA,MAAM,EAAE,wCAFL;EAGHpX,MAAAA,GAAG,EAAE;EAHF,KAFL;EAOFsF,IAAAA,OAAO,EAAE;EACL6R,MAAAA,GAAG,EAAE,oCADA;EAELnX,MAAAA,GAAG,EACC;EAHC,KAPP;EAYFqX,IAAAA,SAAS,EAAE;EACPF,MAAAA,GAAG,EAAE;EADE;EAZT,GAvLO;EAwMb;EACA5J,EAAAA,SAAS,EAAE;EACP7D,IAAAA,IAAI,EAAE,IADC;EAEPxH,IAAAA,IAAI,EAAE,IAFC;EAGP8G,IAAAA,KAAK,EAAE,IAHA;EAIPC,IAAAA,OAAO,EAAE,IAJF;EAKPC,IAAAA,MAAM,EAAE,IALD;EAMPC,IAAAA,WAAW,EAAE,IANN;EAOPC,IAAAA,IAAI,EAAE,IAPC;EAQPO,IAAAA,MAAM,EAAE,IARD;EASPL,IAAAA,QAAQ,EAAE,IATH;EAUP2I,IAAAA,QAAQ,EAAE,IAVH;EAWP1I,IAAAA,UAAU,EAAE,IAXL;EAYPpJ,IAAAA,GAAG,EAAE,IAZE;EAaPE,IAAAA,OAAO,EAAE,IAbF;EAcPqN,IAAAA,KAAK,EAAE,IAdA;EAePtL,IAAAA,OAAO,EAAE,IAfF;EAgBP0T,IAAAA,IAAI,EAAE,IAhBC;EAiBPpF,IAAAA,QAAQ,EAAE;EAjBH,GAzME;EA6Nb;EACA7Z,EAAAA,MAAM,EAAE;EAEJ;EACA,SAHI,EAIJ,UAJI,EAKJ,SALI,EAMJ,SANI,EAOJ,SAPI,EAQJ,SARI,EASJ,gBATI,EAUJ,WAVI,EAWJ,YAXI,EAYJ,gBAZI,EAaJ,YAbI,EAcJ,cAdI,EAeJ,MAfI,EAgBJ,OAhBI,EAiBJ,OAjBI,EAkBJ,SAlBI,EAmBJ,QAnBI,EAoBJ,SApBI,EAqBJ,YArBI,EAsBJ,WAtBI;EAyBJ,YAzBI,EA0BJ,iBA1BI,EA2BJ,gBA3BI,EA4BJ,iBA5BI,EA6BJ,kBA7BI,EA8BJ,gBA9BI,EA+BJ,gBA/BI,EAgCJ,eAhCI,EAiCJ,OAjCI;EAoCJ,eApCI;EAuCJ,iBAvCI;EA0CJ,aA1CI,EA2CJ,iBA3CI,EA4CJ,kBA5CI,EA6CJ,WA7CI,EA8CJ,aA9CI,EA+CJ,aA/CI,EAgDJ,gBAhDI,EAiDJ,eAjDI,EAkDJ,UAlDI,CA9NK;EAmRb;EACA;EACAiS,EAAAA,SAAS,EAAE;EACPwO,IAAAA,QAAQ,EAAE,4CADH;EAEP9e,IAAAA,SAAS,EAAE,OAFJ;EAGP8P,IAAAA,QAAQ,EAAE;EACN9P,MAAAA,SAAS,EAAE,IADL;EAENG,MAAAA,OAAO,EAAE;EAFH,KAHH;EAOPma,IAAAA,MAAM,EAAE,aAPD;EAQP/J,IAAAA,OAAO,EAAE;EACL7G,MAAAA,IAAI,EAAE,oBADD;EAEL8G,MAAAA,KAAK,EAAE,qBAFF;EAGLC,MAAAA,OAAO,EAAE,uBAHJ;EAILC,MAAAA,MAAM,EAAE,sBAJH;EAKLC,MAAAA,WAAW,EAAE,4BALR;EAMLC,MAAAA,IAAI,EAAE,oBAND;EAOLE,MAAAA,QAAQ,EAAE,wBAPL;EAQL2I,MAAAA,QAAQ,EAAE,wBARL;EASL1I,MAAAA,UAAU,EAAE,0BATP;EAULpJ,MAAAA,GAAG,EAAE,mBAVA;EAWLE,MAAAA,OAAO,EAAE,uBAXJ;EAYLgJ,MAAAA,QAAQ,EAAE,wBAZL;EAaLyM,MAAAA,IAAI,EAAE;EAbD,KARF;EAuBPrM,IAAAA,MAAM,EAAE;EACJC,MAAAA,IAAI,EAAE,oBADF;EAEJC,MAAAA,MAAM,EAAE,sBAFJ;EAGJ+D,MAAAA,KAAK,EAAE,qBAHH;EAIJgD,MAAAA,QAAQ,EAAE,wBAJN;EAKJtO,MAAAA,OAAO,EAAE;EALL,KAvBD;EA8BPwH,IAAAA,OAAO,EAAE;EACL/H,MAAAA,WAAW,EAAE,sBADR;EAELiI,MAAAA,QAAQ,EAAE,uBAFL;EAGLD,MAAAA,MAAM,EAAE,yBAHH;EAILiM,MAAAA,IAAI,EAAE,uBAJD;EAI0B;EAC/BnM,MAAAA,MAAM,EAAE;EALH,KA9BF;EAqCPH,IAAAA,QAAQ,EAAE,iBArCH;EAsCPF,IAAAA,QAAQ,EAAE,iBAtCH;EAuCP8L,IAAAA,OAAO,EAAE,gBAvCF;EAwCPlK,IAAAA,IAAI,EAAE;EACF9I,MAAAA,OAAO,EAAE;EADP;EAxCC,GArRE;EAkUb;EACAlE,EAAAA,UAAU,EAAE;EACRlH,IAAAA,IAAI,EAAE,WADE;EAER6I,IAAAA,QAAQ,EAAE,WAFF;EAGRF,IAAAA,KAAK,EAAE,qBAHC;EAIR6U,IAAAA,KAAK,EAAE,mBAJC;EAKR+C,IAAAA,cAAc,EAAE,8BALR;EAMRC,IAAAA,MAAM,EAAE,cANA;EAORC,IAAAA,aAAa,EAAE,sBAPP;EAQRC,IAAAA,GAAG,EAAE,WARG;EASRjM,IAAAA,OAAO,EAAE,eATD;EAURoH,IAAAA,cAAc,EAAE,wBAVR;EAWR8E,IAAAA,OAAO,EAAE,eAXD;EAYR7V,IAAAA,MAAM,EAAE,cAZA;EAaR8V,IAAAA,OAAO,EAAE,eAbD;EAcRC,IAAAA,OAAO,EAAE,eAdD;EAeRC,IAAAA,KAAK,EAAE,aAfC;EAgBR9N,IAAAA,OAAO,EAAE,eAhBD;EAiBR+K,IAAAA,IAAI,EAAE,YAjBE;EAkBRhZ,IAAAA,MAAM,EAAE,eAlBA;EAmBR4Z,IAAAA,YAAY,EAAE,qBAnBN;EAoBRpW,IAAAA,KAAK,EAAE,cApBC;EAqBRwY,IAAAA,OAAO,EAAE,gBArBD;EAsBRC,IAAAA,WAAW,EAAE,eAtBL;EAuBRC,IAAAA,YAAY,EAAE,qBAvBN;EAwBRrO,IAAAA,OAAO,EAAE;EACL5B,MAAAA,IAAI,EAAE;EADD,KAxBD;EA2BRkD,IAAAA,IAAI,EAAE;EACFtR,MAAAA,KAAK,EAAE,mBADL;EAEFqR,MAAAA,KAAK,EAAE,aAFL;EAGFtE,MAAAA,IAAI,EAAE;EAHJ,KA3BE;EAgCR2C,IAAAA,QAAQ,EAAE;EACN3D,MAAAA,OAAO,EAAE,wBADH;EAENmO,MAAAA,MAAM,EAAE;EAFF,KAhCF;EAoCRvK,IAAAA,UAAU,EAAE;EACR5D,MAAAA,OAAO,EAAE,0BADD;EAERuQ,MAAAA,QAAQ,EAAE;EAFF,KApCJ;EAwCR/V,IAAAA,GAAG,EAAE;EACDlK,MAAAA,SAAS,EAAE,qBADV;EAED6d,MAAAA,MAAM,EAAE;EAFP,KAxCG;EA4CRzT,IAAAA,OAAO,EAAE;EACLpK,MAAAA,SAAS,EAAE,yBADN;EAEL6d,MAAAA,MAAM,EAAE;EAFH,KA5CD;EAgDR9V,IAAAA,QAAQ,EAAE;EAhDF,GAnUC;EAsXb;EACAvE,EAAAA,UAAU,EAAE;EACR+a,IAAAA,KAAK,EAAE;EACH3U,MAAAA,QAAQ,EAAE,oBADP;EAEHhE,MAAAA,EAAE,EAAE;EAFD;EADC,GAvXC;EA8Xb;EACApH,EAAAA,IAAI,EAAE;EACFyjB,IAAAA,MAAM,EAAE;EADN,GA/XO;EAmYb;EACA;EACAR,EAAAA,GAAG,EAAE;EACD/R,IAAAA,OAAO,EAAE,KADR;EAEDwS,IAAAA,WAAW,EAAE;EAFZ;EArYQ,CAAjB;;ECJA;EACA;EACA;AAEA,EAAO,IAAMC,SAAS,GAAG;EACrBhX,EAAAA,KAAK,EAAE,OADc;EAErBkE,EAAAA,OAAO,EAAE,SAFY;EAGrBD,EAAAA,KAAK,EAAE;EAHc,CAAlB;AAMP,EAAO,IAAMgT,KAAK,GAAG;EACjB3Y,EAAAA,KAAK,EAAE,OADU;EAEjBC,EAAAA,KAAK,EAAE;EAFU,CAAd;EAKP;;;;;AAIA,EAAO,SAAS2Y,gBAAT,CAA0BxiB,GAA1B,EAA+B;EAClC;EACA,MAAI,wDAAwDoJ,IAAxD,CAA6DpJ,GAA7D,CAAJ,EAAuE;EACnE,WAAOsiB,SAAS,CAAC9S,OAAjB;EACH,GAJiC;;;EAOlC,MAAI,wDAAwDpG,IAAxD,CAA6DpJ,GAA7D,CAAJ,EAAuE;EACnE,WAAOsiB,SAAS,CAAC/S,KAAjB;EACH;;EAED,SAAO,IAAP;EACH;;EC/BD;EACA;EACA;EAEA,IAAMkT,IAAI,GAAG,SAAPA,IAAO,GAAM,EAAnB;;MAEqBC;;;EACjB,qBAA6B;EAAA,QAAjB7S,OAAiB,uEAAP,KAAO;;EAAA;;EACzB,SAAKA,OAAL,GAAe1R,MAAM,CAACwkB,OAAP,IAAkB9S,OAAjC;;EAEA,QAAI,KAAKA,OAAT,EAAkB;EACd,WAAKlD,GAAL,CAAS,mBAAT;EACH;EACJ;;;;0BAES;EACN;EACA,aAAO,KAAKkD,OAAL,GAAe1S,QAAQ,CAACyJ,SAAT,CAAmB8Q,IAAnB,CAAwBpW,IAAxB,CAA6BqhB,OAAO,CAAChW,GAArC,EAA0CgW,OAA1C,CAAf,GAAoEF,IAA3E;EACH;;;0BAEU;EACP;EACA,aAAO,KAAK5S,OAAL,GAAe1S,QAAQ,CAACyJ,SAAT,CAAmB8Q,IAAnB,CAAwBpW,IAAxB,CAA6BqhB,OAAO,CAACvO,IAArC,EAA2CuO,OAA3C,CAAf,GAAqEF,IAA5E;EACH;;;0BAEW;EACR;EACA,aAAO,KAAK5S,OAAL,GAAe1S,QAAQ,CAACyJ,SAAT,CAAmB8Q,IAAnB,CAAwBpW,IAAxB,CAA6BqhB,OAAO,CAACxO,KAArC,EAA4CwO,OAA5C,CAAf,GAAsEF,IAA7E;EACH;;;;;;EChBL,SAASG,QAAT,GAAoB;EAChB,MAAI,CAAC,KAAK/S,OAAV,EAAmB;EACf;EACH,GAHe;;;EAMhB,MAAM+F,MAAM,GAAG,KAAK/J,MAAL,CAAYpJ,QAAZ,CAAqBwQ,OAArB,CAA6BQ,UAA5C;;EACA,MAAI3S,EAAE,CAACpB,OAAH,CAAWkW,MAAX,CAAJ,EAAwB;EACpBA,IAAAA,MAAM,CAACuC,OAAP,GAAiB,KAAK6F,MAAtB;EACH,GATe;;;EAYhBpc,EAAAA,YAAY,CAACN,IAAb,CAAkB,KAAKuK,MAAvB,EAA+B,KAAKvH,MAApC,EAA4C,KAAK0Z,MAAL,GAAc,iBAAd,GAAkC,gBAA9E,EAAgG,IAAhG,EAZgB;;EAehB,MAAI,CAACjV,OAAO,CAACU,KAAb,EAAoB;EAChBnC,IAAAA,SAAS,CAAChG,IAAV,CAAe,KAAKuK,MAApB,EAA4B,KAAKvH,MAAjC,EAAyC,KAAK0Z,MAA9C;EACH;EACJ;;EAED,SAAS6E,cAAT,GAAwC;EAAA;;EAAA,MAAhBliB,MAAgB,uEAAP,KAAO;;EACpC;EACA,MAAIA,MAAJ,EAAY;EACR,SAAKmiB,cAAL,GAAsB;EAClBC,MAAAA,CAAC,EAAE5kB,MAAM,CAAC6kB,OAAP,IAAkB,CADH;EAElBC,MAAAA,CAAC,EAAE9kB,MAAM,CAAC+kB,OAAP,IAAkB;EAFH,KAAtB;EAIH,GALD,MAKO;EACH/kB,IAAAA,MAAM,CAACglB,QAAP,CAAgB,KAAKL,cAAL,CAAoBC,CAApC,EAAuC,KAAKD,cAAL,CAAoBG,CAA3D;EACH,GATmC;;;EAYpC9e,EAAAA,QAAQ,CAACmN,IAAT,CAAc3I,KAAd,CAAoBya,QAApB,GAA+BziB,MAAM,GAAG,QAAH,GAAc,EAAnD,CAZoC;;EAepCyF,EAAAA,WAAW,CAAC,KAAK9B,MAAN,EAAc,KAAKuH,MAAL,CAAY1D,MAAZ,CAAmBC,UAAnB,CAA8BqL,UAA9B,CAAyC2M,QAAvD,EAAiEzf,MAAjE,CAAX,CAfoC;;EAkBpC,MAAIoI,OAAO,CAACU,KAAZ,EAAmB;EACf,QAAI4Z,QAAQ,GAAGlf,QAAQ,CAACmf,IAAT,CAAcjc,aAAd,CAA4B,uBAA5B,CAAf;EACA,QAAMkc,QAAQ,GAAG,oBAAjB,CAFe;;EAKf,QAAI,CAACF,QAAL,EAAe;EACXA,MAAAA,QAAQ,GAAGlf,QAAQ,CAACF,aAAT,CAAuB,MAAvB,CAAX;EACAof,MAAAA,QAAQ,CAACrf,YAAT,CAAsB,MAAtB,EAA8B,UAA9B;EACH,KARc;;;EAWf,QAAMwf,WAAW,GAAG1iB,EAAE,CAAChC,MAAH,CAAUukB,QAAQ,CAAC3R,OAAnB,KAA+B2R,QAAQ,CAAC3R,OAAT,CAAiB3K,QAAjB,CAA0Bwc,QAA1B,CAAnD;;EAEA,QAAI5iB,MAAJ,EAAY;EACR,WAAK8iB,eAAL,GAAuB,CAACD,WAAxB;;EAEA,UAAI,CAACA,WAAL,EAAkB;EACdH,QAAAA,QAAQ,CAAC3R,OAAT,eAAwB6R,QAAxB;EACH;EACJ,KAND,MAMO,IAAI,KAAKE,eAAT,EAA0B;EAC7BJ,MAAAA,QAAQ,CAAC3R,OAAT,GAAmB2R,QAAQ,CAAC3R,OAAT,CACd1Q,KADc,CACR,GADQ,EAEd6C,MAFc,CAEP,UAAA6f,IAAI;EAAA,eAAIA,IAAI,CAACne,IAAL,OAAgBge,QAApB;EAAA,OAFG,EAGdtO,IAHc,CAGT,GAHS,CAAnB;EAIH,KAxBc;;;EA2BfzS,IAAAA,UAAU,CAAC;EAAA,aAAMqG,OAAO,CAAC,KAAI,CAACvE,MAAN,CAAb;EAAA,KAAD,EAA6B,GAA7B,CAAV;EACH,GA9CmC;;;EAiDpCse,EAAAA,QAAQ,CAACthB,IAAT,CAAc,IAAd;EACH;;MAEKqiB;;;EACF,sBAAY9X,MAAZ,EAAoB;EAAA;;EAAA;;EAChB;EACA,SAAKA,MAAL,GAAcA,MAAd,CAFgB;;EAKhB,SAAKgC,MAAL,GAAc8V,UAAU,CAAC9V,MAAzB;EACA,SAAK0V,QAAL,GAAgBI,UAAU,CAACJ,QAA3B,CANgB;;EAShB,SAAKT,cAAL,GAAsB;EAAEC,MAAAA,CAAC,EAAE,CAAL;EAAQE,MAAAA,CAAC,EAAE;EAAX,KAAtB,CATgB;EAYhB;;EACA5hB,IAAAA,EAAE,CAACC,IAAH,CACI,KAAKuK,MADT,EAEI1H,QAFJ,EAGI,KAAK0J,MAAL,KAAgB,IAAhB,GAAuB,oBAAvB,aAAiD,KAAKA,MAAtD,qBAHJ,EAII,YAAM;EACF;EACA+U,MAAAA,QAAQ,CAACthB,IAAT,CAAc,MAAd;EACH,KAPL,EAbgB;;EAwBhBD,IAAAA,EAAE,CAACC,IAAH,CAAQ,KAAKuK,MAAb,EAAqB,KAAKA,MAAL,CAAYpJ,QAAZ,CAAqBC,SAA1C,EAAqD,UAArD,EAAiE,UAAA9C,KAAK,EAAI;EACtE;EACA,UAAIkB,EAAE,CAACpB,OAAH,CAAW,MAAI,CAACmM,MAAL,CAAYpJ,QAAZ,CAAqB+P,QAAhC,KAA6C,MAAI,CAAC3G,MAAL,CAAYpJ,QAAZ,CAAqB+P,QAArB,CAA8B/L,QAA9B,CAAuC7G,KAAK,CAAC0E,MAA7C,CAAjD,EAAuG;EACnG;EACH;;EAED,MAAA,MAAI,CAAC3D,MAAL;EACH,KAPD,EAxBgB;;EAkChB,SAAKyQ,MAAL;EACH;;;;;EAwED;+BACS;EACL,UAAI,KAAKvB,OAAT,EAAkB;EACd,aAAKhE,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,WAAyBgX,UAAU,CAACC,MAAX,GAAoB,QAApB,GAA+B,UAAxD;EACH,OAFD,MAEO;EACH,aAAK/X,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,CAAsB,gDAAtB;EACH,OALI;;;EAQLvG,MAAAA,WAAW,CAAC,KAAKyF,MAAL,CAAYpJ,QAAZ,CAAqBC,SAAtB,EAAiC,KAAKmJ,MAAL,CAAY1D,MAAZ,CAAmBC,UAAnB,CAA8BqL,UAA9B,CAAyC5D,OAA1E,EAAmF,KAAKA,OAAxF,CAAX;EACH;;;;8BAGO;EACJ,UAAI,CAAC,KAAKA,OAAV,EAAmB;EACf;EACH,OAHG;;;EAMJ,UAAI9G,OAAO,CAACU,KAAR,IAAiB,KAAKoC,MAAL,CAAY1D,MAAZ,CAAmBsL,UAAnB,CAA8B4M,SAAnD,EAA8D;EAC1D,aAAK/b,MAAL,CAAYuf,qBAAZ;EACH,OAFD,MAEO,IAAI,CAACF,UAAU,CAACC,MAAhB,EAAwB;EAC3Bf,QAAAA,cAAc,CAACvhB,IAAf,CAAoB,IAApB,EAA0B,IAA1B;EACH,OAFM,MAEA,IAAI,CAAC,KAAKuM,MAAV,EAAkB;EACrB,aAAKvJ,MAAL,CAAYwf,iBAAZ;EACH,OAFM,MAEA,IAAI,CAAChjB,EAAE,CAACb,KAAH,CAAS,KAAK4N,MAAd,CAAL,EAA4B;EAC/B,aAAKvJ,MAAL,WAAe,KAAKuJ,MAApB,oBAAoC,KAAK0V,QAAzC;EACH;EACJ;;;;6BAGM;EACH,UAAI,CAAC,KAAK1T,OAAV,EAAmB;EACf;EACH,OAHE;;;EAMH,UAAI9G,OAAO,CAACU,KAAR,IAAiB,KAAKoC,MAAL,CAAY1D,MAAZ,CAAmBsL,UAAnB,CAA8B4M,SAAnD,EAA8D;EAC1D,aAAK/b,MAAL,CAAYyf,oBAAZ;EACA,aAAKlY,MAAL,CAAYO,IAAZ;EACH,OAHD,MAGO,IAAI,CAACuX,UAAU,CAACC,MAAhB,EAAwB;EAC3Bf,QAAAA,cAAc,CAACvhB,IAAf,CAAoB,IAApB,EAA0B,KAA1B;EACH,OAFM,MAEA,IAAI,CAAC,KAAKuM,MAAV,EAAkB;EACrB,SAAC1J,QAAQ,CAAC6f,gBAAT,IAA6B7f,QAAQ,CAACwc,cAAvC,EAAuDrf,IAAvD,CAA4D6C,QAA5D;EACH,OAFM,MAEA,IAAI,CAACrD,EAAE,CAACb,KAAH,CAAS,KAAK4N,MAAd,CAAL,EAA4B;EAC/B,YAAMoW,MAAM,GAAG,KAAKpW,MAAL,KAAgB,KAAhB,GAAwB,QAAxB,GAAmC,MAAlD;EACA1J,QAAAA,QAAQ,WAAI,KAAK0J,MAAT,SAAkBoW,MAAlB,SAA2B,KAAKV,QAAhC,EAAR;EACH;EACJ;;;;+BAGQ;EACL,UAAI,CAAC,KAAKvF,MAAV,EAAkB;EACd,aAAKkG,KAAL;EACH,OAFD,MAEO;EACH,aAAKC,IAAL;EACH;EACJ;;;EA1FD;0BACc;EACV,aACI,CAACR,UAAU,CAACC,MAAX,IAAqB,KAAK/X,MAAL,CAAY1D,MAAZ,CAAmBsL,UAAnB,CAA8B2M,QAApD,KACA,KAAKvU,MAAL,CAAY1D,MAAZ,CAAmBsL,UAAnB,CAA8B5D,OAD9B,IAEA,KAAKhE,MAAL,CAAY1L,SAAZ,CAAsBgK,EAFtB,IAGA,KAAK0B,MAAL,CAAY2R,OAJhB;EAMH;;;;0BAGY;EACT,UAAI,CAAC,KAAK3N,OAAV,EAAmB;EACf,eAAO,KAAP;EACH,OAHQ;;;EAMT,UAAI,CAAC8T,UAAU,CAACC,MAAhB,EAAwB;EACpB,eAAOld,QAAQ,CAAC,KAAKpC,MAAN,EAAc,KAAKuH,MAAL,CAAY1D,MAAZ,CAAmBC,UAAnB,CAA8BqL,UAA9B,CAAyC2M,QAAvD,CAAf;EACH;;EAED,UAAM1gB,OAAO,GAAG,CAAC,KAAKmO,MAAN,GAAe1J,QAAQ,CAACigB,iBAAxB,GAA4CjgB,QAAQ,WAAI,KAAK0J,MAAT,SAAkB,KAAK0V,QAAvB,aAApE;EAEA,aAAO7jB,OAAO,KAAK,KAAK4E,MAAxB;EACH;;;;0BAGY;EACT,aAAOyE,OAAO,CAACU,KAAR,IAAiB,KAAKoC,MAAL,CAAY1D,MAAZ,CAAmBsL,UAAnB,CAA8B4M,SAA/C,GACD,KAAKxU,MAAL,CAAYhB,KADX,GAED,KAAKgB,MAAL,CAAYpJ,QAAZ,CAAqBC,SAF3B;EAGH;;;0BAnEmB;EAChB,aAAO,CAAC,EACJyB,QAAQ,CAACkgB,iBAAT,IACAlgB,QAAQ,CAACmgB,uBADT,IAEAngB,QAAQ,CAACogB,oBAFT,IAGApgB,QAAQ,CAACqgB,mBAJL,CAAR;EAMH;;;;0BAGmB;EAChB;EACA,UAAI1jB,EAAE,CAACxB,QAAH,CAAY6E,QAAQ,CAACwc,cAArB,CAAJ,EAA0C;EACtC,eAAO,EAAP;EACH,OAJe;;;EAOhB,UAAI7c,KAAK,GAAG,EAAZ;EACA,UAAM2gB,QAAQ,GAAG,CAAC,QAAD,EAAW,KAAX,EAAkB,IAAlB,CAAjB;EAEAA,MAAAA,QAAQ,CAACxJ,IAAT,CAAc,UAAAyJ,GAAG,EAAI;EACjB,YAAI5jB,EAAE,CAACxB,QAAH,CAAY6E,QAAQ,WAAIugB,GAAJ,oBAApB,KAAiD5jB,EAAE,CAACxB,QAAH,CAAY6E,QAAQ,WAAIugB,GAAJ,sBAApB,CAArD,EAAsG;EAClG5gB,UAAAA,KAAK,GAAG4gB,GAAR;EACA,iBAAO,IAAP;EACH;;EAED,eAAO,KAAP;EACH,OAPD;EASA,aAAO5gB,KAAP;EACH;;;0BAEqB;EAClB,aAAO,KAAK+J,MAAL,KAAgB,KAAhB,GAAwB,YAAxB,GAAuC,YAA9C;EACH;;;;;;EC7JL;EACA;EACA;EACA;EACA;AAEA,EAAe,SAAS8W,SAAT,CAAmBxY,GAAnB,EAAsC;EAAA,MAAdyY,QAAc,uEAAH,CAAG;EACjD,SAAO,IAAItiB,OAAJ,CAAY,UAACC,OAAD,EAAU+N,MAAV,EAAqB;EACpC,QAAMuU,KAAK,GAAG,IAAIC,KAAJ,EAAd;;EAEA,QAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;EAClB,aAAOF,KAAK,CAACG,MAAb;EACA,aAAOH,KAAK,CAACI,OAAb;EACA,OAACJ,KAAK,CAACK,YAAN,IAAsBN,QAAtB,GAAiCriB,OAAjC,GAA2C+N,MAA5C,EAAoDuU,KAApD;EACH,KAJD;;EAMAloB,IAAAA,MAAM,CAACqF,MAAP,CAAc6iB,KAAd,EAAqB;EAAEG,MAAAA,MAAM,EAAED,OAAV;EAAmBE,MAAAA,OAAO,EAAEF,OAA5B;EAAqC5Y,MAAAA,GAAG,EAAHA;EAArC,KAArB;EACH,GAVM,CAAP;EAWH;;EClBD;AACA,EAaA,IAAMhC,EAAE,GAAG;EACPgb,EAAAA,YADO,0BACQ;EACX/e,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAY6K,SAAZ,CAAsBtQ,SAAtB,CAAgC+C,OAAhC,CAAwC,GAAxC,EAA6C,EAA7C,CAA1B,EAA4E,IAA5E,CAAX;EACAW,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuB8Z,WAAjD,EAA8D,KAAK/hB,SAAL,CAAegK,EAA7E,CAAX;EACH,GAJM;EAMP;EACAkK,EAAAA,oBAPO,kCAO8B;EAAA,QAAhB1T,MAAgB,uEAAP,KAAO;;EACjC,QAAIA,MAAM,IAAI,KAAKiK,OAAnB,EAA4B;EACxB,WAAKC,KAAL,CAAW7G,YAAX,CAAwB,UAAxB,EAAoC,EAApC;EACH,KAFD,MAEO;EACH,WAAK6G,KAAL,CAAW1E,eAAX,CAA2B,UAA3B;EACH;EACJ,GAbM;EAeP;EACAif,EAAAA,KAhBO,mBAgBC;EAAA;;EACJ;EACA;EACA,SAAK3N,SAAL,CAAe5M,KAAf,GAHI;;EAMJ,QAAI,CAAC,KAAK1K,SAAL,CAAegK,EAApB,EAAwB;EACpB,WAAKuC,KAAL,CAAW0H,IAAX,kCAA0C,KAAKrK,QAA/C,cAA2D,KAAK7I,IAAhE,GADoB;;EAIpBiJ,MAAAA,EAAE,CAACkK,oBAAH,CAAwB/S,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC,EAJoB;;EAOpB;EACH,KAdG;;;EAiBJ,QAAI,CAACR,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAc+P,QAAzB,CAAL,EAAyC;EACrC;EACAA,MAAAA,QAAQ,CAACmK,MAAT,CAAgBrb,IAAhB,CAAqB,IAArB,EAFqC;;EAKrC,WAAKmW,SAAL,CAAejF,QAAf;EACH,KAvBG;;;EA0BJrI,IAAAA,EAAE,CAACkK,oBAAH,CAAwB/S,IAAxB,CAA6B,IAA7B,EA1BI;;EA6BJ,QAAI,KAAKsJ,OAAT,EAAkB;EACd4I,MAAAA,QAAQ,CAAC+J,KAAT,CAAejc,IAAf,CAAoB,IAApB;EACH,KA/BG;;;EAkCJ,SAAKuS,MAAL,GAAc,IAAd,CAlCI;;EAqCJ,SAAKqE,KAAL,GAAa,IAAb,CArCI;;EAwCJ,SAAKN,KAAL,GAAa,IAAb,CAxCI;;EA2CJ,SAAKoI,IAAL,GAAY,IAAZ,CA3CI;;EA8CJ,SAAK1T,OAAL,GAAe,IAAf,CA9CI;;EAiDJkG,IAAAA,QAAQ,CAACwF,YAAT,CAAsB1W,IAAtB,CAA2B,IAA3B,EAjDI;;EAoDJkR,IAAAA,QAAQ,CAAC2G,UAAT,CAAoB7X,IAApB,CAAyB,IAAzB,EApDI;;EAuDJ6I,IAAAA,EAAE,CAACkb,YAAH,CAAgB/jB,IAAhB,CAAqB,IAArB,EAvDI;;EA0DJ8E,IAAAA,WAAW,CACP,KAAK3D,QAAL,CAAcC,SADP,EAEP,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBiC,GAAvB,CAA2BlK,SAFpB,EAGPwJ,OAAO,CAACU,GAAR,IAAe,KAAKO,OAApB,IAA+B,KAAK4S,OAH7B,CAAX,CA1DI;;EAiEJpX,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBmC,OAAvB,CAA+BpK,SAAzD,EAAoEwJ,OAAO,CAACY,OAAR,IAAmB,KAAKK,OAA5F,CAAX,CAjEI;;EAoEJxE,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBqB,KAAjD,EAAwDV,OAAO,CAACU,KAAhE,CAAX,CApEI;;EAuEJrD,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuB6Z,OAAjD,EAA0D,KAAK/W,KAA/D,CAAX,CAvEI;;EA0EJ,SAAK7I,KAAL,GAAa,IAAb,CA1EI;;EA6EJG,IAAAA,UAAU,CAAC,YAAM;EACbZ,MAAAA,YAAY,CAACN,IAAb,CAAkB,KAAlB,EAAwB,KAAI,CAACuJ,KAA7B,EAAoC,OAApC;EACH,KAFS,EAEP,CAFO,CAAV,CA7EI;;EAkFJV,IAAAA,EAAE,CAACmb,QAAH,CAAYhkB,IAAZ,CAAiB,IAAjB,EAlFI;;EAqFJ,QAAI,KAAKogB,MAAT,EAAiB;EACbvX,MAAAA,EAAE,CAACob,SAAH,CAAajkB,IAAb,CAAkB,IAAlB,EAAwB,KAAKogB,MAA7B,EAAqC,KAArC,EAA4C9P,KAA5C,CAAkD,YAAM,EAAxD;EACH,KAvFG;EA0FJ;;;EACA,QAAI,KAAKzJ,MAAL,CAAY6L,QAAhB,EAA0B;EACtBxB,MAAAA,QAAQ,CAAC+G,cAAT,CAAwBjY,IAAxB,CAA6B,IAA7B;EACH;EACJ,GA9GM;EAgHP;EACAgkB,EAAAA,QAjHO,sBAiHI;EACP;EACA,QAAI9P,KAAK,GAAG/F,IAAI,CAACnP,GAAL,CAAS,MAAT,EAAiB,KAAK6H,MAAtB,CAAZ,CAFO;;EAKP,QAAIrH,EAAE,CAAChC,MAAH,CAAU,KAAKqJ,MAAL,CAAYwH,KAAtB,KAAgC,CAAC7O,EAAE,CAACb,KAAH,CAAS,KAAKkI,MAAL,CAAYwH,KAArB,CAArC,EAAkE;EAC9D6F,MAAAA,KAAK,gBAAS,KAAKrN,MAAL,CAAYwH,KAArB,CAAL;EACH,KAPM;;;EAUPtS,IAAAA,KAAK,CAAC0F,IAAN,CAAW,KAAKN,QAAL,CAAcwQ,OAAd,CAAsB7G,IAAtB,IAA8B,EAAzC,EAA6CnL,OAA7C,CAAqD,UAAA2U,MAAM,EAAI;EAC3DA,MAAAA,MAAM,CAAC5R,YAAP,CAAoB,YAApB,EAAkCwR,KAAlC;EACH,KAFD,EAVO;EAeP;;EACA,QAAI,KAAKkH,OAAT,EAAkB;EACd,UAAM4E,MAAM,GAAGla,UAAU,CAAC9F,IAAX,CAAgB,IAAhB,EAAsB,QAAtB,CAAf;;EAEA,UAAI,CAACR,EAAE,CAACpB,OAAH,CAAW4hB,MAAX,CAAL,EAAyB;EACrB;EACH,OALa;;;EAQd,UAAM3R,KAAK,GAAG,CAAC7O,EAAE,CAACb,KAAH,CAAS,KAAKkI,MAAL,CAAYwH,KAArB,CAAD,GAA+B,KAAKxH,MAAL,CAAYwH,KAA3C,GAAmD,OAAjE;EACA,UAAM3B,MAAM,GAAGyB,IAAI,CAACnP,GAAL,CAAS,YAAT,EAAuB,KAAK6H,MAA5B,CAAf;EAEAmZ,MAAAA,MAAM,CAACtd,YAAP,CAAoB,OAApB,EAA6BgK,MAAM,CAACvI,OAAP,CAAe,SAAf,EAA0BkK,KAA1B,CAA7B;EACH;EACJ,GA9IM;EAgJP;EACA6V,EAAAA,YAjJO,wBAiJMC,MAjJN,EAiJc;EACjBrf,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBuZ,aAAjD,EAAgE8D,MAAhE,CAAX;EACH,GAnJM;EAqJP;EACA;EACAF,EAAAA,SAvJO,qBAuJG7D,MAvJH,EAuJ2B;EAAA;;EAAA,QAAhB9gB,OAAgB,uEAAN,IAAM;;EAC9B;EACA,QAAIA,OAAO,IAAI,KAAK8gB,MAApB,EAA4B;EACxB,aAAOpf,OAAO,CAACgO,MAAR,CAAe,IAAIK,KAAJ,CAAU,oBAAV,CAAf,CAAP;EACH,KAJ6B;;;EAO9B,SAAK9F,KAAL,CAAW7G,YAAX,CAAwB,QAAxB,EAAkC0d,MAAlC,EAP8B;;EAU9B,WACIrf,KAAK,CACAf,IADL,CACU,IADV;EAAA,KAGKqB,IAHL,CAGU;EAAA,aAAMgiB,SAAS,CAACjD,MAAD,CAAf;EAAA,KAHV,EAIK9P,KAJL,CAIW,UAAA7G,GAAG,EAAI;EACV;EACA,UAAI2W,MAAM,KAAK,MAAI,CAACA,MAApB,EAA4B;EACxBvX,QAAAA,EAAE,CAACqb,YAAH,CAAgBlkB,IAAhB,CAAqB,MAArB,EAA2B,KAA3B;EACH,OAJS;;;EAMV,YAAMyJ,GAAN;EACH,KAXL,EAYKpI,IAZL,CAYU,YAAM;EACR;EACA,UAAI+e,MAAM,KAAK,MAAI,CAACA,MAApB,EAA4B;EACxB,cAAM,IAAI/Q,KAAJ,CAAU,gDAAV,CAAN;EACH;EACJ,KAjBL,EAkBKhO,IAlBL,CAkBU,YAAM;EACRhG,MAAAA,MAAM,CAACqF,MAAP,CAAc,MAAI,CAACS,QAAL,CAAcif,MAAd,CAAqB/Y,KAAnC,EAA0C;EACtC+c,QAAAA,eAAe,iBAAUhE,MAAV,OADuB;EAEtC;EACAiE,QAAAA,cAAc,EAAE;EAHsB,OAA1C;EAKAxb,MAAAA,EAAE,CAACqb,YAAH,CAAgBlkB,IAAhB,CAAqB,MAArB,EAA2B,IAA3B;EACA,aAAOogB,MAAP;EACH,KA1BL,CADJ;EA6BH,GA9LM;EAgMP;EACA2D,EAAAA,YAjMO,wBAiMMzlB,KAjMN,EAiMa;EAAA;;EAChB;EACAwG,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuByZ,OAAjD,EAA0D,KAAKA,OAA/D,CAAX;EACAzb,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuB4D,MAAjD,EAAyD,KAAKA,MAA9D,CAAX;EACA5F,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuB0Z,OAAjD,EAA0D,KAAKA,OAA/D,CAAX,CAJgB;;EAOhBzkB,IAAAA,KAAK,CAAC0F,IAAN,CAAW,KAAKN,QAAL,CAAcwQ,OAAd,CAAsB7G,IAAtB,IAA8B,EAAzC,EAA6CnL,OAA7C,CAAqD,UAAAqD,MAAM,EAAI;EAC3DA,MAAAA,MAAM,CAAC6T,OAAP,GAAiB,MAAI,CAAC0J,OAAtB;EACH,KAFD,EAPgB;;EAYhB,QAAI/gB,EAAE,CAAClB,KAAH,CAASA,KAAT,KAAmBA,KAAK,CAACsB,IAAN,KAAe,YAAtC,EAAoD;EAChD;EACH,KAde;;;EAiBhBiJ,IAAAA,EAAE,CAACyb,cAAH,CAAkBtkB,IAAlB,CAAuB,IAAvB;EACH,GAnNM;EAqNP;EACAukB,EAAAA,YAtNO,wBAsNMjmB,KAtNN,EAsNa;EAAA;;EAChB,SAAKmiB,OAAL,GAAe,CAAC,SAAD,EAAY,SAAZ,EAAuBhb,QAAvB,CAAgCnH,KAAK,CAACsB,IAAtC,CAAf,CADgB;;EAIhB4kB,IAAAA,YAAY,CAAC,KAAKC,MAAL,CAAYhE,OAAb,CAAZ,CAJgB;;EAOhB,SAAKgE,MAAL,CAAYhE,OAAZ,GAAsBvf,UAAU,CAAC,YAAM;EACnC;EACA4D,MAAAA,WAAW,CAAC,MAAI,CAAC3D,QAAL,CAAcC,SAAf,EAA0B,MAAI,CAACyF,MAAL,CAAYC,UAAZ,CAAuB2Z,OAAjD,EAA0D,MAAI,CAACA,OAA/D,CAAX,CAFmC;;EAKnC5X,MAAAA,EAAE,CAACyb,cAAH,CAAkBtkB,IAAlB,CAAuB,MAAvB;EACH,KAN+B,EAM7B,KAAKygB,OAAL,GAAe,GAAf,GAAqB,CANQ,CAAhC;EAOH,GApOM;EAsOP;EACA6D,EAAAA,cAvOO,0BAuOQvf,KAvOR,EAuOe;EAAA,QACVmM,WADU,GACG,KAAK/P,QADR,CACV+P,QADU;;EAGlB,QAAIA,WAAQ,IAAI,KAAKrK,MAAL,CAAY0X,YAA5B,EAA0C;EACtC;EACA,UAAMmG,eAAe,GAAI,KAAK9a,KAAL,IAAc,KAAK+a,YAAL,GAAoB,IAApB,GAA2BC,IAAI,CAACC,GAAL,EAAlE,CAFsC;;EAKtC,WAAKP,cAAL,CAAoBppB,OAAO,CAAC6J,KAAK,IAAI,KAAK0b,OAAd,IAAyB,KAAK/V,MAA9B,IAAwCwG,WAAQ,CAAC2F,OAAjD,IAA4D3F,WAAQ,CAACwP,KAArE,IAA8EgE,eAA/E,CAA3B;EACH;EACJ;EAjPM,CAAX;;MCFMI;;;EACF,qBAAYva,MAAZ,EAAoB;EAAA;;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACA,SAAKwa,OAAL,GAAe,IAAf;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EAEA,SAAKC,SAAL,GAAiB,KAAKA,SAAL,CAAe9O,IAAf,CAAoB,IAApB,CAAjB;EACA,SAAK0D,UAAL,GAAkB,KAAKA,UAAL,CAAgB1D,IAAhB,CAAqB,IAArB,CAAlB;EACA,SAAK+O,WAAL,GAAmB,KAAKA,WAAL,CAAiB/O,IAAjB,CAAsB,IAAtB,CAAnB;EACA,SAAKgP,UAAL,GAAkB,KAAKA,UAAL,CAAgBhP,IAAhB,CAAqB,IAArB,CAAlB;EACH;;;;;gCAGS9X,OAAO;EAAA,UACLiM,MADK,GACM,IADN,CACLA,MADK;EAAA,UAELpJ,QAFK,GAEQoJ,MAFR,CAELpJ,QAFK;EAGb,UAAMkkB,IAAI,GAAG/mB,KAAK,CAAC+H,OAAN,GAAgB/H,KAAK,CAAC+H,OAAtB,GAAgC/H,KAAK,CAAC6W,KAAnD;EACA,UAAM0B,OAAO,GAAGvY,KAAK,CAACsB,IAAN,KAAe,SAA/B;EACA,UAAM0lB,MAAM,GAAGzO,OAAO,IAAIwO,IAAI,KAAK,KAAKN,OAAxC,CALa;;EAQb,UAAIzmB,KAAK,CAACinB,MAAN,IAAgBjnB,KAAK,CAACknB,OAAtB,IAAiClnB,KAAK,CAACmnB,OAAvC,IAAkDnnB,KAAK,CAACkI,QAA5D,EAAsE;EAClE;EACH,OAVY;EAab;;;EACA,UAAI,CAAChH,EAAE,CAAC1B,MAAH,CAAUunB,IAAV,CAAL,EAAsB;EAClB;EACH,OAhBY;;;EAmBb,UAAMK,SAAS,GAAG,SAAZA,SAAY,GAAM;EACpB;EACAnb,QAAAA,MAAM,CAACE,WAAP,GAAsBF,MAAM,CAACmI,QAAP,GAAkB,EAAnB,IAA0B2S,IAAI,GAAG,EAAjC,CAArB;EACH,OAHD,CAnBa;EAyBb;;;EACA,UAAIxO,OAAJ,EAAa;EACT;EACA;EACA;EACA,YAAMvQ,OAAO,GAAGzD,QAAQ,CAAC0D,aAAzB;;EACA,YAAI/G,EAAE,CAACpB,OAAH,CAAWkI,OAAX,CAAJ,EAAyB;EAAA,cACb4Z,QADa,GACA3V,MAAM,CAAC1D,MAAP,CAAc6K,SADd,CACbwO,QADa;EAAA,cAEb5N,IAFa,GAEJnR,QAAQ,CAACkR,MAFL,CAEbC,IAFa;;EAIrB,cAAIhM,OAAO,KAAKgM,IAAZ,IAAoBjN,OAAO,CAACiB,OAAD,EAAU4Z,QAAV,CAA/B,EAAoD;EAChD;EACH;;EAED,cAAI5hB,KAAK,CAAC6W,KAAN,KAAgB,EAAhB,IAAsB9P,OAAO,CAACiB,OAAD,EAAU,4BAAV,CAAjC,EAA0E;EACtE;EACH;EACJ,SAhBQ;;;EAmBT,YAAMI,cAAc,GAAG,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,EAAyB,EAAzB,EAA6B,EAA7B,EAAiC,EAAjC,EAAqC,EAArC,EAAyC,EAAzC,EAA6C,EAA7C,EAAiD,EAAjD,EAAqD,EAArD,EAAyD,EAAzD,EAA6D,EAA7D,EAAiE,EAAjE,EAAqE,EAArE,EAAyE,EAAzE,EAA6E,EAA7E,EAAiF,EAAjF,CAAvB,CAnBS;;EAsBT,YAAIA,cAAc,CAACjB,QAAf,CAAwB4f,IAAxB,CAAJ,EAAmC;EAC/B/mB,UAAAA,KAAK,CAACoI,cAAN;EACApI,UAAAA,KAAK,CAAC8W,eAAN;EACH;;EAED,gBAAQiQ,IAAR;EACI,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACA,eAAK,EAAL;EACI;EACA,gBAAI,CAACC,MAAL,EAAa;EACTI,cAAAA,SAAS;EACZ;;EACD;;EAEJ,eAAK,EAAL;EACA,eAAK,EAAL;EACI;EACA,gBAAI,CAACJ,MAAL,EAAa;EACT/a,cAAAA,MAAM,CAACob,UAAP;EACH;;EACD;;EAEJ,eAAK,EAAL;EACI;EACApb,YAAAA,MAAM,CAACqb,cAAP,CAAsB,GAAtB;EACA;;EAEJ,eAAK,EAAL;EACI;EACArb,YAAAA,MAAM,CAACsb,cAAP,CAAsB,GAAtB;EACA;;EAEJ,eAAK,EAAL;EACI;EACA,gBAAI,CAACP,MAAL,EAAa;EACT/a,cAAAA,MAAM,CAACqM,KAAP,GAAe,CAACrM,MAAM,CAACqM,KAAvB;EACH;;EACD;;EAEJ,eAAK,EAAL;EACI;EACArM,YAAAA,MAAM,CAACub,OAAP;EACA;;EAEJ,eAAK,EAAL;EACI;EACAvb,YAAAA,MAAM,CAACuH,MAAP;EACA;;EAEJ,eAAK,EAAL;EACI;EACAvH,YAAAA,MAAM,CAAC4H,UAAP,CAAkB9S,MAAlB;EACA;;EAEJ,eAAK,EAAL;EACI;EACA,gBAAI,CAACimB,MAAL,EAAa;EACT/a,cAAAA,MAAM,CAACwb,cAAP;EACH;;EACD;;EAEJ,eAAK,EAAL;EACI;EACAxb,YAAAA,MAAM,CAACmU,IAAP,GAAc,CAACnU,MAAM,CAACmU,IAAtB;EACA;;EAEA;;;;;;;;;;EAYJ;EACI;EAlFR,SA3BS;EAiHT;;;EACA,YAAI,CAACnU,MAAM,CAAC4H,UAAP,CAAkB5D,OAAnB,IAA8BhE,MAAM,CAAC4H,UAAP,CAAkBuK,MAAhD,IAA0D2I,IAAI,KAAK,EAAvE,EAA2E;EACvE9a,UAAAA,MAAM,CAAC4H,UAAP,CAAkB9S,MAAlB;EACH,SApHQ;;;EAuHT,aAAK0lB,OAAL,GAAeM,IAAf;EACH,OAxHD,MAwHO;EACH,aAAKN,OAAL,GAAe,IAAf;EACH;EACJ;;;;iCAGUzmB,OAAO;EACd4S,MAAAA,QAAQ,CAAC4I,UAAT,CAAoB9Z,IAApB,CAAyB,KAAKuK,MAA9B,EAAsCjM,KAAtC;EACH;;;;mCAGY;EAAA,UACDiM,MADC,GACU,IADV,CACDA,MADC;EAAA,UAEDpJ,QAFC,GAEYoJ,MAFZ,CAEDpJ,QAFC;EAIToJ,MAAAA,MAAM,CAACX,KAAP,GAAe,IAAf,CAJS;;EAOT9E,MAAAA,WAAW,CAAC3D,QAAQ,CAACC,SAAV,EAAqBmJ,MAAM,CAAC1D,MAAP,CAAcC,UAAd,CAAyB6Z,OAA9C,EAAuD,IAAvD,CAAX;EACH;;;kCAEWriB,OAAO;EAAA,UACPiM,MADO,GACI,IADJ,CACPA,MADO;EAAA,UAEPpJ,QAFO,GAEMoJ,MAFN,CAEPpJ,QAFO;EAIfqjB,MAAAA,YAAY,CAAC,KAAKQ,UAAN,CAAZ,CAJe;;EAOf,UAAI1mB,KAAK,CAACsB,IAAN,KAAe,SAAf,IAA4BtB,KAAK,CAAC6W,KAAN,KAAgB,CAAhD,EAAmD;EAC/C;EACH,OATc;;;EAYf,UAAI7W,KAAK,CAACsB,IAAN,KAAe,SAAnB,EAA8B;EAC1B,aAAKqlB,WAAL,GAAmB3mB,KAAK,CAAC0nB,SAAzB;EACH,OAdc;;;EAiBf,UAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;EACxB,YAAM/hB,SAAS,GAAGqG,MAAM,CAAC1D,MAAP,CAAcC,UAAd,CAAyBF,QAA3C;EACA,YAAMkG,OAAO,GAAGjH,WAAW,CAAC7F,IAAZ,CAAiBuK,MAAjB,aAA6BrG,SAA7B,EAAhB;EACAY,QAAAA,WAAW,CAACgI,OAAD,EAAU5I,SAAV,EAAqB,KAArB,CAAX;EACH,OAJD,CAjBe;;;EAwBf,UAAMgiB,UAAU,GAAG5nB,KAAK,CAAC0nB,SAAN,GAAkB,KAAKf,WAAvB,IAAsC,EAAzD,CAxBe;;EA2Bf,UAAI3mB,KAAK,CAACsB,IAAN,KAAe,OAAf,IAA0B,CAACsmB,UAA/B,EAA2C;EACvC;EACH,OA7Bc;;;EAgCfD,MAAAA,aAAa,GAhCE;EAmCf;;EACA,WAAKjB,UAAL,GAAkB9jB,UAAU,CAAC,YAAM;EAC/B,YAAMoF,OAAO,GAAGzD,QAAQ,CAAC0D,aAAzB,CAD+B;;EAI/B,YAAI,CAACpF,QAAQ,CAACC,SAAT,CAAmB+D,QAAnB,CAA4BmB,OAA5B,CAAL,EAA2C;EACvC;EACH;;EAEDxB,QAAAA,WAAW,CAACjC,QAAQ,CAAC0D,aAAV,EAAyBgE,MAAM,CAAC1D,MAAP,CAAcC,UAAd,CAAyBF,QAAlD,EAA4D,IAA5D,CAAX;EACH,OAT2B,EASzB,EATyB,CAA5B;EAUH;;;;+BAGqB;EAAA,UAAfvH,MAAe,uEAAN,IAAM;EAAA,UACVkL,MADU,GACC,IADD,CACVA,MADU;;EAIlB,UAAIA,MAAM,CAAC1D,MAAP,CAAc+X,QAAd,CAAuBC,MAA3B,EAAmC;EAC/B1f,QAAAA,cAAc,CAACa,IAAf,CAAoBuK,MAApB,EAA4B1N,MAA5B,EAAoC,eAApC,EAAqD,KAAKqoB,SAA1D,EAAqE7lB,MAArE,EAA6E,KAA7E;EACH,OANiB;;;EASlBF,MAAAA,cAAc,CAACa,IAAf,CAAoBuK,MAApB,EAA4B1H,QAAQ,CAACmN,IAArC,EAA2C,OAA3C,EAAoD,KAAK8J,UAAzD,EAAqEza,MAArE,EATkB;;EAYlBa,MAAAA,IAAI,CAACF,IAAL,CAAUuK,MAAV,EAAkB1H,QAAQ,CAACmN,IAA3B,EAAiC,YAAjC,EAA+C,KAAKoV,UAApD,EAZkB;;EAelBjmB,MAAAA,cAAc,CAACa,IAAf,CAAoBuK,MAApB,EAA4B1H,QAAQ,CAACmN,IAArC,EAA2C,oBAA3C,EAAiE,KAAKmV,WAAtE,EAAmF9lB,MAAnF,EAA2F,KAA3F,EAAkG,IAAlG;EACH;;;;kCAGW;EAAA,UACAkL,MADA,GACW,IADX,CACAA,MADA;EAAA,UAEApJ,QAFA,GAEaoJ,MAFb,CAEApJ,QAFA;;EAKR,UAAI,CAACoJ,MAAM,CAAC1D,MAAP,CAAc+X,QAAd,CAAuBC,MAAxB,IAAkCtU,MAAM,CAAC1D,MAAP,CAAc+X,QAAd,CAAuBtY,OAA7D,EAAsE;EAClEvG,QAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBpJ,QAAQ,CAACC,SAAzB,EAAoC,eAApC,EAAqD,KAAK8jB,SAA1D,EAAqE,KAArE;EACH,OAPO;;;EAURnlB,MAAAA,EAAE,CAACC,IAAH,CACIuK,MADJ,EAEIpJ,QAAQ,CAACC,SAFb,EAGI,0EAHJ,EAII,UAAA9C,KAAK,EAAI;EAAA,YACG4S,WADH,GACgB/P,QADhB,CACG+P,QADH;;EAIL,YAAIA,WAAQ,IAAI5S,KAAK,CAACsB,IAAN,KAAe,iBAA/B,EAAkD;EAC9CsR,UAAAA,WAAQ,CAAC2F,OAAT,GAAmB,KAAnB;EACA3F,UAAAA,WAAQ,CAACwP,KAAT,GAAiB,KAAjB;EACH,SAPI;;;EAUL,YAAM3G,IAAI,GAAG,CAAC,YAAD,EAAe,WAAf,EAA4B,WAA5B,EAAyCtU,QAAzC,CAAkDnH,KAAK,CAACsB,IAAxD,CAAb;EAEA,YAAIumB,KAAK,GAAG,CAAZ;;EAEA,YAAIpM,IAAJ,EAAU;EACNlR,UAAAA,EAAE,CAACyb,cAAH,CAAkBtkB,IAAlB,CAAuBuK,MAAvB,EAA+B,IAA/B,EADM;;EAGN4b,UAAAA,KAAK,GAAG5b,MAAM,CAACX,KAAP,GAAe,IAAf,GAAsB,IAA9B;EACH,SAlBI;;;EAqBL4a,QAAAA,YAAY,CAACja,MAAM,CAACka,MAAP,CAAcvT,QAAf,CAAZ,CArBK;;EAwBL3G,QAAAA,MAAM,CAACka,MAAP,CAAcvT,QAAd,GAAyBhQ,UAAU,CAAC;EAAA,iBAAM2H,EAAE,CAACyb,cAAH,CAAkBtkB,IAAlB,CAAuBuK,MAAvB,EAA+B,KAA/B,CAAN;EAAA,SAAD,EAA8C4b,KAA9C,CAAnC;EACH,OA7BL;EA+BH;;;;8BAGO;EAAA,UACI5b,MADJ,GACe,IADf,CACIA,MADJ;EAAA,UAEIpJ,QAFJ,GAEiBoJ,MAFjB,CAEIpJ,QAFJ;;EAKJpB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,2BAA9B,EAA2D,UAAAjL,KAAK;EAAA,eAAI4S,QAAQ,CAAC2G,UAAT,CAAoB7X,IAApB,CAAyBuK,MAAzB,EAAiCjM,KAAjC,CAAJ;EAAA,OAAhE,EALI;;EAQJyB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,0CAA9B,EAA0E,UAAAjL,KAAK;EAAA,eAC3E4S,QAAQ,CAAC+G,cAAT,CAAwBjY,IAAxB,CAA6BuK,MAA7B,EAAqCjM,KAArC,CAD2E;EAAA,OAA/E,EARI;EAaJ;;EACAyB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,SAA9B,EAAyC,YAAM;EAC3C7E,QAAAA,YAAY,CAACvD,QAAQ,CAACoR,MAAV,EAAkB,CAAChI,MAAM,CAAC6b,QAA1B,CAAZ;EACA1hB,QAAAA,YAAY,CAACvD,QAAQ,CAACwQ,OAAT,CAAiBK,IAAlB,EAAwB,CAACzH,MAAM,CAAC6b,QAAhC,CAAZ;EACH,OAHD,EAdI;;EAoBJrmB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,OAA9B,EAAuC,YAAM;EACzC;EACA,YAAIgB,MAAM,CAACjB,OAAP,IAAkBiB,MAAM,CAAC2R,OAAzB,IAAoC3R,MAAM,CAAC1D,MAAP,CAAc2X,UAAtD,EAAkE;EAC9D;EACAjU,UAAAA,MAAM,CAACsH,OAAP;EACH;EACJ,OAND,EApBI;;EA6BJ9R,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,iCAA9B,EAAiE,UAAAjL,KAAK;EAAA,eAClE4S,QAAQ,CAAC4F,cAAT,CAAwB9W,IAAxB,CAA6BuK,MAA7B,EAAqCjM,KAArC,CADkE;EAAA,OAAtE,EA7BI;;EAkCJyB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,cAA9B,EAA8C,UAAAjL,KAAK;EAAA,eAAI4S,QAAQ,CAACwF,YAAT,CAAsB1W,IAAtB,CAA2BuK,MAA3B,EAAmCjM,KAAnC,CAAJ;EAAA,OAAnD,EAlCI;;EAqCJyB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,6CAA9B,EAA6E,UAAAjL,KAAK;EAAA,eAC9EuK,EAAE,CAACkb,YAAH,CAAgB/jB,IAAhB,CAAqBuK,MAArB,EAA6BjM,KAA7B,CAD8E;EAAA,OAAlF,EArCI;;EA0CJyB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,gCAA9B,EAAgE,UAAAjL,KAAK;EAAA,eAAIuK,EAAE,CAAC0b,YAAH,CAAgBvkB,IAAhB,CAAqBuK,MAArB,EAA6BjM,KAA7B,CAAJ;EAAA,OAArE,EA1CI;EA6CJ;;EACAyB,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,SAA9B,EAAyC,YAAM;EAC3C,YAAI,CAACgB,MAAM,CAAC+V,GAAZ,EAAiB;EACb;EACH,SAH0C;;;EAM3C,YAAI/V,MAAM,CAAC+V,GAAP,CAAW/R,OAAX,IAAsB,CAAChE,MAAM,CAAC+V,GAAP,CAAW+F,WAAtC,EAAmD;EAC/C;EACA9b,UAAAA,MAAM,CAAC+V,GAAP,CAAWgG,cAAX,CAA0BjlB,IAA1B,CAA+B;EAAA,mBAAMkJ,MAAM,CAAC+V,GAAP,CAAWxV,IAAX,EAAN;EAAA,WAA/B,EAAwDwF,KAAxD,CAA8D;EAAA,mBAAM/F,MAAM,CAACO,IAAP,EAAN;EAAA,WAA9D;EACH;EACJ,OAVD,EA9CI;;EA2DJ,UAAIP,MAAM,CAAC1L,SAAP,CAAiBgK,EAAjB,IAAuB0B,MAAM,CAAC1D,MAAP,CAAcyX,WAArC,IAAoD,CAAC/T,MAAM,CAACgc,OAAhE,EAAyE;EACrE;EACA,YAAMhlB,OAAO,GAAGuE,UAAU,CAAC9F,IAAX,CAAgBuK,MAAhB,aAA4BA,MAAM,CAAC1D,MAAP,CAAcC,UAAd,CAAyByB,KAArD,EAAhB,CAFqE;;EAKrE,YAAI,CAAC/I,EAAE,CAACpB,OAAH,CAAWmD,OAAX,CAAL,EAA0B;EACtB;EACH,SAPoE;;;EAUrExB,QAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBpJ,QAAQ,CAACC,SAAzB,EAAoC,OAApC,EAA6C,UAAA9C,KAAK,EAAI;EAClD,cAAMkD,OAAO,GAAG,CAACL,QAAQ,CAACC,SAAV,EAAqBG,OAArB,CAAhB,CADkD;;EAIlD,cAAI,CAACC,OAAO,CAACiE,QAAR,CAAiBnH,KAAK,CAAC0E,MAAvB,CAAD,IAAmC,CAACzB,OAAO,CAAC4D,QAAR,CAAiB7G,KAAK,CAAC0E,MAAvB,CAAxC,EAAwE;EACpE;EACH,WANiD;;;EASlD,cAAIuH,MAAM,CAACX,KAAP,IAAgBW,MAAM,CAAC1D,MAAP,CAAc0X,YAAlC,EAAgD;EAC5C;EACH;;EAED,cAAIhU,MAAM,CAACic,KAAX,EAAkB;EACdjc,YAAAA,MAAM,CAACsH,OAAP;EACAtH,YAAAA,MAAM,CAACO,IAAP;EACH,WAHD,MAGO;EACHP,YAAAA,MAAM,CAACob,UAAP;EACH;EACJ,SAnBD;EAoBH,OAzFG;;;EA4FJ,UAAIpb,MAAM,CAAC1L,SAAP,CAAiBgK,EAAjB,IAAuB0B,MAAM,CAAC1D,MAAP,CAAc4X,kBAAzC,EAA6D;EACzD1e,QAAAA,EAAE,CAACC,IAAH,CACIuK,MADJ,EAEIpJ,QAAQ,CAACI,OAFb,EAGI,aAHJ,EAII,UAAAjD,KAAK,EAAI;EACLA,UAAAA,KAAK,CAACoI,cAAN;EACH,SANL,EAOI,KAPJ;EASH,OAtGG;;;EAyGJ3G,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,cAA9B,EAA8C,YAAM;EAChD;EACAgB,QAAAA,MAAM,CAACU,OAAP,CAAeT,GAAf,CAAmB;EACf+H,UAAAA,MAAM,EAAEhI,MAAM,CAACgI,MADA;EAEfqE,UAAAA,KAAK,EAAErM,MAAM,CAACqM;EAFC,SAAnB;EAIH,OAND,EAzGI;;EAkHJ7W,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,YAA9B,EAA4C,YAAM;EAC9C;EACA2H,QAAAA,QAAQ,CAACoH,aAAT,CAAuBtY,IAAvB,CAA4BuK,MAA5B,EAAoC,OAApC,EAF8C;;;EAK9CA,QAAAA,MAAM,CAACU,OAAP,CAAeT,GAAf,CAAmB;EAAE8L,UAAAA,KAAK,EAAE/L,MAAM,CAAC+L;EAAhB,SAAnB;EACH,OAND,EAlHI;;EA2HJvW,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,eAA9B,EAA+C,UAAAjL,KAAK,EAAI;EACpD;EACA4S,QAAAA,QAAQ,CAACoH,aAAT,CAAuBtY,IAAvB,CAA4BuK,MAA5B,EAAoC,SAApC,EAA+C,IAA/C,EAAqDjM,KAAK,CAACkC,MAAN,CAAawK,OAAlE;EACH,OAHD,EA3HI;;EAiIJjL,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8B,qBAA9B,EAAqD,YAAM;EACvD2H,QAAAA,QAAQ,CAAC0J,eAAT,CAAyB5a,IAAzB,CAA8BuK,MAA9B;EACH,OAFD,EAjII;EAsIJ;;EACA,UAAMkc,WAAW,GAAGlc,MAAM,CAAC1D,MAAP,CAAcpH,MAAd,CAAqBinB,MAArB,CAA4B,CAAC,OAAD,EAAU,SAAV,CAA5B,EAAkD/S,IAAlD,CAAuD,GAAvD,CAApB;EAEA5T,MAAAA,EAAE,CAACC,IAAH,CAAQuK,MAAR,EAAgBA,MAAM,CAAChB,KAAvB,EAA8Bkd,WAA9B,EAA2C,UAAAnoB,KAAK,EAAI;EAAA,4BAC1BA,KAD0B,CAC1CkC,MAD0C;EAAA,YAC1CA,MAD0C,8BACjC,EADiC;;EAIhD,YAAIlC,KAAK,CAACsB,IAAN,KAAe,OAAnB,EAA4B;EACxBY,UAAAA,MAAM,GAAG+J,MAAM,CAAChB,KAAP,CAAasJ,KAAtB;EACH;;EAEDvS,QAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BpJ,QAAQ,CAACC,SAAnC,EAA8C9C,KAAK,CAACsB,IAApD,EAA0D,IAA1D,EAAgEY,MAAhE;EACH,OATD;EAUH;;;;4BAGKlC,OAAOqoB,gBAAgBC,kBAAkB;EAAA,UACnCrc,MADmC,GACxB,IADwB,CACnCA,MADmC;EAE3C,UAAMsc,aAAa,GAAGtc,MAAM,CAAC1D,MAAP,CAAcsP,SAAd,CAAwByQ,gBAAxB,CAAtB;EACA,UAAME,gBAAgB,GAAGtnB,EAAE,CAACxB,QAAH,CAAY6oB,aAAZ,CAAzB;EACA,UAAIE,QAAQ,GAAG,IAAf,CAJ2C;;EAO3C,UAAID,gBAAJ,EAAsB;EAClBC,QAAAA,QAAQ,GAAGF,aAAa,CAAC7mB,IAAd,CAAmBuK,MAAnB,EAA2BjM,KAA3B,CAAX;EACH,OAT0C;;;EAY3C,UAAIyoB,QAAQ,IAAIvnB,EAAE,CAACxB,QAAH,CAAY2oB,cAAZ,CAAhB,EAA6C;EACzCA,QAAAA,cAAc,CAAC3mB,IAAf,CAAoBuK,MAApB,EAA4BjM,KAA5B;EACH;EACJ;;;;2BAGIF,SAASwB,MAAM+mB,gBAAgBC,kBAAkC;EAAA;;EAAA,UAAhBtnB,OAAgB,uEAAN,IAAM;EAAA,UAC1DiL,MAD0D,GAC/C,IAD+C,CAC1DA,MAD0D;EAElE,UAAMsc,aAAa,GAAGtc,MAAM,CAAC1D,MAAP,CAAcsP,SAAd,CAAwByQ,gBAAxB,CAAtB;EACA,UAAME,gBAAgB,GAAGtnB,EAAE,CAACxB,QAAH,CAAY6oB,aAAZ,CAAzB;EAEA9mB,MAAAA,EAAE,CAACC,IAAH,CACIuK,MADJ,EAEInM,OAFJ,EAGIwB,IAHJ,EAII,UAAAtB,KAAK;EAAA,eAAI,KAAI,CAAC0oB,KAAL,CAAW1oB,KAAX,EAAkBqoB,cAAlB,EAAkCC,gBAAlC,CAAJ;EAAA,OAJT,EAKItnB,OAAO,IAAI,CAACwnB,gBALhB;EAOH;;;;oCAGU;EAAA;;EAAA,UACCvc,MADD,GACY,IADZ,CACCA,MADD;EAAA,UAECpJ,QAFD,GAEcoJ,MAFd,CAECpJ,QAFD;;EAKP,UAAM8lB,UAAU,GAAGxf,OAAO,CAACC,IAAR,GAAe,QAAf,GAA0B,OAA7C,CALO;;EAQP,UAAIvG,QAAQ,CAACwQ,OAAT,CAAiB7G,IAArB,EAA2B;EACvB/O,QAAAA,KAAK,CAAC0F,IAAN,CAAWN,QAAQ,CAACwQ,OAAT,CAAiB7G,IAA5B,EAAkCnL,OAAlC,CAA0C,UAAA2U,MAAM,EAAI;EAChD,UAAA,MAAI,CAAC8B,IAAL,CAAU9B,MAAV,EAAkB,OAAlB,EAA2B/J,MAAM,CAACob,UAAlC,EAA8C,MAA9C;EACH,SAFD;EAGH,OAZM;;;EAeP,WAAKvP,IAAL,CAAUjV,QAAQ,CAACwQ,OAAT,CAAiBE,OAA3B,EAAoC,OAApC,EAA6CtH,MAAM,CAACsH,OAApD,EAA6D,SAA7D,EAfO;;EAkBP,WAAKuE,IAAL,CAAUjV,QAAQ,CAACwQ,OAAT,CAAiBG,MAA3B,EAAmC,OAAnC,EAA4CvH,MAAM,CAACuH,MAAnD,EAA2D,QAA3D,EAlBO;;EAqBP,WAAKsE,IAAL,CAAUjV,QAAQ,CAACwQ,OAAT,CAAiBI,WAA3B,EAAwC,OAAxC,EAAiDxH,MAAM,CAACub,OAAxD,EAAiE,aAAjE,EArBO;;EAwBP,WAAK1P,IAAL,CACIjV,QAAQ,CAACwQ,OAAT,CAAiBK,IADrB,EAEI,OAFJ,EAGI,YAAM;EACFzH,QAAAA,MAAM,CAACqM,KAAP,GAAe,CAACrM,MAAM,CAACqM,KAAvB;EACH,OALL,EAMI,MANJ,EAxBO;;EAkCP,WAAKR,IAAL,CAAUjV,QAAQ,CAACwQ,OAAT,CAAiBO,QAA3B,EAAqC,OAArC,EAA8C;EAAA,eAAM3H,MAAM,CAACwb,cAAP,EAAN;EAAA,OAA9C,EAlCO;;EAqCP,WAAK3P,IAAL,CACIjV,QAAQ,CAACwQ,OAAT,CAAiBkJ,QADrB,EAEI,OAFJ,EAGI,YAAM;EACFva,QAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,UAAxC;EACH,OALL,EAMI,UANJ,EArCO;;EA+CP,WAAK6M,IAAL,CACIjV,QAAQ,CAACwQ,OAAT,CAAiBQ,UADrB,EAEI,OAFJ,EAGI,YAAM;EACF5H,QAAAA,MAAM,CAAC4H,UAAP,CAAkB9S,MAAlB;EACH,OALL,EAMI,YANJ,EA/CO;;EAyDP,WAAK+W,IAAL,CACIjV,QAAQ,CAACwQ,OAAT,CAAiB5I,GADrB,EAEI,OAFJ,EAGI,YAAM;EACFwB,QAAAA,MAAM,CAACxB,GAAP,GAAa,QAAb;EACH,OALL,EAMI,KANJ,EAzDO;;EAmEP,WAAKqN,IAAL,CAAUjV,QAAQ,CAACwQ,OAAT,CAAiB1I,OAA3B,EAAoC,OAApC,EAA6CsB,MAAM,CAACtB,OAApD,EAA6D,SAA7D,EAnEO;;EAsEP,WAAKmN,IAAL,CAAUjV,QAAQ,CAACwQ,OAAT,CAAiBM,QAA3B,EAAqC,OAArC,EAA8C,UAAA3T,KAAK,EAAI;EACnD;EACAA,QAAAA,KAAK,CAAC8W,eAAN;;EAEAlE,QAAAA,QAAQ,CAAC4I,UAAT,CAAoB9Z,IAApB,CAAyBuK,MAAzB,EAAiCjM,KAAjC;EACH,OALD,EAtEO;EA8EP;EACA;;EACA,WAAK8X,IAAL,CACIjV,QAAQ,CAACwQ,OAAT,CAAiBM,QADrB,EAEI,OAFJ,EAGI,UAAA3T,KAAK,EAAI;EACL,YAAM+mB,IAAI,GAAG/mB,KAAK,CAAC6W,KAAnB,CADK;;EAIL,YAAI,CAAC,CAAC,EAAD,EAAK,EAAL,EAAS1P,QAAT,CAAkB4f,IAAlB,CAAL,EAA8B;EAC1B;EACH,SANI;;;EASL,YAAIA,IAAI,KAAK,EAAb,EAAiB;EACbnU,UAAAA,QAAQ,CAACyE,kBAAT,CAA4B3V,IAA5B,CAAiCuK,MAAjC,EAAyC,IAAzC,EAA+C,IAA/C;;EACA;EACH,SAZI;;;EAeLjM,QAAAA,KAAK,CAACoI,cAAN,GAfK;;EAkBLpI,QAAAA,KAAK,CAAC8W,eAAN,GAlBK;;EAqBLlE,QAAAA,QAAQ,CAAC4I,UAAT,CAAoB9Z,IAApB,CAAyBuK,MAAzB,EAAiCjM,KAAjC;EACH,OAzBL,EA0BI,IA1BJ,EA2BI,KA3BJ;EAAA,QAhFO;;EA+GP,WAAK8X,IAAL,CAAUjV,QAAQ,CAAC8Q,QAAT,CAAkB6B,IAA5B,EAAkC,SAAlC,EAA6C,UAAAxV,KAAK,EAAI;EAClD,YAAIA,KAAK,CAAC6W,KAAN,KAAgB,EAApB,EAAwB;EACpBjE,UAAAA,QAAQ,CAAC4I,UAAT,CAAoB9Z,IAApB,CAAyBuK,MAAzB,EAAiCjM,KAAjC;EACH;EACJ,OAJD,EA/GO;;EAsHP,WAAK8X,IAAL,CAAUjV,QAAQ,CAACkR,MAAT,CAAgBC,IAA1B,EAAgC,qBAAhC,EAAuD,UAAAhU,KAAK,EAAI;EAC5D,YAAM4oB,IAAI,GAAG/lB,QAAQ,CAACiR,QAAT,CAAkBoF,qBAAlB,EAAb;EACA,YAAML,OAAO,GAAI,MAAM+P,IAAI,CAACxP,KAAZ,IAAsBpZ,KAAK,CAACqZ,KAAN,GAAcuP,IAAI,CAACtP,IAAzC,CAAhB;EACAtZ,QAAAA,KAAK,CAAC6oB,aAAN,CAAoBzkB,YAApB,CAAiC,YAAjC,EAA+CyU,OAA/C;EACH,OAJD,EAtHO;;EA6HP,WAAKf,IAAL,CAAUjV,QAAQ,CAACkR,MAAT,CAAgBC,IAA1B,EAAgC,qDAAhC,EAAuF,UAAAhU,KAAK,EAAI;EAC5F,YAAMgU,IAAI,GAAGhU,KAAK,CAAC6oB,aAAnB;EACA,YAAM9B,IAAI,GAAG/mB,KAAK,CAAC+H,OAAN,GAAgB/H,KAAK,CAAC+H,OAAtB,GAAgC/H,KAAK,CAAC6W,KAAnD;EACA,YAAMiS,SAAS,GAAG,gBAAlB;;EAEA,YAAI5nB,EAAE,CAACjB,aAAH,CAAiBD,KAAjB,KAA4B+mB,IAAI,KAAK,EAAT,IAAeA,IAAI,KAAK,EAAxD,EAA6D;EACzD;EACH,SAP2F;;;EAU5F9a,QAAAA,MAAM,CAACoa,YAAP,GAAsBC,IAAI,CAACC,GAAL,EAAtB,CAV4F;;EAa5F,YAAM/Z,IAAI,GAAGwH,IAAI,CAAC+U,YAAL,CAAkBD,SAAlB,CAAb,CAb4F;;EAgB5F,YAAME,IAAI,GAAG,CAAC,SAAD,EAAY,UAAZ,EAAwB,OAAxB,EAAiC7hB,QAAjC,CAA0CnH,KAAK,CAACsB,IAAhD,CAAb,CAhB4F;;EAmB5F,YAAIkL,IAAI,IAAIwc,IAAZ,EAAkB;EACdhV,UAAAA,IAAI,CAACzN,eAAL,CAAqBuiB,SAArB;EACA7c,UAAAA,MAAM,CAACO,IAAP;EACH,SAHD,MAGO,IAAI,CAACwc,IAAD,IAAS/c,MAAM,CAACgW,OAApB,EAA6B;EAChCjO,UAAAA,IAAI,CAAC5P,YAAL,CAAkB0kB,SAAlB,EAA6B,EAA7B;EACA7c,UAAAA,MAAM,CAACqH,KAAP;EACH;EACJ,OA1BD,EA7HO;EA0JP;EACA;;EACA,UAAInK,OAAO,CAACU,KAAZ,EAAmB;EACf,YAAMkK,MAAM,GAAGxM,WAAW,CAAC7F,IAAZ,CAAiBuK,MAAjB,EAAyB,qBAAzB,CAAf;EACAxO,QAAAA,KAAK,CAAC0F,IAAN,CAAW4Q,MAAX,EAAmB1S,OAAnB,CAA2B,UAAA5E,KAAK;EAAA,iBAAI,MAAI,CAACqb,IAAL,CAAUrb,KAAV,EAAiBksB,UAAjB,EAA6B,UAAA3oB,KAAK;EAAA,mBAAIiJ,OAAO,CAACjJ,KAAK,CAAC0E,MAAP,CAAX;EAAA,WAAlC,CAAJ;EAAA,SAAhC;EACH,OA/JM;;;EAkKP,WAAKoT,IAAL,CACIjV,QAAQ,CAACkR,MAAT,CAAgBC,IADpB,EAEI2U,UAFJ,EAGI,UAAA3oB,KAAK,EAAI;EACL,YAAMgU,IAAI,GAAGhU,KAAK,CAAC6oB,aAAnB,CADK;;EAIL,YAAII,MAAM,GAAGjV,IAAI,CAAClI,YAAL,CAAkB,YAAlB,CAAb;;EAEA,YAAI5K,EAAE,CAACb,KAAH,CAAS4oB,MAAT,CAAJ,EAAsB;EAClBA,UAAAA,MAAM,GAAGjV,IAAI,CAAC9P,KAAd;EACH;;EAED8P,QAAAA,IAAI,CAACzN,eAAL,CAAqB,YAArB;EAEA0F,QAAAA,MAAM,CAACE,WAAP,GAAsB8c,MAAM,GAAGjV,IAAI,CAACvF,GAAf,GAAsBxC,MAAM,CAACmI,QAAlD;EACH,OAhBL,EAiBI,MAjBJ,EAlKO;;EAuLP,WAAK0D,IAAL,CAAUjV,QAAQ,CAACiR,QAAnB,EAA6B,iCAA7B,EAAgE,UAAA9T,KAAK;EAAA,eACjE4S,QAAQ,CAACmG,iBAAT,CAA2BrX,IAA3B,CAAgCuK,MAAhC,EAAwCjM,KAAxC,CADiE;EAAA,OAArE,EAvLO;;EA4LP,UAAImJ,OAAO,CAACG,QAAZ,EAAsB;EAClB7L,QAAAA,KAAK,CAAC0F,IAAN,CAAWoE,WAAW,CAAC7F,IAAZ,CAAiBuK,MAAjB,EAAyB,qBAAzB,CAAX,EAA4D5K,OAA5D,CAAoE,UAAAvB,OAAO,EAAI;EAC3E,UAAA,MAAI,CAACgY,IAAL,CAAUhY,OAAV,EAAmB,OAAnB,EAA4B,UAAAE,KAAK;EAAA,mBAAI4S,QAAQ,CAACyD,eAAT,CAAyB3U,IAAzB,CAA8BuK,MAA9B,EAAsCjM,KAAK,CAAC0E,MAA5C,CAAJ;EAAA,WAAjC;EACH,SAFD;EAGH,OAhMM;EAmMP;;;EACA,UAAIuH,MAAM,CAAC1D,MAAP,CAAcuX,YAAd,IAA8B,CAAC5e,EAAE,CAACpB,OAAH,CAAW+C,QAAQ,CAACqR,OAAT,CAAiBE,QAA5B,CAAnC,EAA0E;EACtE,aAAK0D,IAAL,CAAUjV,QAAQ,CAACqR,OAAT,CAAiB/H,WAA3B,EAAwC,OAAxC,EAAiD,YAAM;EACnD;EACA,cAAIF,MAAM,CAACE,WAAP,KAAuB,CAA3B,EAA8B;EAC1B;EACH;;EAEDF,UAAAA,MAAM,CAAC1D,MAAP,CAAckR,UAAd,GAA2B,CAACxN,MAAM,CAAC1D,MAAP,CAAckR,UAA1C;;EAEA7G,UAAAA,QAAQ,CAAC2G,UAAT,CAAoB7X,IAApB,CAAyBuK,MAAzB;EACH,SATD;EAUH,OA/MM;;;EAkNP,WAAK6L,IAAL,CACIjV,QAAQ,CAACkR,MAAT,CAAgBE,MADpB,EAEI0U,UAFJ,EAGI,UAAA3oB,KAAK,EAAI;EACLiM,QAAAA,MAAM,CAACgI,MAAP,GAAgBjU,KAAK,CAAC0E,MAAN,CAAaR,KAA7B;EACH,OALL,EAMI,QANJ,EAlNO;;EA4NP,WAAK4T,IAAL,CAAUjV,QAAQ,CAAC+P,QAAnB,EAA6B,uBAA7B,EAAsD,UAAA5S,KAAK,EAAI;EAC3D6C,QAAAA,QAAQ,CAAC+P,QAAT,CAAkBwP,KAAlB,GAA0B,CAACnW,MAAM,CAACX,KAAR,IAAiBtL,KAAK,CAACsB,IAAN,KAAe,YAA1D;EACH,OAFD,EA5NO;;EAiOP,WAAKwW,IAAL,CAAUjV,QAAQ,CAAC+P,QAAnB,EAA6B,mDAA7B,EAAkF,UAAA5S,KAAK,EAAI;EACvF6C,QAAAA,QAAQ,CAAC+P,QAAT,CAAkB2F,OAAlB,GAA4B,CAAC,WAAD,EAAc,YAAd,EAA4BpR,QAA5B,CAAqCnH,KAAK,CAACsB,IAA3C,CAA5B;EACH,OAFD,EAjOO;;EAsOP,WAAKwW,IAAL,CAAUjV,QAAQ,CAAC+P,QAAnB,EAA6B,SAA7B,EAAwC,YAAM;EAAA,YAClCrK,MADkC,GACL0D,MADK,CAClC1D,MADkC;EAAA,YAC1B1F,QAD0B,GACLoJ,MADK,CAC1BpJ,QAD0B;EAAA,YAChBsjB,MADgB,GACLla,MADK,CAChBka,MADgB;;EAI1C3f,QAAAA,WAAW,CAAC3D,QAAQ,CAAC+P,QAAV,EAAoBrK,MAAM,CAACC,UAAP,CAAkB+Z,YAAtC,EAAoD,IAApD,CAAX,CAJ0C;;EAO1ChY,QAAAA,EAAE,CAACyb,cAAH,CAAkBtkB,IAAlB,CAAuBuK,MAAvB,EAA+B,IAA/B,EAP0C;;EAU1CrJ,QAAAA,UAAU,CAAC,YAAM;EACb4D,UAAAA,WAAW,CAAC3D,QAAQ,CAAC+P,QAAV,EAAoBrK,MAAM,CAACC,UAAP,CAAkB+Z,YAAtC,EAAoD,KAApD,CAAX;EACH,SAFS,EAEP,CAFO,CAAV,CAV0C;;EAe1C,YAAMsF,KAAK,GAAG,MAAI,CAACvc,KAAL,GAAa,IAAb,GAAoB,IAAlC,CAf0C;;EAkB1C4a,QAAAA,YAAY,CAACC,MAAM,CAACvT,QAAR,CAAZ,CAlB0C;;EAqB1CuT,QAAAA,MAAM,CAACvT,QAAP,GAAkBhQ,UAAU,CAAC;EAAA,iBAAM2H,EAAE,CAACyb,cAAH,CAAkBtkB,IAAlB,CAAuBuK,MAAvB,EAA+B,KAA/B,CAAN;EAAA,SAAD,EAA8C4b,KAA9C,CAA5B;EACH,OAtBD,EAtOO;;EA+PP,WAAK/P,IAAL,CACIjV,QAAQ,CAACkR,MAAT,CAAgBE,MADpB,EAEI,OAFJ,EAGI,UAAAjU,KAAK,EAAI;EACL;EACA;EACA,YAAMwS,QAAQ,GAAGxS,KAAK,CAACkpB,iCAAvB,CAHK;;EAAA,mBAMU,CAAClpB,KAAK,CAACmpB,MAAP,EAAe,CAACnpB,KAAK,CAACopB,MAAtB,EAA8B1iB,GAA9B,CAAkC,UAAAxC,KAAK;EAAA,iBAAKsO,QAAQ,GAAG,CAACtO,KAAJ,GAAYA,KAAzB;EAAA,SAAvC,CANV;EAAA;EAAA,YAMEif,CANF;EAAA,YAMKE,CANL;;;EASL,YAAMgG,SAAS,GAAG/b,IAAI,CAACgc,IAAL,CAAUhc,IAAI,CAACC,GAAL,CAAS4V,CAAT,IAAc7V,IAAI,CAACC,GAAL,CAAS8V,CAAT,CAAd,GAA4BF,CAA5B,GAAgCE,CAA1C,CAAlB,CATK;;EAYLpX,QAAAA,MAAM,CAACqb,cAAP,CAAsB+B,SAAS,GAAG,EAAlC,EAZK;;EAAA,YAeGpV,MAfH,GAechI,MAAM,CAAChB,KAfrB,CAeGgJ,MAfH;;EAgBL,YAAKoV,SAAS,KAAK,CAAd,IAAmBpV,MAAM,GAAG,CAA7B,IAAoCoV,SAAS,KAAK,CAAC,CAAf,IAAoBpV,MAAM,GAAG,CAArE,EAAyE;EACrEjU,UAAAA,KAAK,CAACoI,cAAN;EACH;EACJ,OAtBL,EAuBI,QAvBJ,EAwBI,KAxBJ;EA0BH;;;;;;;;;;;;;ECjwBL,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE;IACvB,IAAI,OAAOmhB,SAAM,KAAK,UAAU,IAAIA,SAAM,CAAC,GAAG,EAAE;MAC9CA,SAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;KACrB,MAAM,AAAiC;MACtC,cAAc,GAAG,OAAO,EAAE,CAAC;KAC5B,AAEA;GACF,CAACC,cAAI,EAAE,WAAW;;;;;;EAMnB,IAAI,OAAO,GAAG,WAAW,EAAE;MACvB,aAAa,GAAG,EAAE;MAClB,iBAAiB,GAAG,EAAE;MACtB,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;EAQ7B,SAAS,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE;;IAExC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;;IAErD,IAAI,YAAY,GAAG,EAAE;QACjB,CAAC,GAAG,SAAS,CAAC,MAAM;QACpB,UAAU,GAAG,CAAC;QACd,EAAE;QACF,QAAQ;QACR,CAAC;QACD,CAAC,CAAC;;;IAGN,EAAE,GAAG,UAAU,QAAQ,EAAE,aAAa,EAAE;MACtC,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;MAEtD,UAAU,EAAE,CAAC;MACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;KAC3C,CAAC;;;IAGF,OAAO,CAAC,EAAE,EAAE;MACV,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;;MAGxB,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;MAChC,IAAI,CAAC,EAAE;QACL,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChB,SAAS;OACV;;;MAGD,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;MACxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACZ;GACF;;;;;;;;EAQD,SAAS,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;;IAExC,IAAI,CAAC,QAAQ,EAAE,OAAO;;IAEtB,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;;;IAGtC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;;;IAG5C,IAAI,CAAC,CAAC,EAAE,OAAO;;;IAGf,OAAO,CAAC,CAAC,MAAM,EAAE;MACf,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;MAC9B,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAChB;GACF;;;;;;;;EAQD,SAAS,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE;;IAE5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;;IAGtC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,YAAY,CAAC,CAAC;SAC1D,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;GACtC;;;;;;;;EAQD,SAAS,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IAClD,IAAI,GAAG,GAAG,QAAQ;QACd,KAAK,GAAG,IAAI,CAAC,KAAK;QAClB,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;QACrC,gBAAgB,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO;QACzC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAC9C,KAAK;QACL,CAAC,CAAC;;IAEN,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;;IAEzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAC/B,KAAK,GAAG,IAAI,CAAC;;;MAGb,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;MAC9B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;MACrB,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;KACvB,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;MAEpD,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;MAC7B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;KACtB,MAAM;;MAEL,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;MAChC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;MACb,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;KAC9C;;IAED,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,UAAU,EAAE,EAAE;MACpD,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;MAIxB,IAAI,KAAK,IAAI,WAAW,IAAI,CAAC,EAAE;QAC7B,IAAI;UACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;SAC3C,CAAC,OAAO,CAAC,EAAE;;;UAGV,MAAM,GAAG,GAAG,CAAC;SACd;OACF;;;MAGD,IAAI,MAAM,IAAI,GAAG,EAAE;;QAEjB,QAAQ,IAAI,CAAC,CAAC;;;QAGd,IAAI,QAAQ,GAAG,QAAQ,EAAE;UACvB,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACnD;OACF;;;MAGD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;KAC/C,CAAC;;;IAGF,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;GAClE;;;;;;;;EAQD,SAAS,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;;IAE1C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;IAErC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM;QACzB,CAAC,GAAG,UAAU;QACd,aAAa,GAAG,EAAE;QAClB,EAAE;QACF,CAAC,CAAC;;;IAGN,EAAE,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;;MAE5C,IAAI,MAAM,IAAI,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;MAI5C,IAAI,MAAM,IAAI,GAAG,EAAE;QACjB,IAAI,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1C,OAAO;OACb;;MAED,UAAU,EAAE,CAAC;MACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;KAC5C,CAAC;;;IAGF,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;GACpD;;;;;;;;;;EAUD,SAAS,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;IACjC,IAAI,QAAQ;QACR,IAAI,CAAC;;;IAGT,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;;;IAGvC,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;;;IAGtC,IAAI,QAAQ,EAAE;MACZ,IAAI,QAAQ,IAAI,aAAa,EAAE;QAC7B,MAAM,QAAQ,CAAC;OAChB,MAAM;QACL,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;OAChC;KACF;;;IAGD,SAAS,CAAC,KAAK,EAAE,UAAU,aAAa,EAAE;;MAExC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;;MAGtC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;KAClC,EAAE,IAAI,CAAC,CAAC;GACV;;;;;;;;EAQD,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;;IAExC,SAAS,CAAC,IAAI,EAAE,UAAU,YAAY,EAAE;;MAEtC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;KACtC,CAAC,CAAC;;IAEH,OAAO,MAAM,CAAC;GACf,CAAC;;;;;;;EAOF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE;IACpC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;GACvB,CAAC;;;;;;EAMF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,GAAG;IAC9B,aAAa,GAAG,EAAE,CAAC;IACnB,iBAAiB,GAAG,EAAE,CAAC;IACvB,mBAAmB,GAAG,EAAE,CAAC;GAC1B,CAAC;;;;;;;EAOF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE;IAC9C,OAAO,QAAQ,IAAI,aAAa,CAAC;GAClC,CAAC;;;;EAIF,OAAO,MAAM,CAAC;;GAEb,CAAC,EAAE;;;ECpSJ;AACA,EAKe,SAASC,UAAT,CAAoBrpB,GAApB,EAAyB;EACpC,SAAO,IAAIsC,OAAJ,CAAY,UAACC,OAAD,EAAU+N,MAAV,EAAqB;EACpCgZ,IAAAA,UAAM,CAACtpB,GAAD,EAAM;EACRupB,MAAAA,OAAO,EAAEhnB,OADD;EAER4R,MAAAA,KAAK,EAAE7D;EAFC,KAAN,CAAN;EAIH,GALM,CAAP;EAMH;;ECGD,SAASkZ,OAAT,CAAiBxpB,GAAjB,EAAsB;EAClB,MAAIc,EAAE,CAACb,KAAH,CAASD,GAAT,CAAJ,EAAmB;EACf,WAAO,IAAP;EACH;;EAED,MAAIc,EAAE,CAAC1B,MAAH,CAAUvC,MAAM,CAACmD,GAAD,CAAhB,CAAJ,EAA4B;EACxB,WAAOA,GAAP;EACH;;EAED,MAAMypB,KAAK,GAAG,iCAAd;EACA,SAAOzpB,GAAG,CAAC6G,KAAJ,CAAU4iB,KAAV,IAAmBjb,MAAM,CAACkb,EAA1B,GAA+B1pB,GAAtC;EACH;;;EAGD,SAAS2pB,cAAT,CAAwB3Q,KAAxB,EAA+B6C,MAA/B,EAAuC;EACnC,MAAM+N,QAAQ,GAAG,SAAXA,QAAW,CAACC,CAAD,EAAIC,CAAJ;EAAA,WAAWA,CAAC,KAAK,CAAN,GAAUD,CAAV,GAAcD,QAAQ,CAACE,CAAD,EAAID,CAAC,GAAGC,CAAR,CAAjC;EAAA,GAAjB;;EACA,MAAMnK,KAAK,GAAGiK,QAAQ,CAAC5Q,KAAD,EAAQ6C,MAAR,CAAtB;EACA,mBAAU7C,KAAK,GAAG2G,KAAlB,cAA2B9D,MAAM,GAAG8D,KAApC;EACH;;;EAGD,SAASoK,mBAAT,CAA6B3d,IAA7B,EAAmC;EAC/B,MAAIA,IAAI,IAAI,CAAC,KAAKsS,KAAL,CAAWsL,SAAxB,EAAmC;EAC/B,SAAKtL,KAAL,CAAWsL,SAAX,GAAuB,IAAvB;EACH;;EACD,MAAI,KAAKnf,KAAL,CAAWmB,MAAX,KAAsBI,IAA1B,EAAgC;EAC5B,SAAKvB,KAAL,CAAWmB,MAAX,GAAoB,CAACI,IAArB;EACAxK,IAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCuB,IAAI,GAAG,MAAH,GAAY,OAApD;EACH;EACJ;;EAED,IAAMmD,KAAK,GAAG;EACVgO,EAAAA,KADU,mBACF;EAAA;;EACJ;EACAnX,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcI,OAAf,EAAwB,KAAKsF,MAAL,CAAYC,UAAZ,CAAuBsW,KAA/C,EAAsD,IAAtD,CAAX,CAFI;;EAKJnP,IAAAA,KAAK,CAAC0a,cAAN,CAAqB3oB,IAArB,CAA0B,IAA1B,EALI;;EAQJ,QAAI,CAACR,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAAC+rB,KAAjB,CAAL,EAA8B;EAC1Bb,MAAAA,UAAU,CAAC,KAAKlhB,MAAL,CAAYsU,IAAZ,CAAiBlN,KAAjB,CAAuB8R,GAAxB,CAAV,CACK1e,IADL,CACU,YAAM;EACR4M,QAAAA,KAAK,CAAClN,KAAN,CAAYf,IAAZ,CAAiB,KAAjB;EACH,OAHL,EAIKsQ,KAJL,CAIW,UAAAuC,KAAK,EAAI;EACZ,QAAA,KAAI,CAACzH,KAAL,CAAW0H,IAAX,CAAgB,0BAAhB,EAA4CD,KAA5C;EACH,OANL;EAOH,KARD,MAQO;EACH5E,MAAAA,KAAK,CAAClN,KAAN,CAAYf,IAAZ,CAAiB,IAAjB;EACH;EACJ,GApBS;EAsBV;EACA;EACA2oB,EAAAA,cAxBU,0BAwBK5tB,KAxBL,EAwBY;EAAA,iBACH,CAACyE,EAAE,CAAChC,MAAH,CAAUzC,KAAV,IAAmBA,KAAnB,GAA2B,KAAK8L,MAAL,CAAYwX,KAAxC,EAA+C3e,KAA/C,CAAqD,GAArD,CADG;EAAA;EAAA,QACX+hB,CADW;EAAA,QACRE,CADQ;;EAElB,QAAMkH,OAAO,GAAI,MAAMpH,CAAP,GAAYE,CAA5B;EACA,SAAKxgB,QAAL,CAAcI,OAAd,CAAsB8F,KAAtB,CAA4ByhB,aAA5B,aAA+CD,OAA/C;;EAEA,QAAI,KAAKhqB,SAAL,CAAegK,EAAnB,EAAuB;EACnB,UAAM0R,MAAM,GAAG,GAAf;EACA,UAAMwO,MAAM,GAAG,CAACxO,MAAM,GAAGsO,OAAV,KAAsBtO,MAAM,GAAG,EAA/B,CAAf;EAEA,WAAKhR,KAAL,CAAWlC,KAAX,CAAiB2hB,SAAjB,yBAA4CD,MAA5C;EACH;EACJ,GAnCS;EAqCV;EACAhoB,EAAAA,KAtCU,sBAsCF;EAAA;;EACJ,QAAMwJ,MAAM,GAAG,IAAf,CADI;;EAIJ,QAAMzL,OAAO,GAAG;EACZ4f,MAAAA,IAAI,EAAEnU,MAAM,CAAC1D,MAAP,CAAc6X,IAAd,CAAmBhC,MADb;EAEZwB,MAAAA,QAAQ,EAAE3T,MAAM,CAAC2T,QAFL;EAGZ;EACA+K,MAAAA,MAAM,EAAE,KAJI;EAKZC,MAAAA,QAAQ,EAAE,KALE;EAMZ7a,MAAAA,KAAK,EAAE,KANK;EAOZiI,MAAAA,KAAK,EAAE,IAPK;EAQZ6S,MAAAA,WAAW,EAAE,CARD;EASZC,MAAAA,OAAO,EAAE,OATG;EAUZ1gB,MAAAA,WAAW,EAAE,CAAC,KAAK7B,MAAL,CAAYsL,UAAZ,CAAuB4M;EAVzB,KAAhB;EAYA,QAAMhD,MAAM,GAAGD,cAAc,CAAChd,OAAD,CAA7B,CAhBI;;EAmBJ,QAAIqL,MAAM,GAAGI,MAAM,CAAChB,KAAP,CAAaa,YAAb,CAA0B,KAA1B,CAAb,CAnBI;;EAsBJ,QAAI5K,EAAE,CAACb,KAAH,CAASwL,MAAT,CAAJ,EAAsB;EAClBA,MAAAA,MAAM,GAAGI,MAAM,CAAChB,KAAP,CAAaa,YAAb,CAA0BG,MAAM,CAAC1D,MAAP,CAAcxE,UAAd,CAAyB+a,KAAzB,CAA+B3Y,EAAzD,CAAT;EACH;;EAED,QAAMA,EAAE,GAAGyjB,OAAO,CAAC/d,MAAD,CAAlB,CA1BI;;EA6BJ,QAAM6V,MAAM,GAAGrd,aAAa,CAAC,QAAD,CAA5B;EACA,QAAMkI,GAAG,GAAG6B,MAAM,CAACnC,MAAM,CAAC1D,MAAP,CAAcsU,IAAd,CAAmBlN,KAAnB,CAAyB+R,MAA1B,EAAkCvb,EAAlC,EAAsCsX,MAAtC,CAAlB;EACAiE,IAAAA,MAAM,CAACtd,YAAP,CAAoB,KAApB,EAA2BmI,GAA3B;EACAmV,IAAAA,MAAM,CAACtd,YAAP,CAAoB,iBAApB,EAAuC,EAAvC;EACAsd,IAAAA,MAAM,CAACtd,YAAP,CAAoB,mBAApB,EAAyC,EAAzC;EACAsd,IAAAA,MAAM,CAACtd,YAAP,CAAoB,OAApB,EAA6B,UAA7B,EAlCI;;EAAA,QAqCI0d,MArCJ,GAqCe7V,MArCf,CAqCI6V,MArCJ;;EAwCJ,QAAM7e,OAAO,GAAGoB,aAAa,CAAC,KAAD,EAAQ;EAAEyd,MAAAA,MAAM,EAANA,MAAF;EAAU5b,MAAAA,KAAK,EAAE+F,MAAM,CAAC1D,MAAP,CAAcC,UAAd,CAAyBqZ;EAA1C,KAAR,CAA7B;EACA5e,IAAAA,OAAO,CAACW,WAAR,CAAoB8d,MAApB;EACAzV,IAAAA,MAAM,CAAChB,KAAP,GAAehG,cAAc,CAAChC,OAAD,EAAUgJ,MAAM,CAAChB,KAAjB,CAA7B,CA1CI;;EA6CJuF,IAAAA,KAAK,CAACpC,MAAM,CAACnC,MAAM,CAAC1D,MAAP,CAAcsU,IAAd,CAAmBlN,KAAnB,CAAyBrF,GAA1B,EAA+BnE,EAA/B,CAAP,EAA2C,MAA3C,CAAL,CAAwDpD,IAAxD,CAA6D,UAAA+N,QAAQ,EAAI;EACrE,UAAI5P,EAAE,CAACb,KAAH,CAASyQ,QAAT,CAAJ,EAAwB;EACpB;EACH,OAHoE;;;EAMrE,UAAM1Q,GAAG,GAAG,IAAInB,GAAJ,CAAQ6R,QAAQ,CAAC,CAAD,CAAR,CAAYia,eAApB,CAAZ,CANqE;;EASrE3qB,MAAAA,GAAG,CAAC4qB,QAAJ,aAAkB5qB,GAAG,CAAC4qB,QAAJ,CAAa5pB,KAAb,CAAmB,GAAnB,EAAwB,CAAxB,CAAlB,UATqE;;EAYrEmJ,MAAAA,EAAE,CAACob,SAAH,CAAajkB,IAAb,CAAkBuK,MAAlB,EAA0B7L,GAAG,CAACwc,IAA9B,EAAoC5K,KAApC,CAA0C,YAAM,EAAhD;EACH,KAbD,EA7CI;EA6DJ;;EACA/F,IAAAA,MAAM,CAAC6S,KAAP,GAAe,IAAIvgB,MAAM,CAAC+rB,KAAP,CAAaW,MAAjB,CAAwBvJ,MAAxB,EAAgC;EAC3C7B,MAAAA,SAAS,EAAE5T,MAAM,CAAC1D,MAAP,CAAcsX,SADkB;EAE3CvH,MAAAA,KAAK,EAAErM,MAAM,CAACqM;EAF6B,KAAhC,CAAf;EAKArM,IAAAA,MAAM,CAAChB,KAAP,CAAamB,MAAb,GAAsB,IAAtB;EACAH,IAAAA,MAAM,CAAChB,KAAP,CAAakB,WAAb,GAA2B,CAA3B,CApEI;;EAuEJ,QAAIF,MAAM,CAAC1L,SAAP,CAAiBgK,EAArB,EAAyB;EACrB0B,MAAAA,MAAM,CAAC6S,KAAP,CAAaoM,gBAAb;EACH,KAzEG;;;EA4EJjf,IAAAA,MAAM,CAAChB,KAAP,CAAauB,IAAb,GAAoB,YAAM;EACtB2d,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,IAAjC;EACA,aAAOA,MAAM,CAAC6S,KAAP,CAAatS,IAAb,EAAP;EACH,KAHD;;EAKAP,IAAAA,MAAM,CAAChB,KAAP,CAAaqI,KAAb,GAAqB,YAAM;EACvB6W,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,KAAjC;EACA,aAAOA,MAAM,CAAC6S,KAAP,CAAaxL,KAAb,EAAP;EACH,KAHD;;EAKArH,IAAAA,MAAM,CAAChB,KAAP,CAAakgB,IAAb,GAAoB,YAAM;EACtBlf,MAAAA,MAAM,CAACqH,KAAP;EACArH,MAAAA,MAAM,CAACE,WAAP,GAAqB,CAArB;EACH,KAHD,CAtFI;;;EAAA,QA4FEA,WA5FF,GA4FkBF,MAAM,CAAChB,KA5FzB,CA4FEkB,WA5FF;EA6FJpP,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,aAApC,EAAmD;EAC/CvK,MAAAA,GAD+C,iBACzC;EACF,eAAOyL,WAAP;EACH,OAH8C;EAI/CD,MAAAA,GAJ+C,eAI3CoG,IAJ2C,EAIrC;EACN;EAEA;EAHM,YAIEwM,KAJF,GAImC7S,MAJnC,CAIE6S,KAJF;EAAA,YAIS7T,KAJT,GAImCgB,MAJnC,CAIShB,KAJT;EAAA,YAIgBmB,MAJhB,GAImCH,MAJnC,CAIgBG,MAJhB;EAAA,YAIwB6H,MAJxB,GAImChI,MAJnC,CAIwBgI,MAJxB;EAKN,YAAMmX,YAAY,GAAGhf,MAAM,IAAI,CAAC0S,KAAK,CAACsL,SAAtC,CALM;;EAQNnf,QAAAA,KAAK,CAACyO,OAAN,GAAgB,IAAhB;EACA1X,QAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BhB,KAA1B,EAAiC,SAAjC,EATM;;EAYNvI,QAAAA,OAAO,CAACC,OAAR,CAAgByoB,YAAY,IAAItM,KAAK,CAACuM,SAAN,CAAgB,CAAhB,CAAhC;EAAA,SAEKtoB,IAFL,CAEU;EAAA,iBAAM+b,KAAK,CAACwM,cAAN,CAAqBhZ,IAArB,CAAN;EAAA,SAFV;EAAA,SAIKvP,IAJL,CAIU;EAAA,iBAAMqoB,YAAY,IAAItM,KAAK,CAACxL,KAAN,EAAtB;EAAA,SAJV;EAAA,SAMKvQ,IANL,CAMU;EAAA,iBAAMqoB,YAAY,IAAItM,KAAK,CAACuM,SAAN,CAAgBpX,MAAhB,CAAtB;EAAA,SANV,EAOKjC,KAPL,CAOW,YAAM;EAEZ,SATL;EAUH;EA1B8C,KAAnD,EA7FI;;EA2HJ,QAAIgG,KAAK,GAAG/L,MAAM,CAAC1D,MAAP,CAAcyP,KAAd,CAAoBqI,QAAhC;EACAtjB,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,cAApC,EAAoD;EAChDvK,MAAAA,GADgD,iBAC1C;EACF,eAAOsX,KAAP;EACH,OAH+C;EAIhD9L,MAAAA,GAJgD,eAI5CzP,KAJ4C,EAIrC;EACPwP,QAAAA,MAAM,CAAC6S,KAAP,CACKyM,eADL,CACqB9uB,KADrB,EAEKsG,IAFL,CAEU,YAAM;EACRiV,UAAAA,KAAK,GAAGvb,KAAR;EACAuF,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,YAAxC;EACH,SALL,EAMK+G,KANL,CAMW,UAAAuC,KAAK,EAAI;EACZ;EACA,cAAIA,KAAK,CAACiX,IAAN,KAAe,OAAnB,EAA4B;EACxB5Y,YAAAA,QAAQ,CAACsI,YAAT,CAAsBxZ,IAAtB,CAA2BuK,MAA3B,EAAmC,EAAnC;EACH;EACJ,SAXL;EAYH;EAjB+C,KAApD,EA5HI;;EAAA,QAiJEgI,MAjJF,GAiJahI,MAAM,CAAC1D,MAjJpB,CAiJE0L,MAjJF;EAkJJlX,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,QAApC,EAA8C;EAC1CvK,MAAAA,GAD0C,iBACpC;EACF,eAAOuT,MAAP;EACH,OAHyC;EAI1C/H,MAAAA,GAJ0C,eAItCzP,KAJsC,EAI/B;EACPwP,QAAAA,MAAM,CAAC6S,KAAP,CAAauM,SAAb,CAAuB5uB,KAAvB,EAA8BsG,IAA9B,CAAmC,YAAM;EACrCkR,UAAAA,MAAM,GAAGxX,KAAT;EACAuF,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,cAAxC;EACH,SAHD;EAIH;EATyC,KAA9C,EAlJI;;EAAA,QA+JEqN,KA/JF,GA+JYrM,MAAM,CAAC1D,MA/JnB,CA+JE+P,KA/JF;EAgKJvb,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,MAAAA,GADyC,iBACnC;EACF,eAAO4X,KAAP;EACH,OAHwC;EAIzCpM,MAAAA,GAJyC,eAIrCzP,KAJqC,EAI9B;EACP,YAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,KAA3C;EAEAwP,QAAAA,MAAM,CAAC6S,KAAP,CAAauM,SAAb,CAAuBtqB,MAAM,GAAG,CAAH,GAAOkL,MAAM,CAAC1D,MAAP,CAAc0L,MAAlD,EAA0DlR,IAA1D,CAA+D,YAAM;EACjEuV,UAAAA,KAAK,GAAGvX,MAAR;EACAiB,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,cAAxC;EACH,SAHD;EAIH;EAXwC,KAA7C,EAhKI;;EAAA,QA+KEmV,IA/KF,GA+KWnU,MAAM,CAAC1D,MA/KlB,CA+KE6X,IA/KF;EAgLJrjB,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,MAApC,EAA4C;EACxCvK,MAAAA,GADwC,iBAClC;EACF,eAAO0f,IAAP;EACH,OAHuC;EAIxClU,MAAAA,GAJwC,eAIpCzP,KAJoC,EAI7B;EACP,YAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4BwP,MAAM,CAAC1D,MAAP,CAAc6X,IAAd,CAAmBhC,MAA9D;EAEAnS,QAAAA,MAAM,CAAC6S,KAAP,CAAa2M,OAAb,CAAqB1qB,MAArB,EAA6BgC,IAA7B,CAAkC,YAAM;EACpCqd,UAAAA,IAAI,GAAGrf,MAAP;EACH,SAFD;EAGH;EAVuC,KAA5C,EAhLI;;EA8LJ,QAAI2qB,UAAJ;EACAzf,IAAAA,MAAM,CAAC6S,KAAP,CACK6M,WADL,GAEK5oB,IAFL,CAEU,UAAAmB,KAAK,EAAI;EACXwnB,MAAAA,UAAU,GAAGxnB,KAAb;EACA0O,MAAAA,QAAQ,CAAC0J,eAAT,CAAyB5a,IAAzB,CAA8BuK,MAA9B;EACH,KALL,EAMK+F,KANL,CAMW,UAAAuC,KAAK,EAAI;EACZ,MAAA,MAAI,CAACzH,KAAL,CAAW0H,IAAX,CAAgBD,KAAhB;EACH,KARL;EAUAxX,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,YAApC,EAAkD;EAC9CvK,MAAAA,GAD8C,iBACxC;EACF,eAAOgrB,UAAP;EACH;EAH6C,KAAlD,EAzMI;;EAgNJ3uB,IAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,MAAAA,GADyC,iBACnC;EACF,eAAOuL,MAAM,CAACE,WAAP,KAAuBF,MAAM,CAACmI,QAArC;EACH;EAHwC,KAA7C,EAhNI;;EAuNJ1R,IAAAA,OAAO,CAAC0e,GAAR,CAAY,CAACnV,MAAM,CAAC6S,KAAP,CAAa8M,aAAb,EAAD,EAA+B3f,MAAM,CAAC6S,KAAP,CAAa+M,cAAb,EAA/B,CAAZ,EAA2E9oB,IAA3E,CAAgF,UAAA+oB,UAAU,EAAI;EAC1F,UAAM/L,KAAK,GAAGgK,cAAc,CAAC+B,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAA5B;EACAnc,MAAAA,KAAK,CAAC0a,cAAN,CAAqB3oB,IAArB,CAA0B,MAA1B,EAAgCqe,KAAhC;EACH,KAHD,EAvNI;;EA6NJ9T,IAAAA,MAAM,CAAC6S,KAAP,CAAaiN,YAAb,CAA0B9f,MAAM,CAAC1D,MAAP,CAAcsX,SAAxC,EAAmD9c,IAAnD,CAAwD,UAAAipB,KAAK,EAAI;EAC7D/f,MAAAA,MAAM,CAAC1D,MAAP,CAAcsX,SAAd,GAA0BmM,KAA1B;EACH,KAFD,EA7NI;;EAkOJ/f,IAAAA,MAAM,CAAC6S,KAAP,CAAamN,aAAb,GAA6BlpB,IAA7B,CAAkC,UAAAgN,KAAK,EAAI;EACvC9D,MAAAA,MAAM,CAAC1D,MAAP,CAAcwH,KAAd,GAAsBA,KAAtB;EACAxF,MAAAA,EAAE,CAACmb,QAAH,CAAYhkB,IAAZ,CAAiB,MAAjB;EACH,KAHD,EAlOI;;EAwOJuK,IAAAA,MAAM,CAAC6S,KAAP,CAAaoN,cAAb,GAA8BnpB,IAA9B,CAAmC,UAAAmB,KAAK,EAAI;EACxCiI,MAAAA,WAAW,GAAGjI,KAAd;EACAlC,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,YAAxC;EACH,KAHD,EAxOI;;EA8OJgB,IAAAA,MAAM,CAAC6S,KAAP,CAAaqN,WAAb,GAA2BppB,IAA3B,CAAgC,UAAAmB,KAAK,EAAI;EACrC+H,MAAAA,MAAM,CAAChB,KAAP,CAAamJ,QAAb,GAAwBlQ,KAAxB;EACAlC,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,gBAAxC;EACH,KAHD,EA9OI;;EAoPJgB,IAAAA,MAAM,CAAC6S,KAAP,CAAasN,aAAb,GAA6BrpB,IAA7B,CAAkC,UAAA8X,MAAM,EAAI;EACxC5O,MAAAA,MAAM,CAAChB,KAAP,CAAaG,UAAb,GAA0ByP,MAA1B;EACAjH,MAAAA,QAAQ,CAAC+J,KAAT,CAAejc,IAAf,CAAoBuK,MAApB;EACH,KAHD;EAKAA,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,WAAhB,EAA6B,gBAAmB;EAAA,2BAAhB4d,IAAgB;EAAA,UAAhBA,IAAgB,0BAAT,EAAS;EAC5C,UAAMgN,YAAY,GAAGhN,IAAI,CAAC3Y,GAAL,CAAS,UAAAxG,GAAG;EAAA,eAAIkP,SAAS,CAAClP,GAAG,CAACoE,IAAL,CAAb;EAAA,OAAZ,CAArB;EACAsP,MAAAA,QAAQ,CAAC8K,UAAT,CAAoBhd,IAApB,CAAyBuK,MAAzB,EAAiCogB,YAAjC;EACH,KAHD;EAKApgB,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,QAAhB,EAA0B,YAAM;EAC5B;EACAwK,MAAAA,MAAM,CAAC6S,KAAP,CAAawN,SAAb,GAAyBvpB,IAAzB,CAA8B,UAAAqJ,MAAM,EAAI;EACpC+d,QAAAA,mBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,CAACG,MAAlC;;EACA,YAAI,CAACA,MAAL,EAAa;EACTpK,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,SAAxC;EACH;EACJ,OALD;;EAOA,UAAI/J,EAAE,CAACpB,OAAH,CAAWmM,MAAM,CAAC6S,KAAP,CAAahf,OAAxB,KAAoCmM,MAAM,CAAC1L,SAAP,CAAiBgK,EAAzD,EAA6D;EACzD,YAAMgiB,KAAK,GAAGtgB,MAAM,CAAC6S,KAAP,CAAahf,OAA3B,CADyD;EAIzD;;EACAysB,QAAAA,KAAK,CAACnoB,YAAN,CAAmB,UAAnB,EAA+B,CAAC,CAAhC;EACH;EACJ,KAhBD;EAkBA6H,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,MAAhB,EAAwB,YAAM;EAC1B0oB,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,IAAjC;EACAjK,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,SAAxC;EACH,KAHD;EAKAgB,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,OAAhB,EAAyB,YAAM;EAC3B0oB,MAAAA,mBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,KAAjC;EACH,KAFD;EAIAA,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,YAAhB,EAA8B,UAAAgQ,IAAI,EAAI;EAClCxF,MAAAA,MAAM,CAAChB,KAAP,CAAayO,OAAb,GAAuB,KAAvB;EACAvN,MAAAA,WAAW,GAAGsF,IAAI,CAAC+a,OAAnB;EACAxqB,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,YAAxC;EACH,KAJD;EAMAgB,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,UAAhB,EAA4B,UAAAgQ,IAAI,EAAI;EAChCxF,MAAAA,MAAM,CAAChB,KAAP,CAAa2N,QAAb,GAAwBnH,IAAI,CAACoH,OAA7B;EACA7W,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,UAAxC,EAFgC;;EAKhC,UAAIiH,QAAQ,CAACT,IAAI,CAACoH,OAAN,EAAe,EAAf,CAAR,KAA+B,CAAnC,EAAsC;EAClC7W,QAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,gBAAxC;EACH,OAP+B;EAUhC;;;EACAgB,MAAAA,MAAM,CAAC6S,KAAP,CAAaqN,WAAb,GAA2BppB,IAA3B,CAAgC,UAAAmB,KAAK,EAAI;EACrC,YAAIA,KAAK,KAAK+H,MAAM,CAAChB,KAAP,CAAamJ,QAA3B,EAAqC;EACjCnI,UAAAA,MAAM,CAAChB,KAAP,CAAamJ,QAAb,GAAwBlQ,KAAxB;EACAlC,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,gBAAxC;EACH;EACJ,OALD;EAMH,KAjBD;EAmBAgB,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,QAAhB,EAA0B,YAAM;EAC5BwK,MAAAA,MAAM,CAAChB,KAAP,CAAayO,OAAb,GAAuB,KAAvB;EACA1X,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,QAAxC;EACH,KAHD;EAKAgB,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,OAAhB,EAAyB,YAAM;EAC3BwK,MAAAA,MAAM,CAAChB,KAAP,CAAamB,MAAb,GAAsB,IAAtB;EACApK,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,OAAxC;EACH,KAHD;EAKAgB,IAAAA,MAAM,CAAC6S,KAAP,CAAard,EAAb,CAAgB,OAAhB,EAAyB,UAAAS,MAAM,EAAI;EAC/B+J,MAAAA,MAAM,CAAChB,KAAP,CAAasJ,KAAb,GAAqBrS,MAArB;EACAF,MAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,OAAxC;EACH,KAHD,EA5TI;;EAkUJrI,IAAAA,UAAU,CAAC;EAAA,aAAM2H,EAAE,CAACib,KAAH,CAAS9jB,IAAT,CAAcuK,MAAd,CAAN;EAAA,KAAD,EAA8B,CAA9B,CAAV;EACH;EAzWS,CAAd;;EC/CA;AACA;EAaA,SAAS2d,SAAT,CAAiBxpB,GAAjB,EAAsB;EAClB,MAAIc,EAAE,CAACb,KAAH,CAASD,GAAT,CAAJ,EAAmB;EACf,WAAO,IAAP;EACH;;EAED,MAAMypB,KAAK,GAAG,8DAAd;EACA,SAAOzpB,GAAG,CAAC6G,KAAJ,CAAU4iB,KAAV,IAAmBjb,MAAM,CAACkb,EAA1B,GAA+B1pB,GAAtC;EACH;;;EAGD,SAAS+pB,qBAAT,CAA6B3d,IAA7B,EAAmC;EAC/B,MAAIA,IAAI,IAAI,CAAC,KAAKsS,KAAL,CAAWsL,SAAxB,EAAmC;EAC/B,SAAKtL,KAAL,CAAWsL,SAAX,GAAuB,IAAvB;EACH;;EACD,MAAI,KAAKnf,KAAL,CAAWmB,MAAX,KAAsBI,IAA1B,EAAgC;EAC5B,SAAKvB,KAAL,CAAWmB,MAAX,GAAoB,CAACI,IAArB;EACAxK,IAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCuB,IAAI,GAAG,MAAH,GAAY,OAApD;EACH;EACJ;;EAED,IAAMoD,OAAO,GAAG;EACZ+N,EAAAA,KADY,mBACJ;EAAA;;EACJ;EACAnX,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcI,OAAf,EAAwB,KAAKsF,MAAL,CAAYC,UAAZ,CAAuBsW,KAA/C,EAAsD,IAAtD,CAAX,CAFI;;EAKJlP,IAAAA,OAAO,CAACya,cAAR,CAAuB3oB,IAAvB,CAA4B,IAA5B,EALI;;EAQJ,QAAIR,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAACkuB,EAAjB,KAAwBvrB,EAAE,CAACxB,QAAH,CAAYnB,MAAM,CAACkuB,EAAP,CAAUxB,MAAtB,CAA5B,EAA2D;EACvDrb,MAAAA,OAAO,CAACnN,KAAR,CAAcf,IAAd,CAAmB,IAAnB;EACH,KAFD,MAEO;EACH;EACA+nB,MAAAA,UAAU,CAAC,KAAKlhB,MAAL,CAAYsU,IAAZ,CAAiBjN,OAAjB,CAAyB6R,GAA1B,CAAV,CAAyCzP,KAAzC,CAA+C,UAAAuC,KAAK,EAAI;EACpD,QAAA,KAAI,CAACzH,KAAL,CAAW0H,IAAX,CAAgB,4BAAhB,EAA8CD,KAA9C;EACH,OAFD,EAFG;EAOH;;EACAhW,MAAAA,MAAM,CAACmuB,uBAAP,GAAiCnuB,MAAM,CAACmuB,uBAAP,IAAkC,EAAnE,CARG;;EAWHnuB,MAAAA,MAAM,CAACmuB,uBAAP,CAA+BlrB,IAA/B,CAAoC,YAAM;EACtCoO,QAAAA,OAAO,CAACnN,KAAR,CAAcf,IAAd,CAAmB,KAAnB;EACH,OAFD,EAXG;;EAgBHnD,MAAAA,MAAM,CAACouB,uBAAP,GAAiC,YAAM;EACnCpuB,QAAAA,MAAM,CAACmuB,uBAAP,CAA+BrrB,OAA/B,CAAuC,UAAAP,QAAQ,EAAI;EAC/CA,UAAAA,QAAQ;EACX,SAFD;EAGH,OAJD;EAKH;EACJ,GAjCW;EAmCZ;EACA8rB,EAAAA,QApCY,oBAoCHC,OApCG,EAoCM;EAAA;;EACd;EACA;EACA;EACA,QAAI3rB,EAAE,CAACxB,QAAH,CAAY,KAAKof,KAAL,CAAWgO,YAAvB,CAAJ,EAA0C;EAAA,kCACpB,KAAKhO,KAAL,CAAWgO,YAAX,EADoB;EAAA,UAC9B/c,KAD8B,yBAC9BA,KAD8B;;EAGtC,UAAI7O,EAAE,CAACb,KAAH,CAAS0P,KAAT,CAAJ,EAAqB;EACjB,aAAKxH,MAAL,CAAYwH,KAAZ,GAAoBA,KAApB;EACAxF,QAAAA,EAAE,CAACmb,QAAH,CAAYhkB,IAAZ,CAAiB,IAAjB;EACA;EACH;EACJ,KAZa;;;EAed,QAAMyC,GAAG,GAAG,KAAKoE,MAAL,CAAYxJ,IAAZ,CAAiByjB,MAA7B;;EACA,QAAIthB,EAAE,CAAChC,MAAH,CAAUiF,GAAV,KAAkB,CAACjD,EAAE,CAACb,KAAH,CAAS8D,GAAT,CAAvB,EAAsC;EAClC,UAAM/D,GAAG,GAAGgO,MAAM,CAAC,KAAK7F,MAAL,CAAYsU,IAAZ,CAAiBjN,OAAjB,CAAyBtF,GAA1B,EAA+BuiB,OAA/B,EAAwC1oB,GAAxC,CAAlB;EAEAqM,MAAAA,KAAK,CAACpQ,GAAD,CAAL,CACK2C,IADL,CACU,UAAAgP,MAAM,EAAI;EACZ,YAAI7Q,EAAE,CAAC3B,MAAH,CAAUwS,MAAV,CAAJ,EAAuB;EACnB,UAAA,MAAI,CAACxJ,MAAL,CAAYwH,KAAZ,GAAoBgC,MAAM,CAACgb,KAAP,CAAa,CAAb,EAAgBC,OAAhB,CAAwBjd,KAA5C;EACAxF,UAAAA,EAAE,CAACmb,QAAH,CAAYhkB,IAAZ,CAAiB,MAAjB;EACH;EACJ,OANL,EAOKsQ,KAPL,CAOW,YAAM,EAPjB;EAQH;EACJ,GAhEW;EAkEZ;EACAqY,EAAAA,cAnEY,4BAmEK;EACb,QAAMtK,KAAK,GAAG,KAAKxX,MAAL,CAAYwX,KAAZ,CAAkB3e,KAAlB,CAAwB,GAAxB,CAAd;EACA,SAAKyB,QAAL,CAAcI,OAAd,CAAsB8F,KAAtB,CAA4ByhB,aAA5B,aAA+C,MAAMzK,KAAK,CAAC,CAAD,CAAX,GAAiBA,KAAK,CAAC,CAAD,CAArE;EACH,GAtEW;EAwEZ;EACAtd,EAAAA,KAzEY,sBAyEJ;EACJ,QAAMwJ,MAAM,GAAG,IAAf,CADI;;EAIJ,QAAMghB,SAAS,GAAGhhB,MAAM,CAAChB,KAAP,CAAaa,YAAb,CAA0B,IAA1B,CAAlB;;EACA,QAAI,CAAC5K,EAAE,CAACb,KAAH,CAAS4sB,SAAT,CAAD,IAAwBA,SAAS,CAAC9tB,UAAV,CAAqB,UAArB,CAA5B,EAA8D;EAC1D;EACH,KAPG;;;EAUJ,QAAI0M,MAAM,GAAGI,MAAM,CAAChB,KAAP,CAAaa,YAAb,CAA0B,KAA1B,CAAb,CAVI;;EAaJ,QAAI5K,EAAE,CAACb,KAAH,CAASwL,MAAT,CAAJ,EAAsB;EAClBA,MAAAA,MAAM,GAAGI,MAAM,CAAChB,KAAP,CAAaa,YAAb,CAA0B,KAAKvD,MAAL,CAAYxE,UAAZ,CAAuB+a,KAAvB,CAA6B3Y,EAAvD,CAAT;EACH,KAfG;;;EAkBJ,QAAM0mB,OAAO,GAAGjD,SAAO,CAAC/d,MAAD,CAAvB;EACA,QAAM1F,EAAE,GAAG6H,UAAU,CAAC/B,MAAM,CAAC9B,QAAR,CAArB,CAnBI;;EAAA,QAsBI2X,MAtBJ,GAsBe7V,MAtBf,CAsBI6V,MAtBJ;;EAyBJ,QAAMhf,SAAS,GAAGuB,aAAa,CAAC,KAAD,EAAQ;EAAE8B,MAAAA,EAAE,EAAFA,EAAF;EAAM2b,MAAAA,MAAM,EAANA;EAAN,KAAR,CAA/B;EACA7V,IAAAA,MAAM,CAAChB,KAAP,GAAehG,cAAc,CAACnC,SAAD,EAAYmJ,MAAM,CAAChB,KAAnB,CAA7B,CA1BI;;EA6BJ,QAAMiiB,SAAS,GAAG,SAAZA,SAAY,CAAA9e,SAAM;EAAA,kDAAkCye,OAAlC,cAA6Cze,SAA7C;EAAA,KAAxB,CA7BI;;;EAgCJ2W,IAAAA,SAAS,CAACmI,SAAS,CAAC,QAAD,CAAV,EAAsB,GAAtB,CAAT;EAAA,KACKlb,KADL,CACW;EAAA,aAAM+S,SAAS,CAACmI,SAAS,CAAC,IAAD,CAAV,EAAkB,GAAlB,CAAf;EAAA,KADX;EAAA,KAEKlb,KAFL,CAEW;EAAA,aAAM+S,SAAS,CAACmI,SAAS,CAAC,IAAD,CAAV,CAAf;EAAA,KAFX;EAAA,KAGKnqB,IAHL,CAGU,UAAAkiB,KAAK;EAAA,aAAI1a,EAAE,CAACob,SAAH,CAAajkB,IAAb,CAAkBuK,MAAlB,EAA0BgZ,KAAK,CAAC1Y,GAAhC,CAAJ;EAAA,KAHf,EAIKxJ,IAJL,CAIU,UAAAmqB,SAAS,EAAI;EACf;EACA,UAAI,CAACA,SAAS,CAAC/lB,QAAV,CAAmB,QAAnB,CAAL,EAAmC;EAC/B8E,QAAAA,MAAM,CAACpJ,QAAP,CAAgBif,MAAhB,CAAuB/Y,KAAvB,CAA6Bgd,cAA7B,GAA8C,OAA9C;EACH;EACJ,KATL,EAUK/T,KAVL,CAUW,YAAM,EAVjB,EAhCI;EA6CJ;;EACA/F,IAAAA,MAAM,CAAC6S,KAAP,GAAe,IAAIvgB,MAAM,CAACkuB,EAAP,CAAUxB,MAAd,CAAqB9kB,EAArB,EAAyB;EACpC0mB,MAAAA,OAAO,EAAPA,OADoC;EAEpCM,MAAAA,UAAU,EAAE;EACRvN,QAAAA,QAAQ,EAAE3T,MAAM,CAAC1D,MAAP,CAAcqX,QAAd,GAAyB,CAAzB,GAA6B,CAD/B;EACkC;EAC1CwN,QAAAA,EAAE,EAAEnhB,MAAM,CAAC1D,MAAP,CAAc6kB,EAFV;EAEc;EACtBxa,QAAAA,QAAQ,EAAE3G,MAAM,CAAC1L,SAAP,CAAiBgK,EAAjB,GAAsB,CAAtB,GAA0B,CAH5B;EAG+B;EACvC8iB,QAAAA,GAAG,EAAE,CAJG;EAIA;EACRC,QAAAA,QAAQ,EAAE,CALF;EAKK;EACbC,QAAAA,cAAc,EAAE,CANR;EAMW;EACnBC,QAAAA,cAAc,EAAE,CAPR;EAOW;EACnBC,QAAAA,SAAS,EAAE,CARH;EAQM;EACdrjB,QAAAA,WAAW,EAAE,CATL;EASQ;EAEhB;EACA;EACAsjB,QAAAA,eAAe,EAAEnvB,MAAM,GAAGA,MAAM,CAACwU,QAAP,CAAgB6J,IAAnB,GAA0B,IAbzC;EAeR;EACA+Q,QAAAA,cAAc,EAAE1hB,MAAM,CAAC2H,QAAP,CAAgBwK,MAAhB,GAAyB,CAAzB,GAA6B,CAhBrC;EAiBRwP,QAAAA,YAAY,EAAE3hB,MAAM,CAAC1D,MAAP,CAAcqL,QAAd,CAAuBoH;EAjB7B,OAFwB;EAqBpC7Z,MAAAA,MAAM,EAAE;EACJ0sB,QAAAA,OADI,mBACI7tB,KADJ,EACW;EACX;EACA,cAAI,CAACiM,MAAM,CAAChB,KAAP,CAAasJ,KAAlB,EAAyB;EACrB,gBAAMwS,IAAI,GAAG/mB,KAAK,CAACyR,IAAnB,CADqB;;EAGrB,gBAAMqc,OAAO,GACT;EACI,iBAAG,sOADP;EAEI,iBAAG,sHAFP;EAGI,mBAAK,oIAHT;EAII,mBAAK,sFAJT;EAKI,mBAAK;EALT,cAME/G,IANF,KAMW,0BAPf;EASA9a,YAAAA,MAAM,CAAChB,KAAP,CAAasJ,KAAb,GAAqB;EAAEwS,cAAAA,IAAI,EAAJA,IAAF;EAAQ+G,cAAAA,OAAO,EAAPA;EAAR,aAArB;EAEA9rB,YAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,OAAxC;EACH;EACJ,SAnBG;EAoBJ8iB,QAAAA,oBApBI,gCAoBiB/tB,KApBjB,EAoBwB;EACxB;EACA,cAAMguB,QAAQ,GAAGhuB,KAAK,CAAC0E,MAAvB,CAFwB;;EAKxBuH,UAAAA,MAAM,CAAChB,KAAP,CAAagjB,YAAb,GAA4BD,QAAQ,CAACE,eAAT,EAA5B;EAEAlsB,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,YAAxC;EACH,SA5BG;EA6BJkjB,QAAAA,OA7BI,mBA6BInuB,KA7BJ,EA6BW;EACX;EACA,cAAIkB,EAAE,CAACxB,QAAH,CAAYuM,MAAM,CAAChB,KAAP,CAAauB,IAAzB,CAAJ,EAAoC;EAChC;EACH,WAJU;;;EAMX,cAAMwhB,QAAQ,GAAGhuB,KAAK,CAAC0E,MAAvB,CANW;;EASXkL,UAAAA,OAAO,CAACgd,QAAR,CAAiBlrB,IAAjB,CAAsBuK,MAAtB,EAA8B4gB,OAA9B,EATW;;EAYX5gB,UAAAA,MAAM,CAAChB,KAAP,CAAauB,IAAb,GAAoB,YAAM;EACtB2d,YAAAA,qBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,IAAjC;EACA+hB,YAAAA,QAAQ,CAACI,SAAT;EACH,WAHD;;EAKAniB,UAAAA,MAAM,CAAChB,KAAP,CAAaqI,KAAb,GAAqB,YAAM;EACvB6W,YAAAA,qBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,KAAjC;EACA+hB,YAAAA,QAAQ,CAACK,UAAT;EACH,WAHD;;EAKApiB,UAAAA,MAAM,CAAChB,KAAP,CAAakgB,IAAb,GAAoB,YAAM;EACtB6C,YAAAA,QAAQ,CAACM,SAAT;EACH,WAFD;;EAIAriB,UAAAA,MAAM,CAAChB,KAAP,CAAamJ,QAAb,GAAwB4Z,QAAQ,CAAC7B,WAAT,EAAxB;EACAlgB,UAAAA,MAAM,CAAChB,KAAP,CAAamB,MAAb,GAAsB,IAAtB,CA3BW;;EA8BXH,UAAAA,MAAM,CAAChB,KAAP,CAAakB,WAAb,GAA2B,CAA3B;EACApP,UAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,aAApC,EAAmD;EAC/CvK,YAAAA,GAD+C,iBACzC;EACF,qBAAOzD,MAAM,CAAC+wB,QAAQ,CAAC9B,cAAT,EAAD,CAAb;EACH,aAH8C;EAI/ChgB,YAAAA,GAJ+C,eAI3CoG,IAJ2C,EAIrC;EACN;EACA,kBAAIrG,MAAM,CAACG,MAAP,IAAiB,CAACH,MAAM,CAAC6S,KAAP,CAAasL,SAAnC,EAA8C;EAC1Cne,gBAAAA,MAAM,CAAC6S,KAAP,CAAapL,IAAb;EACH,eAJK;;;EAONzH,cAAAA,MAAM,CAAChB,KAAP,CAAayO,OAAb,GAAuB,IAAvB;EACA1X,cAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,SAAxC,EARM;;EAWN+iB,cAAAA,QAAQ,CAAC/E,MAAT,CAAgB3W,IAAhB;EACH;EAhB8C,WAAnD,EA/BW;;EAmDXvV,UAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,cAApC,EAAoD;EAChDvK,YAAAA,GADgD,iBAC1C;EACF,qBAAOstB,QAAQ,CAACE,eAAT,EAAP;EACH,aAH+C;EAIhDhiB,YAAAA,GAJgD,eAI5CzP,KAJ4C,EAIrC;EACPuxB,cAAAA,QAAQ,CAACzC,eAAT,CAAyB9uB,KAAzB;EACH;EAN+C,WAApD,EAnDW;;EAAA,cA6DLwX,MA7DK,GA6DMhI,MAAM,CAAC1D,MA7Db,CA6DL0L,MA7DK;EA8DXlX,UAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,QAApC,EAA8C;EAC1CvK,YAAAA,GAD0C,iBACpC;EACF,qBAAOuT,MAAP;EACH,aAHyC;EAI1C/H,YAAAA,GAJ0C,eAItCzP,KAJsC,EAI/B;EACPwX,cAAAA,MAAM,GAAGxX,KAAT;EACAuxB,cAAAA,QAAQ,CAAC3C,SAAT,CAAmBpX,MAAM,GAAG,GAA5B;EACAjS,cAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,cAAxC;EACH;EARyC,WAA9C,EA9DW;;EAAA,cA0ELqN,KA1EK,GA0EKrM,MAAM,CAAC1D,MA1EZ,CA0EL+P,KA1EK;EA2EXvb,UAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,YAAAA,GADyC,iBACnC;EACF,qBAAO4X,KAAP;EACH,aAHwC;EAIzCpM,YAAAA,GAJyC,eAIrCzP,KAJqC,EAI9B;EACP,kBAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B6b,KAA3C;EACAA,cAAAA,KAAK,GAAGvX,MAAR;EACAitB,cAAAA,QAAQ,CAACjtB,MAAM,GAAG,MAAH,GAAY,QAAnB,CAAR;EACAiB,cAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,cAAxC;EACH;EATwC,WAA7C,EA3EW;;EAwFXlO,UAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,YAApC,EAAkD;EAC9CvK,YAAAA,GAD8C,iBACxC;EACF,qBAAOstB,QAAQ,CAACrC,WAAT,EAAP;EACH;EAH6C,WAAlD,EAxFW;;EA+FX5uB,UAAAA,MAAM,CAAC0D,cAAP,CAAsBwL,MAAM,CAAChB,KAA7B,EAAoC,OAApC,EAA6C;EACzCvK,YAAAA,GADyC,iBACnC;EACF,qBAAOuL,MAAM,CAACE,WAAP,KAAuBF,MAAM,CAACmI,QAArC;EACH;EAHwC,WAA7C,EA/FW;;EAsGXnI,UAAAA,MAAM,CAACzL,OAAP,CAAewX,KAAf,GAAuBgW,QAAQ,CAACO,yBAAT,EAAvB,CAtGW;;EAyGX,cAAItiB,MAAM,CAAC1L,SAAP,CAAiBgK,EAArB,EAAyB;EACrB0B,YAAAA,MAAM,CAAChB,KAAP,CAAa7G,YAAb,CAA0B,UAA1B,EAAsC,CAAC,CAAvC;EACH;;EAEDpC,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,YAAxC;EACAjJ,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,gBAAxC,EA9GW;;EAiHXujB,UAAAA,aAAa,CAACviB,MAAM,CAACka,MAAP,CAAcsI,SAAf,CAAb,CAjHW;;EAoHXxiB,UAAAA,MAAM,CAACka,MAAP,CAAcsI,SAAd,GAA0BC,WAAW,CAAC,YAAM;EACxC;EACAziB,YAAAA,MAAM,CAAChB,KAAP,CAAa2N,QAAb,GAAwBoV,QAAQ,CAACW,sBAAT,EAAxB,CAFwC;;EAKxC,gBAAI1iB,MAAM,CAAChB,KAAP,CAAa2jB,YAAb,KAA8B,IAA9B,IAAsC3iB,MAAM,CAAChB,KAAP,CAAa2jB,YAAb,GAA4B3iB,MAAM,CAAChB,KAAP,CAAa2N,QAAnF,EAA6F;EACzF5W,cAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,UAAxC;EACH,aAPuC;;;EAUxCgB,YAAAA,MAAM,CAAChB,KAAP,CAAa2jB,YAAb,GAA4B3iB,MAAM,CAAChB,KAAP,CAAa2N,QAAzC,CAVwC;;EAaxC,gBAAI3M,MAAM,CAAChB,KAAP,CAAa2N,QAAb,KAA0B,CAA9B,EAAiC;EAC7B4V,cAAAA,aAAa,CAACviB,MAAM,CAACka,MAAP,CAAcsI,SAAf,CAAb,CAD6B;;EAI7BzsB,cAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,gBAAxC;EACH;EACJ,WAnBoC,EAmBlC,GAnBkC,CAArC,CApHW;;EA0IXrI,UAAAA,UAAU,CAAC;EAAA,mBAAM2H,EAAE,CAACib,KAAH,CAAS9jB,IAAT,CAAcuK,MAAd,CAAN;EAAA,WAAD,EAA8B,EAA9B,CAAV;EACH,SAxKG;EAyKJ4iB,QAAAA,aAzKI,yBAyKU7uB,KAzKV,EAyKiB;EACjB;EACA,cAAMguB,QAAQ,GAAGhuB,KAAK,CAAC0E,MAAvB,CAFiB;;EAKjB8pB,UAAAA,aAAa,CAACviB,MAAM,CAACka,MAAP,CAAclE,OAAf,CAAb;EAEA,cAAM6M,MAAM,GAAG7iB,MAAM,CAAChB,KAAP,CAAayO,OAAb,IAAwB,CAAC,CAAD,EAAI,CAAJ,EAAOvS,QAAP,CAAgBnH,KAAK,CAACyR,IAAtB,CAAvC;;EAEA,cAAIqd,MAAJ,EAAY;EACR;EACA7iB,YAAAA,MAAM,CAAChB,KAAP,CAAayO,OAAb,GAAuB,KAAvB;EACA1X,YAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,QAAxC;EACH,WAbgB;EAgBjB;EACA;EACA;EACA;EACA;EACA;;;EACA,kBAAQjL,KAAK,CAACyR,IAAd;EACI,iBAAK,CAAC,CAAN;EACI;EACAzP,cAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,YAAxC,EAFJ;;EAKIgB,cAAAA,MAAM,CAAChB,KAAP,CAAa2N,QAAb,GAAwBoV,QAAQ,CAACW,sBAAT,EAAxB;EACA3sB,cAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,UAAxC;EAEA;;EAEJ,iBAAK,CAAL;EACIkf,cAAAA,qBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,KAAjC,EADJ;;EAII,kBAAIA,MAAM,CAAChB,KAAP,CAAamV,IAAjB,EAAuB;EACnB;EACA4N,gBAAAA,QAAQ,CAACM,SAAT;EACAN,gBAAAA,QAAQ,CAACI,SAAT;EACH,eAJD,MAIO;EACHpsB,gBAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,OAAxC;EACH;;EAED;;EAEJ,iBAAK,CAAL;EACI;EACA,kBAAIgB,MAAM,CAAChB,KAAP,CAAamB,MAAb,IAAuB,CAACH,MAAM,CAAC6S,KAAP,CAAasL,SAAzC,EAAoD;EAChDne,gBAAAA,MAAM,CAAChB,KAAP,CAAaqI,KAAb;EACH,eAFD,MAEO;EACH6W,gBAAAA,qBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,IAAjC;EAEAjK,gBAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,SAAxC,EAHG;;EAMHgB,gBAAAA,MAAM,CAACka,MAAP,CAAclE,OAAd,GAAwByM,WAAW,CAAC,YAAM;EACtC1sB,kBAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,YAAxC;EACH,iBAFkC,EAEhC,EAFgC,CAAnC,CANG;EAWH;EACA;;EACA,oBAAIgB,MAAM,CAAChB,KAAP,CAAamJ,QAAb,KAA0B4Z,QAAQ,CAAC7B,WAAT,EAA9B,EAAsD;EAClDlgB,kBAAAA,MAAM,CAAChB,KAAP,CAAamJ,QAAb,GAAwB4Z,QAAQ,CAAC7B,WAAT,EAAxB;EACAnqB,kBAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAAChB,KAAjC,EAAwC,gBAAxC;EACH;EACJ;;EAED;;EAEJ,iBAAK,CAAL;EACI;EACA,kBAAI,CAACgB,MAAM,CAACqM,KAAZ,EAAmB;EACfrM,gBAAAA,MAAM,CAAC6S,KAAP,CAAaiQ,MAAb;EACH;;EACD5E,cAAAA,qBAAmB,CAACzoB,IAApB,CAAyBuK,MAAzB,EAAiC,KAAjC;EAEA;;EAEJ;EACI;EA5DR;;EA+DAjK,UAAAA,YAAY,CAACN,IAAb,CAAkBuK,MAAlB,EAA0BA,MAAM,CAACpJ,QAAP,CAAgBC,SAA1C,EAAqD,aAArD,EAAoE,KAApE,EAA2E;EACvEikB,YAAAA,IAAI,EAAE/mB,KAAK,CAACyR;EAD2D,WAA3E;EAGH;EAjQG;EArB4B,KAAzB,CAAf;EAyRH;EAhZW,CAAhB;;EClCA;AACA,EAQA,IAAMxG,KAAK,GAAG;EACV;EACA0S,EAAAA,KAFU,mBAEF;EACJ;EACA,QAAI,CAAC,KAAK1S,KAAV,EAAiB;EACb,WAAK6B,KAAL,CAAW0H,IAAX,CAAgB,yBAAhB;EACA;EACH,KALG;;;EAQJhO,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBlH,IAAvB,CAA4BuE,OAA5B,CAAoC,KAApC,EAA2C,KAAKvE,IAAhD,CAA1B,EAAiF,IAAjF,CAAX,CARI;;EAWJkF,IAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuB2B,QAAvB,CAAgCtE,OAAhC,CAAwC,KAAxC,EAA+C,KAAKsE,QAApD,CAA1B,EAAyF,IAAzF,CAAX,CAXI;EAcJ;;EACA,QAAI,KAAK2S,OAAT,EAAkB;EACdtW,MAAAA,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuBlH,IAAvB,CAA4BuE,OAA5B,CAAoC,KAApC,EAA2C,OAA3C,CAA1B,EAA+E,IAA/E,CAAX;EACH,KAjBG;;;EAoBJ,QAAI,KAAK+X,OAAT,EAAkB;EACd;EACA,WAAK/a,QAAL,CAAcI,OAAd,GAAwBoB,aAAa,CAAC,KAAD,EAAQ;EACzC6B,QAAAA,KAAK,EAAE,KAAKqC,MAAL,CAAYC,UAAZ,CAAuByB;EADW,OAAR,CAArC,CAFc;;EAOdjH,MAAAA,IAAI,CAAC,KAAKiI,KAAN,EAAa,KAAKpI,QAAL,CAAcI,OAA3B,CAAJ,CAPc;;EAUd,WAAKJ,QAAL,CAAcif,MAAd,GAAuBzd,aAAa,CAAC,KAAD,EAAQ;EACxC6B,QAAAA,KAAK,EAAE,KAAKqC,MAAL,CAAYC,UAAZ,CAAuBsZ;EADU,OAAR,CAApC;EAIA,WAAKjf,QAAL,CAAcI,OAAd,CAAsBW,WAAtB,CAAkC,KAAKf,QAAL,CAAcif,MAAhD;EACH;;EAED,QAAI,KAAK9W,OAAT,EAAkB;EACdU,MAAAA,KAAK,CAACM,MAAN,CAAatK,IAAb,CAAkB,IAAlB;EACH,KAFD,MAEO,IAAI,KAAKmc,SAAT,EAAoB;EACvBjO,MAAAA,OAAO,CAAC+N,KAAR,CAAcjc,IAAd,CAAmB,IAAnB;EACH,KAFM,MAEA,IAAI,KAAKyZ,OAAT,EAAkB;EACrBxL,MAAAA,KAAK,CAACgO,KAAN,CAAYjc,IAAZ,CAAiB,IAAjB;EACH;EACJ;EA9CS,CAAd;;MCOMstB;;;EACF;;;;;EAKA,eAAY/iB,MAAZ,EAAoB;EAAA;;EAAA;;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACA,SAAKwW,WAAL,GAAmBxW,MAAM,CAAC1D,MAAP,CAAcyZ,GAAd,CAAkBS,WAArC;EACA,SAAKR,OAAL,GAAe,KAAf;EACA,SAAK8F,WAAL,GAAmB,KAAnB;EACA,SAAKllB,QAAL,GAAgB;EACZC,MAAAA,SAAS,EAAE,IADC;EAEZmsB,MAAAA,gBAAgB,EAAE;EAFN,KAAhB;EAIA,SAAKC,OAAL,GAAe,IAAf;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKjuB,MAAL,GAAc,EAAd;EACA,SAAKkuB,WAAL,GAAmB,IAAnB;EACA,SAAKC,cAAL,GAAsB,IAAtB,CAdgB;;EAiBhB,SAAKtH,cAAL,GAAsB,IAAItlB,OAAJ,CAAY,UAACC,OAAD,EAAU+N,MAAV,EAAqB;EACnD;EACA,MAAA,KAAI,CAACjP,EAAL,CAAQ,QAAR,EAAkBkB,OAAlB,EAFmD;;;EAKnD,MAAA,KAAI,CAAClB,EAAL,CAAQ,OAAR,EAAiBiP,MAAjB;EACH,KANqB,CAAtB;EAQA,SAAKjE,IAAL;EACH;;;;;EAQD;;;6BAGO;EAAA;;EACH,UAAI,KAAKwD,OAAT,EAAkB;EACd;EACA,YAAI,CAAC/O,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAACikB,MAAjB,CAAD,IAA6B,CAACthB,EAAE,CAAC3B,MAAH,CAAUhB,MAAM,CAACikB,MAAP,CAAc+M,GAAxB,CAAlC,EAAgE;EAC5D9F,UAAAA,UAAU,CAAC,KAAKxd,MAAL,CAAY1D,MAAZ,CAAmBsU,IAAnB,CAAwB8E,SAAxB,CAAkCF,GAAnC,CAAV,CACK1e,IADL,CACU,YAAM;EACR,YAAA,MAAI,CAACN,KAAL;EACH,WAHL,EAIKuP,KAJL,CAIW,YAAM;EACT;EACA,YAAA,MAAI,CAACwd,OAAL,CAAa,OAAb,EAAsB,IAAIze,KAAJ,CAAU,+BAAV,CAAtB;EACH,WAPL;EAQH,SATD,MASO;EACH,eAAKtO,KAAL;EACH;EACJ;EACJ;EAED;;;;;;iCAGQ;EAAA;;EACJ;EACA;EACA,WAAKgtB,gBAAL,CAAsB,KAAtB,EAA6B,SAA7B,EAHI;;EAMJ,WAAKzH,cAAL,CAAoBjlB,IAApB,CAAyB,YAAM;EAC3B,QAAA,MAAI,CAAC2sB,gBAAL,CAAsB,sBAAtB;EACH,OAFD,EANI;;EAWJ,WAAK7X,SAAL,GAXI;;EAcJ,WAAK8X,QAAL;EACH;;;;;EAmBD;;;;;;;;iCAQW;EACP;EACA,WAAK9sB,QAAL,CAAcC,SAAd,GAA0BuB,aAAa,CAAC,KAAD,EAAQ;EAC3C6B,QAAAA,KAAK,EAAE,KAAK+F,MAAL,CAAY1D,MAAZ,CAAmBC,UAAnB,CAA8BwZ;EADM,OAAR,CAAvC;EAGA,WAAK/V,MAAL,CAAYpJ,QAAZ,CAAqBC,SAArB,CAA+Bc,WAA/B,CAA2C,KAAKf,QAAL,CAAcC,SAAzD,EALO;;EAQP0f,MAAAA,MAAM,CAAC+M,GAAP,CAAW5b,QAAX,CAAoBic,YAApB,CAAiCpN,MAAM,CAAC+M,GAAP,CAAWM,cAAX,CAA0BC,SAA1B,CAAoCC,OAArE,EARO;;EAWPvN,MAAAA,MAAM,CAAC+M,GAAP,CAAW5b,QAAX,CAAoBqc,SAApB,CAA8B,KAAK/jB,MAAL,CAAY1D,MAAZ,CAAmByZ,GAAnB,CAAuBhH,QAArD,EAXO;EAcP;;EACA,WAAKnY,QAAL,CAAcosB,gBAAd,GAAiC,IAAIzM,MAAM,CAAC+M,GAAP,CAAWU,kBAAf,CAAkC,KAAKptB,QAAL,CAAcC,SAAhD,CAAjC,CAfO;;EAkBP,WAAKotB,UAAL;EACH;EAED;;;;;;mCAGa;EAAA;;EAAA,UACDptB,SADC,GACa,KAAKmJ,MAAL,CAAYpJ,QADzB,CACDC,SADC;;EAGT,UAAI;EACA;EACA,aAAKqsB,MAAL,GAAc,IAAI3M,MAAM,CAAC+M,GAAP,CAAWY,SAAf,CAAyB,KAAKttB,QAAL,CAAcosB,gBAAvC,CAAd,CAFA;;EAKA,aAAKE,MAAL,CAAYxuB,gBAAZ,CACI6hB,MAAM,CAAC+M,GAAP,CAAWa,qBAAX,CAAiCC,IAAjC,CAAsCC,kBAD1C,EAEI,UAAAtwB,KAAK;EAAA,iBAAI,MAAI,CAACuwB,kBAAL,CAAwBvwB,KAAxB,CAAJ;EAAA,SAFT,EAGI,KAHJ;EAKA,aAAKmvB,MAAL,CAAYxuB,gBAAZ,CAA6B6hB,MAAM,CAAC+M,GAAP,CAAWiB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA1D,EAAoE,UAAAlc,KAAK;EAAA,iBAAI,MAAI,CAACmc,SAAL,CAAenc,KAAf,CAAJ;EAAA,SAAzE,EAAoG,KAApG,EAVA;;EAaA,YAAM5D,OAAO,GAAG,IAAI6R,MAAM,CAAC+M,GAAP,CAAWoB,UAAf,EAAhB;EACAhgB,QAAAA,OAAO,CAACigB,QAAR,GAAmB,KAAKC,MAAxB,CAdA;EAiBA;;EACAlgB,QAAAA,OAAO,CAACmgB,iBAAR,GAA4BhuB,SAAS,CAACiuB,WAAtC;EACApgB,QAAAA,OAAO,CAACqgB,kBAAR,GAA6BluB,SAAS,CAACoG,YAAvC;EACAyH,QAAAA,OAAO,CAACsgB,oBAAR,GAA+BnuB,SAAS,CAACiuB,WAAzC;EACApgB,QAAAA,OAAO,CAACugB,qBAAR,GAAgCpuB,SAAS,CAACoG,YAA1C,CArBA;;EAwBAyH,QAAAA,OAAO,CAACwgB,sBAAR,GAAiC,KAAjC,CAxBA;;EA2BAxgB,QAAAA,OAAO,CAACygB,kBAAR,CAA2B,CAAC,KAAKnlB,MAAL,CAAYqM,KAAxC;EAEA,aAAK6W,MAAL,CAAYe,UAAZ,CAAuBvf,OAAvB;EACH,OA9BD,CA8BE,OAAOtR,CAAP,EAAU;EACR,aAAKqxB,SAAL,CAAerxB,CAAf;EACH;EACJ;EAED;;;;;;;sCAI6B;EAAA;;EAAA,UAAf2G,KAAe,uEAAP,KAAO;;EACzB,UAAI,CAACA,KAAL,EAAY;EACRwoB,QAAAA,aAAa,CAAC,KAAKc,cAAN,CAAb;EACA,aAAKzsB,QAAL,CAAcC,SAAd,CAAwByD,eAAxB,CAAwC,iBAAxC;EACA;EACH;;EAED,UAAMiL,MAAM,GAAG,SAATA,MAAS,GAAM;EACjB,YAAMc,IAAI,GAAGD,UAAU,CAAC/E,IAAI,CAACmB,GAAL,CAAS,MAAI,CAACygB,OAAL,CAAamC,gBAAb,EAAT,EAA0C,CAA1C,CAAD,CAAvB;EACA,YAAMzb,KAAK,aAAM/F,IAAI,CAACnP,GAAL,CAAS,eAAT,EAA0B,MAAI,CAACuL,MAAL,CAAY1D,MAAtC,CAAN,gBAAyD+J,IAAzD,CAAX;;EACA,QAAA,MAAI,CAACzP,QAAL,CAAcC,SAAd,CAAwBsB,YAAxB,CAAqC,iBAArC,EAAwDwR,KAAxD;EACH,OAJD;;EAMA,WAAK0Z,cAAL,GAAsBZ,WAAW,CAACld,MAAD,EAAS,GAAT,CAAjC;EACH;EAED;;;;;;;yCAImBxR,OAAO;EAAA;;EACtB;EACA,UAAI,CAAC,KAAKiQ,OAAV,EAAmB;EACf;EACH,OAJqB;;;EAOtB,UAAM0D,QAAQ,GAAG,IAAI6O,MAAM,CAAC+M,GAAP,CAAW+B,oBAAf,EAAjB,CAPsB;;EAUtB3d,MAAAA,QAAQ,CAAC4d,2CAAT,GAAuD,IAAvD;EACA5d,MAAAA,QAAQ,CAAC6d,gBAAT,GAA4B,IAA5B,CAXsB;EActB;;EACA,WAAKtC,OAAL,GAAelvB,KAAK,CAACyxB,aAAN,CAAoB,KAAKxlB,MAAzB,EAAiC0H,QAAjC,CAAf,CAfsB;;EAkBtB,WAAKyb,SAAL,GAAiB,KAAKF,OAAL,CAAawC,YAAb,EAAjB,CAlBsB;;EAqBtB,UAAI,CAACxwB,EAAE,CAACb,KAAH,CAAS,KAAK+uB,SAAd,CAAL,EAA+B;EAC3B,aAAKA,SAAL,CAAe/tB,OAAf,CAAuB,UAAAswB,QAAQ,EAAI;EAC/B,cAAIA,QAAQ,KAAK,CAAb,IAAkBA,QAAQ,KAAK,CAAC,CAAhC,IAAqCA,QAAQ,GAAG,MAAI,CAAC1lB,MAAL,CAAYmI,QAAhE,EAA0E;EACtE,gBAAMwd,WAAW,GAAG,MAAI,CAAC3lB,MAAL,CAAYpJ,QAAZ,CAAqBiR,QAAzC;;EAEA,gBAAI5S,EAAE,CAACpB,OAAH,CAAW8xB,WAAX,CAAJ,EAA6B;EACzB,kBAAMC,aAAa,GAAG,MAAM,MAAI,CAAC5lB,MAAL,CAAYmI,QAAlB,GAA6Bud,QAAnD;EACA,kBAAMzxB,GAAG,GAAGmE,aAAa,CAAC,MAAD,EAAS;EAC9B6B,gBAAAA,KAAK,EAAE,MAAI,CAAC+F,MAAL,CAAY1D,MAAZ,CAAmBC,UAAnB,CAA8B6W;EADP,eAAT,CAAzB;EAIAnf,cAAAA,GAAG,CAAC6I,KAAJ,CAAUuQ,IAAV,aAAoBuY,aAAa,CAACxjB,QAAd,EAApB;EACAujB,cAAAA,WAAW,CAAChuB,WAAZ,CAAwB1D,GAAxB;EACH;EACJ;EACJ,SAdD;EAeH,OArCqB;;;EAwCtB,WAAKgvB,OAAL,CAAa7D,SAAb,CAAuB,KAAKpf,MAAL,CAAYgI,MAAnC,EAxCsB;EA2CtB;;EACA,WAAKib,OAAL,CAAavuB,gBAAb,CAA8B6hB,MAAM,CAAC+M,GAAP,CAAWiB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA3D,EAAqE,UAAAlc,KAAK;EAAA,eAAI,MAAI,CAACmc,SAAL,CAAenc,KAAf,CAAJ;EAAA,OAA1E,EA5CsB;;EA+CtBxX,MAAAA,MAAM,CAACgC,IAAP,CAAYyjB,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAA/B,EAAqChvB,OAArC,CAA6C,UAAAC,IAAI,EAAI;EACjD,QAAA,MAAI,CAAC4tB,OAAL,CAAavuB,gBAAb,CAA8B6hB,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwB/uB,IAAxB,CAA9B,EAA6D,UAAAtB,KAAK;EAAA,iBAAI,MAAI,CAAC+xB,SAAL,CAAe/xB,KAAf,CAAJ;EAAA,SAAlE;EACH,OAFD,EA/CsB;;EAoDtB,WAAKwvB,OAAL,CAAa,QAAb;EACH;EAED;;;;;;;;;gCAMUxvB,OAAO;EAAA;;EAAA,UACL8C,SADK,GACS,KAAKmJ,MAAL,CAAYpJ,QADrB,CACLC,SADK;EAIb;;EACA,UAAMkvB,EAAE,GAAGhyB,KAAK,CAACiyB,KAAN,EAAX,CALa;;EAQb,UAAM3vB,aAAa,GAAG,SAAhBA,aAAgB,CAAAhB,IAAI,EAAI;EAC1B,YAAMtB,KAAK,gBAASsB,IAAI,CAACuE,OAAL,CAAa,IAAb,EAAmB,EAAnB,EAAuBmJ,WAAvB,EAAT,CAAX;EACAhN,QAAAA,YAAY,CAACN,IAAb,CAAkB,MAAI,CAACuK,MAAvB,EAA+B,MAAI,CAACA,MAAL,CAAYhB,KAA3C,EAAkDjL,KAAlD;EACH,OAHD;;EAKA,cAAQA,KAAK,CAACsB,IAAd;EACI,aAAKkhB,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwB6B,MAA7B;EACI;EACA;EACA,eAAK1C,OAAL,CAAa,QAAb,EAHJ;;EAMIltB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb,CANJ;;EASI,eAAK6wB,aAAL,CAAmB,IAAnB;;EAEA,cAAI,CAACH,EAAE,CAACI,QAAH,EAAL,EAAoB;EAChB;EACAJ,YAAAA,EAAE,CAAC5Y,KAAH,GAAWtW,SAAS,CAACiuB,WAArB;EACAiB,YAAAA,EAAE,CAAC/V,MAAH,GAAYnZ,SAAS,CAACoG,YAAtB;EACH,WAfL;EAkBI;;;EACA;;EAEJ,aAAKsZ,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBgC,iBAA7B;EACI;EACA;EAEA;EACA/vB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb,CALJ;EAQI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;EAEA,eAAKgxB,OAAL;EACA;;EAEJ,aAAK9P,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBkC,uBAA7B;EACI;EACA;EACA;EAEAjwB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb;EAEA,eAAKkxB,YAAL;EAEA;;EAEJ,aAAKhQ,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBoC,wBAA7B;EACI;EACA;EACA;EACA;EAEAnwB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb;EAEA,eAAK6wB,aAAL;EAEA,eAAKO,aAAL;EAEA;;EAEJ,aAAKlQ,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBsC,OAA7B;EACA,aAAKnQ,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBuC,QAA7B;EACA,aAAKpQ,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBwC,QAA7B;EACA,aAAKrQ,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwByC,UAA7B;EACA,aAAKtQ,MAAM,CAAC+M,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwB0C,KAA7B;EACIzwB,UAAAA,aAAa,CAACtC,KAAK,CAACsB,IAAP,CAAb;EACA;;EAEJ;EACI;EAzFR;EA2FH;EAED;;;;;;;gCAIUtB,OAAO;EACb,WAAKgzB,MAAL;EACA,WAAK/mB,MAAL,CAAYa,KAAZ,CAAkB0H,IAAlB,CAAuB,WAAvB,EAAoCxU,KAApC;EACH;EAED;;;;;;;;kCAKY;EAAA;;EAAA,UACA8C,SADA,GACc,KAAKmJ,MAAL,CAAYpJ,QAD1B,CACAC,SADA;EAER,UAAIwP,IAAJ,CAFQ;;EAKR,WAAKrG,MAAL,CAAYxK,EAAZ,CAAe,OAAf,EAAwB,YAAM;EAC1B,QAAA,MAAI,CAAC0tB,MAAL,CAAY8D,eAAZ;EACH,OAFD;EAIA,WAAKhnB,MAAL,CAAYxK,EAAZ,CAAe,SAAf,EAA0B,YAAM;EAC5B6Q,QAAAA,IAAI,GAAG,MAAI,CAACrG,MAAL,CAAYE,WAAnB;EACA,eAAOmG,IAAP;EACH,OAHD;EAKA,WAAKrG,MAAL,CAAYxK,EAAZ,CAAe,QAAf,EAAyB,YAAM;EAC3B,YAAMyxB,UAAU,GAAG,MAAI,CAACjnB,MAAL,CAAYE,WAA/B;;EAEA,YAAIjL,EAAE,CAACb,KAAH,CAAS,MAAI,CAAC+uB,SAAd,CAAJ,EAA8B;EAC1B;EACH;;EAED,QAAA,MAAI,CAACA,SAAL,CAAe/tB,OAAf,CAAuB,UAACswB,QAAD,EAAWtuB,KAAX,EAAqB;EACxC,cAAIiP,IAAI,GAAGqf,QAAP,IAAmBA,QAAQ,GAAGuB,UAAlC,EAA8C;EAC1C,YAAA,MAAI,CAAChE,OAAL,CAAaiE,cAAb;;EACA,YAAA,MAAI,CAAC/D,SAAL,CAAegE,MAAf,CAAsB/vB,KAAtB,EAA6B,CAA7B;EACH;EACJ,SALD;EAMH,OAbD,EAdQ;EA8BR;;EACA9E,MAAAA,MAAM,CAACoC,gBAAP,CAAwB,QAAxB,EAAkC,YAAM;EACpC,YAAI,MAAI,CAACuuB,OAAT,EAAkB;EACd,UAAA,MAAI,CAACA,OAAL,CAAamE,MAAb,CAAoBvwB,SAAS,CAACiuB,WAA9B,EAA2CjuB,SAAS,CAACoG,YAArD,EAAmEsZ,MAAM,CAAC+M,GAAP,CAAW+D,QAAX,CAAoBC,MAAvF;EACH;EACJ,OAJD;EAKH;EAED;;;;;;6BAGO;EAAA;;EAAA,UACKzwB,SADL,GACmB,KAAKmJ,MAAL,CAAYpJ,QAD/B,CACKC,SADL;;EAGH,UAAI,CAAC,KAAKklB,cAAV,EAA0B;EACtB,aAAK0K,aAAL;EACH,OALE;;;EAQH,WAAK1K,cAAL,CACKjlB,IADL,CACU,YAAM;EACR;EACA,QAAA,MAAI,CAACF,QAAL,CAAcosB,gBAAd,CAA+BuE,UAA/B;;EAEA,YAAI;EACA,cAAI,CAAC,MAAI,CAACzL,WAAV,EAAuB;EACnB;EACA,YAAA,MAAI,CAACmH,OAAL,CAAauE,IAAb,CAAkB3wB,SAAS,CAACiuB,WAA5B,EAAyCjuB,SAAS,CAACoG,YAAnD,EAAiEsZ,MAAM,CAAC+M,GAAP,CAAW+D,QAAX,CAAoBC,MAArF,EAFmB;EAKnB;;;EACA,YAAA,MAAI,CAACrE,OAAL,CAAalpB,KAAb;EACH;;EAED,UAAA,MAAI,CAAC+hB,WAAL,GAAmB,IAAnB;EACH,SAXD,CAWE,OAAO2L,OAAP,EAAgB;EACd;EACA;EACA,UAAA,MAAI,CAAChD,SAAL,CAAegD,OAAf;EACH;EACJ,OArBL,EAsBK1hB,KAtBL,CAsBW,YAAM,EAtBjB;EAuBH;EAED;;;;;;sCAGgB;EACZ;EACA,WAAKnP,QAAL,CAAcC,SAAd,CAAwBiG,KAAxB,CAA8B4qB,MAA9B,GAAuC,EAAvC,CAFY;;EAKZ,WAAK1R,OAAL,GAAe,KAAf,CALY;;EAQZ,UAAI,KAAKhW,MAAL,CAAYE,WAAZ,GAA0B,KAAKF,MAAL,CAAYmI,QAA1C,EAAoD;EAChD,aAAKnI,MAAL,CAAYO,IAAZ;EACH;EACJ;EAED;;;;;;qCAGe;EACX;EACA,WAAK3J,QAAL,CAAcC,SAAd,CAAwBiG,KAAxB,CAA8B4qB,MAA9B,GAAuC,CAAvC,CAFW;;EAKX,WAAK1R,OAAL,GAAe,IAAf,CALW;;EAQX,WAAKhW,MAAL,CAAYqH,KAAZ;EACH;EAED;;;;;;;;;+BAMS;EACL;EACA,UAAI,KAAKyU,WAAT,EAAsB;EAClB,aAAK2K,aAAL;EACH,OAJI;;;EAOL,WAAKlD,OAAL,CAAa,OAAb,EAPK;;EAUL,WAAK8C,OAAL;EACH;EAED;;;;;;gCAGU;EAAA;;EACN;EACA,WAAKtK,cAAL,CACKjlB,IADL,CACU,YAAM;EACR;EACA,YAAI,OAAI,CAACmsB,OAAT,EAAkB;EACd,UAAA,OAAI,CAACA,OAAL,CAAa0E,OAAb;EACH,SAJO;;;EAOR,QAAA,OAAI,CAAC5L,cAAL,GAAsB,IAAItlB,OAAJ,CAAY,UAAAC,OAAO,EAAI;EACzC,UAAA,OAAI,CAAClB,EAAL,CAAQ,QAAR,EAAkBkB,OAAlB;;EACA,UAAA,OAAI,CAACsJ,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,CAAsB,OAAI,CAACmiB,OAA3B;EACH,SAHqB,CAAtB,CAPQ;;EAaR,QAAA,OAAI,CAACgB,UAAL;EACH,OAfL,EAgBKle,KAhBL,CAgBW,YAAM,EAhBjB;EAiBH;EAED;;;;;;;8BAIQhS,OAAgB;EAAA;;EAAA,wCAAN8B,IAAM;EAANA,QAAAA,IAAM;EAAA;;EACpB,UAAM+xB,QAAQ,GAAG,KAAK1yB,MAAL,CAAYnB,KAAZ,CAAjB;;EAEA,UAAIkB,EAAE,CAACvB,KAAH,CAASk0B,QAAT,CAAJ,EAAwB;EACpBA,QAAAA,QAAQ,CAACxyB,OAAT,CAAiB,UAAA8jB,OAAO,EAAI;EACxB,cAAIjkB,EAAE,CAACxB,QAAH,CAAYylB,OAAZ,CAAJ,EAA0B;EACtBA,YAAAA,OAAO,CAACpjB,KAAR,CAAc,OAAd,EAAoBD,IAApB;EACH;EACJ,SAJD;EAKH;EACJ;EAED;;;;;;;;;4BAMG9B,OAAOc,UAAU;EAChB,UAAI,CAACI,EAAE,CAACvB,KAAH,CAAS,KAAKwB,MAAL,CAAYnB,KAAZ,CAAT,CAAL,EAAmC;EAC/B,aAAKmB,MAAL,CAAYnB,KAAZ,IAAqB,EAArB;EACH;;EAED,WAAKmB,MAAL,CAAYnB,KAAZ,EAAmBwB,IAAnB,CAAwBV,QAAxB;EAEA,aAAO,IAAP;EACH;EAED;;;;;;;;;;;uCAQiBwR,MAAMnP,MAAM;EAAA;;EACzB,WAAK8I,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,sCAAoD5J,IAApD;EAEA,WAAKksB,WAAL,GAAmBzsB,UAAU,CAAC,YAAM;EAChC,QAAA,OAAI,CAACowB,MAAL;;EACA,QAAA,OAAI,CAACtD,gBAAL,CAAsB,oBAAtB;EACH,OAH4B,EAG1Bpd,IAH0B,CAA7B;EAIH;EAED;;;;;;;uCAIiBnP,MAAM;EACnB,UAAI,CAACjC,EAAE,CAAC5B,eAAH,CAAmB,KAAK+vB,WAAxB,CAAL,EAA2C;EACvC,aAAKpjB,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,sCAAoD5J,IAApD;EAEA+iB,QAAAA,YAAY,CAAC,KAAKmJ,WAAN,CAAZ;EACA,aAAKA,WAAL,GAAmB,IAAnB;EACH;EACJ;;;0BAliBa;EACV,aACI,KAAKpjB,MAAL,CAAYjB,OAAZ,IAAuB,KAAKiB,MAAL,CAAY2R,OAAnC,IAA8C,KAAK3R,MAAL,CAAY1D,MAAZ,CAAmByZ,GAAnB,CAAuB/R,OAArE,IAAgF,CAAC/O,EAAE,CAACb,KAAH,CAAS,KAAKoiB,WAAd,CADrF;EAGH;;;0BA4CY;EACT,UAAMhF,MAAM,GAAG;EACXqW,QAAAA,cAAc,EAAE,0BADL;EAEXC,QAAAA,YAAY,EAAE,0BAFH;EAGXC,QAAAA,MAAM,EAAEz1B,MAAM,CAACwU,QAAP,CAAgB3T,QAHb;EAIX60B,QAAAA,EAAE,EAAE3N,IAAI,CAACC,GAAL,EAJO;EAKX2N,QAAAA,QAAQ,EAAE,GALC;EAMXC,QAAAA,SAAS,EAAE,GANA;EAOXC,QAAAA,QAAQ,EAAE,KAAK3R;EAPJ,OAAf;EAUA,UAAM4R,IAAI,GAAG,4CAAb;EAEA,uBAAUA,IAAV,cAAkB7W,cAAc,CAACC,MAAD,CAAhC;EACH;;;;;;ECnGL,IAAM5R,MAAM,GAAG;EACX;EACAyoB,EAAAA,cAFW,0BAEIhzB,IAFJ,EAEUyC,UAFV,EAEsB;EAAA;;EAC7B,QAAI7C,EAAE,CAAChC,MAAH,CAAU6E,UAAV,CAAJ,EAA2B;EACvBY,MAAAA,aAAa,CAACrD,IAAD,EAAO,KAAK2J,KAAZ,EAAmB;EAC5BsB,QAAAA,GAAG,EAAExI;EADuB,OAAnB,CAAb;EAGH,KAJD,MAIO,IAAI7C,EAAE,CAACvB,KAAH,CAASoE,UAAT,CAAJ,EAA0B;EAC7BA,MAAAA,UAAU,CAAC1C,OAAX,CAAmB,UAAAynB,SAAS,EAAI;EAC5BnkB,QAAAA,aAAa,CAACrD,IAAD,EAAO,KAAI,CAAC2J,KAAZ,EAAmB6d,SAAnB,CAAb;EACH,OAFD;EAGH;EACJ,GAZU;EAcX;EACA;EACAyL,EAAAA,MAhBW,kBAgBJ93B,KAhBI,EAgBG;EAAA;;EACV,QAAI,CAACmR,OAAO,CAACnR,KAAD,EAAQ,gBAAR,CAAZ,EAAuC;EACnC,WAAKqQ,KAAL,CAAW0H,IAAX,CAAgB,uBAAhB;EACA;EACH,KAJS;;;EAOV9I,IAAAA,KAAK,CAACkB,cAAN,CAAqBlL,IAArB,CAA0B,IAA1B,EAPU;;EAUV,SAAKkyB,OAAL,CAAalyB,IAAb,CACI,IADJ,EAEI,YAAM;EACF;EACA,MAAA,MAAI,CAAClB,OAAL,CAAakM,OAAb,GAAuB,EAAvB,CAFE;;EAKF9H,MAAAA,aAAa,CAAC,MAAI,CAACqG,KAAN,CAAb;EACA,MAAA,MAAI,CAACA,KAAL,GAAa,IAAb,CANE;;EASF,UAAI/J,EAAE,CAACpB,OAAH,CAAW,MAAI,CAAC+C,QAAL,CAAcC,SAAzB,CAAJ,EAAyC;EACrC,QAAA,MAAI,CAACD,QAAL,CAAcC,SAAd,CAAwByD,eAAxB,CAAwC,OAAxC;EACH,OAXC;;;EAAA,UAcMqF,OAdN,GAcwBnP,KAdxB,CAcMmP,OAdN;EAAA,UAcetK,IAdf,GAcwB7E,KAdxB,CAce6E,IAdf;;EAAA,oCAe4CsK,OAf5C;EAAA;EAAA,yCAeOzB,QAfP;EAAA,UAeOA,QAfP,mCAekBuY,SAAS,CAAChX,KAf5B;EAAA,UAemCa,GAfnC,aAemCA,GAfnC;;EAgBF,UAAMioB,OAAO,GAAGrqB,QAAQ,KAAK,OAAb,GAAuB7I,IAAvB,GAA8B,KAA9C;EACA,UAAMyC,UAAU,GAAGoG,QAAQ,KAAK,OAAb,GAAuB,EAAvB,GAA4B;EAAEoC,QAAAA,GAAG,EAAHA;EAAF,OAA/C;EAEAxP,MAAAA,MAAM,CAACqF,MAAP,CAAc,MAAd,EAAoB;EAChB+H,QAAAA,QAAQ,EAARA,QADgB;EAEhB7I,QAAAA,IAAI,EAAJA,IAFgB;EAGhB;EACAf,QAAAA,SAAS,EAAEwJ,OAAO,CAACG,KAAR,CAAc5I,IAAd,EAAoB6I,QAApB,EAA8B,MAAI,CAAC5B,MAAL,CAAY6B,WAA1C,CAJK;EAKhB;EACAa,QAAAA,KAAK,EAAE5G,aAAa,CAACmwB,OAAD,EAAUzwB,UAAV;EANJ,OAApB,EAnBE;;EA6BF,MAAA,MAAI,CAAClB,QAAL,CAAcC,SAAd,CAAwBc,WAAxB,CAAoC,MAAI,CAACqH,KAAzC,EA7BE;;;EAgCF,UAAI/J,EAAE,CAACzB,OAAH,CAAWhD,KAAK,CAACmjB,QAAjB,CAAJ,EAAgC;EAC5B,QAAA,MAAI,CAACrX,MAAL,CAAYqX,QAAZ,GAAuBnjB,KAAK,CAACmjB,QAA7B;EACH,OAlCC;;;EAqCF,UAAI,MAAI,CAAC5U,OAAT,EAAkB;EACd,YAAI,MAAI,CAACzC,MAAL,CAAYksB,WAAhB,EAA6B;EACzB,UAAA,MAAI,CAACxpB,KAAL,CAAW7G,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;EACH;;EACD,YAAI,MAAI,CAACmE,MAAL,CAAYqX,QAAhB,EAA0B;EACtB,UAAA,MAAI,CAAC3U,KAAL,CAAW7G,YAAX,CAAwB,UAAxB,EAAoC,EAApC;EACH;;EACD,YAAI,CAAClD,EAAE,CAACb,KAAH,CAAS5D,KAAK,CAACqlB,MAAf,CAAL,EAA6B;EACzB,UAAA,MAAI,CAACA,MAAL,GAAcrlB,KAAK,CAACqlB,MAApB;EACH;;EACD,YAAI,MAAI,CAACvZ,MAAL,CAAY6X,IAAZ,CAAiBhC,MAArB,EAA6B;EACzB,UAAA,MAAI,CAACnT,KAAL,CAAW7G,YAAX,CAAwB,MAAxB,EAAgC,EAAhC;EACH;;EACD,YAAI,MAAI,CAACmE,MAAL,CAAY+P,KAAhB,EAAuB;EACnB,UAAA,MAAI,CAACrN,KAAL,CAAW7G,YAAX,CAAwB,OAAxB,EAAiC,EAAjC;EACH;;EACD,YAAI,MAAI,CAACmE,MAAL,CAAY6B,WAAhB,EAA6B;EACzB,UAAA,MAAI,CAACa,KAAL,CAAW7G,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;EACH;EACJ,OAxDC;;;EA2DFmG,MAAAA,EAAE,CAACgb,YAAH,CAAgB7jB,IAAhB,CAAqB,MAArB,EA3DE;;EA8DF,UAAI,MAAI,CAACsJ,OAAT,EAAkB;EACda,QAAAA,MAAM,CAACyoB,cAAP,CAAsB5yB,IAAtB,CAA2B,MAA3B,EAAiC,QAAjC,EAA2CkK,OAA3C;EACH,OAhEC;;;EAmEF,MAAA,MAAI,CAACrD,MAAL,CAAYwH,KAAZ,GAAoBtT,KAAK,CAACsT,KAA1B,CAnEE;;EAsEF9E,MAAAA,KAAK,CAAC0S,KAAN,CAAYjc,IAAZ,CAAiB,MAAjB,EAtEE;;EAyEF,UAAI,MAAI,CAACsJ,OAAT,EAAkB;EACd;EACA,YAAI,YAAYvO,KAAhB,EAAuB;EACnBoP,UAAAA,MAAM,CAACyoB,cAAP,CAAsB5yB,IAAtB,CAA2B,MAA3B,EAAiC,OAAjC,EAA0CjF,KAAK,CAACoe,MAAhD;EACH,SAJa;;;EAOd,QAAA,MAAI,CAAC5P,KAAL,CAAWwB,IAAX;EACH,OAjFC;;;EAoFF,UAAI,MAAI,CAACzB,OAAL,IAAiB,MAAI,CAAC8R,OAAL,IAAgB,CAAC,MAAI,CAACvc,SAAL,CAAegK,EAArD,EAA0D;EACtD;EACAA,QAAAA,EAAE,CAACib,KAAH,CAAS9jB,IAAT,CAAc,MAAd;EACH,OAvFC;;;EA0FF,MAAA,MAAI,CAACmS,UAAL,CAAgBrC,MAAhB;EACH,KA7FL,EA8FI,IA9FJ;EAgGH;EA1HU,CAAf;;ECgBA;EACA;EAEA;;MACMkjB;;;EACF,gBAAYhwB,MAAZ,EAAoBlE,OAApB,EAA6B;EAAA;;EAAA;;EACzB,SAAK2lB,MAAL,GAAc,EAAd,CADyB;;EAIzB,SAAK1jB,KAAL,GAAa,KAAb;EACA,SAAK0f,OAAL,GAAe,KAAf;EACA,SAAKwS,MAAL,GAAc,KAAd,CANyB;;EASzB,SAAKrpB,KAAL,GAAavB,OAAO,CAACuB,KAArB,CATyB;;EAYzB,SAAKL,KAAL,GAAavG,MAAb,CAZyB;;EAezB,QAAIxD,EAAE,CAAChC,MAAH,CAAU,KAAK+L,KAAf,CAAJ,EAA2B;EACvB,WAAKA,KAAL,GAAa1G,QAAQ,CAAC2C,gBAAT,CAA0B,KAAK+D,KAA/B,CAAb;EACH,KAjBwB;;;EAoBzB,QAAK1M,MAAM,CAACq2B,MAAP,IAAiB,KAAK3pB,KAAL,YAAsB2pB,MAAxC,IAAmD1zB,EAAE,CAACrB,QAAH,CAAY,KAAKoL,KAAjB,CAAnD,IAA8E/J,EAAE,CAACvB,KAAH,CAAS,KAAKsL,KAAd,CAAlF,EAAwG;EACpG;EACA,WAAKA,KAAL,GAAa,KAAKA,KAAL,CAAW,CAAX,CAAb;EACH,KAvBwB;;;EA0BzB,SAAK1C,MAAL,GAAcyD,MAAM,CAChB,EADgB,EAEhB2T,QAFgB,EAGhB+U,IAAI,CAAC/U,QAHW,EAIhBnf,OAAO,IAAI,EAJK,EAKf,YAAM;EACH,UAAI;EACA,eAAOiN,IAAI,CAACC,KAAL,CAAW,KAAI,CAACzC,KAAL,CAAWa,YAAX,CAAwB,kBAAxB,CAAX,CAAP;EACH,OAFD,CAEE,OAAOzM,CAAP,EAAU;EACR,eAAO,EAAP;EACH;EACJ,KAND,EALgB,CAApB,CA1ByB;;EAyCzB,SAAKwD,QAAL,GAAgB;EACZC,MAAAA,SAAS,EAAE,IADC;EAEZ8Q,MAAAA,QAAQ,EAAE,IAFE;EAGZP,MAAAA,OAAO,EAAE,EAHG;EAIZa,MAAAA,OAAO,EAAE,EAJG;EAKZJ,MAAAA,QAAQ,EAAE,EALE;EAMZC,MAAAA,MAAM,EAAE,EANI;EAOZJ,MAAAA,QAAQ,EAAE;EACN2H,QAAAA,KAAK,EAAE,IADD;EAEN9F,QAAAA,IAAI,EAAE,IAFA;EAGN0E,QAAAA,MAAM,EAAE,EAHF;EAIN7G,QAAAA,OAAO,EAAE;EAJH;EAPE,KAAhB,CAzCyB;;EAyDzB,SAAKO,QAAL,GAAgB;EACZwK,MAAAA,MAAM,EAAE,IADI;EAEZrG,MAAAA,YAAY,EAAE,CAAC,CAFH;EAGZuG,MAAAA,IAAI,EAAE,IAAI3gB,OAAJ;EAHM,KAAhB,CAzDyB;;EAgEzB,SAAKkW,UAAL,GAAkB;EACduK,MAAAA,MAAM,EAAE;EADM,KAAlB,CAhEyB;;EAqEzB,SAAK5d,OAAL,GAAe;EACXwX,MAAAA,KAAK,EAAE,EADI;EAEXtL,MAAAA,OAAO,EAAE;EAFE,KAAf,CArEyB;EA2EzB;;EACA,SAAKI,KAAL,GAAa,IAAIgW,OAAJ,CAAY,KAAKva,MAAL,CAAYuE,KAAxB,CAAb,CA5EyB;;EA+EzB,SAAKA,KAAL,CAAWC,GAAX,CAAe,QAAf,EAAyB,KAAKxE,MAA9B;EACA,SAAKuE,KAAL,CAAWC,GAAX,CAAe,SAAf,EAA0BhD,OAA1B,EAhFyB;;EAmFzB,QAAI7I,EAAE,CAAC5B,eAAH,CAAmB,KAAK2L,KAAxB,KAAkC,CAAC/J,EAAE,CAACpB,OAAH,CAAW,KAAKmL,KAAhB,CAAvC,EAA+D;EAC3D,WAAK6B,KAAL,CAAWyH,KAAX,CAAiB,0CAAjB;EACA;EACH,KAtFwB;;;EAyFzB,QAAI,KAAKtJ,KAAL,CAAW5I,IAAf,EAAqB;EACjB,WAAKyK,KAAL,CAAW0H,IAAX,CAAgB,sBAAhB;EACA;EACH,KA5FwB;;;EA+FzB,QAAI,CAAC,KAAKjM,MAAL,CAAY0H,OAAjB,EAA0B;EACtB,WAAKnD,KAAL,CAAWyH,KAAX,CAAiB,kCAAjB;EACA;EACH,KAlGwB;EAqGzB;;;EACA,QAAI,CAACxK,OAAO,CAACG,KAAR,GAAgBI,GAArB,EAA0B;EACtB,WAAKwC,KAAL,CAAWyH,KAAX,CAAiB,0BAAjB;EACA;EACH,KAzGwB;;;EA4GzB,QAAMsH,KAAK,GAAG,KAAK5Q,KAAL,CAAW1H,SAAX,CAAqB,IAArB,CAAd;EACAsY,IAAAA,KAAK,CAAC+D,QAAN,GAAiB,KAAjB;EACA,SAAK/c,QAAL,CAAcgyB,QAAd,GAAyBhZ,KAAzB,CA9GyB;EAiHzB;;EACA,QAAMva,IAAI,GAAG,KAAK2J,KAAL,CAAWupB,OAAX,CAAmBxlB,WAAnB,EAAb,CAlHyB;;EAqHzB,QAAI0S,MAAM,GAAG,IAAb;EACA,QAAIthB,GAAG,GAAG,IAAV,CAtHyB;;EAyHzB,YAAQkB,IAAR;EACI,WAAK,KAAL;EACI;EACAogB,QAAAA,MAAM,GAAG,KAAKzW,KAAL,CAAWxD,aAAX,CAAyB,QAAzB,CAAT,CAFJ;;EAKI,YAAIvG,EAAE,CAACpB,OAAH,CAAW4hB,MAAX,CAAJ,EAAwB;EACpB;EACAthB,UAAAA,GAAG,GAAGid,QAAQ,CAACqE,MAAM,CAAC5V,YAAP,CAAoB,KAApB,CAAD,CAAd;EACA,eAAK3B,QAAL,GAAgByY,gBAAgB,CAACxiB,GAAG,CAACiO,QAAJ,EAAD,CAAhC,CAHoB;;EAMpB,eAAKxL,QAAL,CAAcC,SAAd,GAA0B,KAAKmI,KAA/B;EACA,eAAKA,KAAL,GAAayW,MAAb,CAPoB;;EAUpB,eAAK7e,QAAL,CAAcC,SAAd,CAAwB8C,SAAxB,GAAoC,EAApC,CAVoB;;EAapB,cAAIxF,GAAG,CAAC00B,MAAJ,CAAWh2B,MAAf,EAAuB;EACnB,gBAAMi2B,MAAM,GAAG,CAAC,GAAD,EAAM,MAAN,CAAf;;EAEA,gBAAIA,MAAM,CAAC5tB,QAAP,CAAgB/G,GAAG,CAAC40B,YAAJ,CAAiBt0B,GAAjB,CAAqB,UAArB,CAAhB,CAAJ,EAAuD;EACnD,mBAAK6H,MAAL,CAAYqX,QAAZ,GAAuB,IAAvB;EACH;;EACD,gBAAImV,MAAM,CAAC5tB,QAAP,CAAgB/G,GAAG,CAAC40B,YAAJ,CAAiBt0B,GAAjB,CAAqB,MAArB,CAAhB,CAAJ,EAAmD;EAC/C,mBAAK6H,MAAL,CAAY6X,IAAZ,CAAiBhC,MAAjB,GAA0B,IAA1B;EACH,aARkB;EAWnB;;;EACA,gBAAI,KAAKP,SAAT,EAAoB;EAChB,mBAAKtV,MAAL,CAAY6B,WAAZ,GAA0B2qB,MAAM,CAAC5tB,QAAP,CAAgB/G,GAAG,CAAC40B,YAAJ,CAAiBt0B,GAAjB,CAAqB,aAArB,CAAhB,CAA1B;EACA,mBAAK6H,MAAL,CAAY6kB,EAAZ,GAAiBhtB,GAAG,CAAC40B,YAAJ,CAAiBt0B,GAAjB,CAAqB,IAArB,CAAjB,CAFgB;EAGnB,aAHD,MAGO;EACH,mBAAK6H,MAAL,CAAY6B,WAAZ,GAA0B,IAA1B;EACH;EACJ;EACJ,SAhCD,MAgCO;EACH;EACA,eAAKD,QAAL,GAAgB,KAAKc,KAAL,CAAWa,YAAX,CAAwB,KAAKvD,MAAL,CAAYxE,UAAZ,CAAuB+a,KAAvB,CAA6B3U,QAArD,CAAhB,CAFG;;EAKH,eAAKc,KAAL,CAAW1E,eAAX,CAA2B,KAAKgC,MAAL,CAAYxE,UAAZ,CAAuB+a,KAAvB,CAA6B3U,QAAxD;EACH,SA3CL;;;EA8CI,YAAIjJ,EAAE,CAACb,KAAH,CAAS,KAAK8J,QAAd,KAA2B,CAACpN,MAAM,CAACgC,IAAP,CAAY2jB,SAAZ,EAAuBvb,QAAvB,CAAgC,KAAKgD,QAArC,CAAhC,EAAgF;EAC5E,eAAK2C,KAAL,CAAWyH,KAAX,CAAiB,gCAAjB;EACA;EACH,SAjDL;;;EAoDI,aAAKjT,IAAL,GAAYqhB,KAAK,CAAC1Y,KAAlB;EAEA;;EAEJ,WAAK,OAAL;EACA,WAAK,OAAL;EACI,aAAK3I,IAAL,GAAYA,IAAZ;EACA,aAAK6I,QAAL,GAAgBuY,SAAS,CAAChX,KAA1B,CAFJ;;EAKI,YAAI,KAAKT,KAAL,CAAW8d,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;EACxC,eAAKxgB,MAAL,CAAYksB,WAAZ,GAA0B,IAA1B;EACH;;EACD,YAAI,KAAKxpB,KAAL,CAAW8d,YAAX,CAAwB,UAAxB,CAAJ,EAAyC;EACrC,eAAKxgB,MAAL,CAAYqX,QAAZ,GAAuB,IAAvB;EACH;;EACD,YAAI,KAAK3U,KAAL,CAAW8d,YAAX,CAAwB,aAAxB,KAA0C,KAAK9d,KAAL,CAAW8d,YAAX,CAAwB,oBAAxB,CAA9C,EAA6F;EACzF,eAAKxgB,MAAL,CAAY6B,WAAZ,GAA0B,IAA1B;EACH;;EACD,YAAI,KAAKa,KAAL,CAAW8d,YAAX,CAAwB,OAAxB,CAAJ,EAAsC;EAClC,eAAKxgB,MAAL,CAAY+P,KAAZ,GAAoB,IAApB;EACH;;EACD,YAAI,KAAKrN,KAAL,CAAW8d,YAAX,CAAwB,MAAxB,CAAJ,EAAqC;EACjC,eAAKxgB,MAAL,CAAY6X,IAAZ,CAAiBhC,MAAjB,GAA0B,IAA1B;EACH;;EAED;;EAEJ;EACI,aAAKtR,KAAL,CAAWyH,KAAX,CAAiB,gCAAjB;EACA;EAnFR,KAzHyB;;;EAgNzB,SAAKhU,SAAL,GAAiBwJ,OAAO,CAACG,KAAR,CAAc,KAAK5I,IAAnB,EAAyB,KAAK6I,QAA9B,EAAwC,KAAK5B,MAAL,CAAY6B,WAApD,CAAjB,CAhNyB;;EAmNzB,QAAI,CAAC,KAAK7J,SAAL,CAAe+J,GAApB,EAAyB;EACrB,WAAKwC,KAAL,CAAWyH,KAAX,CAAiB,0BAAjB;EACA;EACH;;EAED,SAAKhT,cAAL,GAAsB,EAAtB,CAxNyB;;EA2NzB,SAAKsW,SAAL,GAAiB,IAAI2O,SAAJ,CAAc,IAAd,CAAjB,CA3NyB;;EA8NzB,SAAK7Z,OAAL,GAAe,IAAIqD,OAAJ,CAAY,IAAZ,CAAf,CA9NyB;;EAiOzB,SAAK/E,KAAL,CAAW5I,IAAX,GAAkB,IAAlB,CAjOyB;;EAoOzB,QAAI,CAACnB,EAAE,CAACpB,OAAH,CAAW,KAAK+C,QAAL,CAAcC,SAAzB,CAAL,EAA0C;EACtC,WAAKD,QAAL,CAAcC,SAAd,GAA0BuB,aAAa,CAAC,KAAD,CAAvC;EACArB,MAAAA,IAAI,CAAC,KAAKiI,KAAN,EAAa,KAAKpI,QAAL,CAAcC,SAA3B,CAAJ;EACH,KAvOwB;;;EA0OzByH,IAAAA,EAAE,CAACgb,YAAH,CAAgB7jB,IAAhB,CAAqB,IAArB,EA1OyB;;EA6OzBuJ,IAAAA,KAAK,CAAC0S,KAAN,CAAYjc,IAAZ,CAAiB,IAAjB,EA7OyB;;EAgPzB,QAAI,KAAK6G,MAAL,CAAYuE,KAAhB,EAAuB;EACnBrL,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAc,KAAKmB,QAAL,CAAcC,SAA5B,EAAuC,KAAKyF,MAAL,CAAYpH,MAAZ,CAAmBkU,IAAnB,CAAwB,GAAxB,CAAvC,EAAqE,UAAArV,KAAK,EAAI;EAC1E,QAAA,KAAI,CAAC8M,KAAL,CAAWC,GAAX,kBAAyB/M,KAAK,CAACsB,IAA/B;EACH,OAFD;EAGH,KApPwB;EAuPzB;;;EACA,QAAI,KAAK0J,OAAL,IAAiB,KAAK8R,OAAL,IAAgB,CAAC,KAAKvc,SAAL,CAAegK,EAArD,EAA0D;EACtDA,MAAAA,EAAE,CAACib,KAAH,CAAS9jB,IAAT,CAAc,IAAd;EACH,KA1PwB;;;EA6PzB,SAAKmW,SAAL,CAAe/U,SAAf,GA7PyB;;EAgQzB,SAAK+U,SAAL,CAAe0I,MAAf,GAhQyB;;EAmQzB,SAAK1M,UAAL,GAAkB,IAAIkQ,UAAJ,CAAe,IAAf,CAAlB,CAnQyB;;EAsQzB,QAAI,KAAKxb,MAAL,CAAYyZ,GAAZ,CAAgB/R,OAApB,EAA6B;EACzB,WAAK+R,GAAL,GAAW,IAAIgN,GAAJ,CAAQ,IAAR,CAAX;EACH,KAxQwB;;;EA2QzB,QAAI,KAAKzmB,MAAL,CAAYqX,QAAhB,EAA0B;EACtB,WAAKpT,IAAL;EACH,KA7QwB;;;EAgRzB,SAAK6Z,YAAL,GAAoB,CAApB;EACH;EAGD;EACA;;EAEA;;;;;;;;EA2BA;;;6BAGO;EACH,UAAI,CAACnlB,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAWuB,IAAvB,CAAL,EAAmC;EAC/B,eAAO,IAAP;EACH,OAHE;;;EAMH,aAAO,KAAKvB,KAAL,CAAWuB,IAAX,EAAP;EACH;EAED;;;;;;8BAGQ;EACJ,UAAI,CAAC,KAAKyV,OAAN,IAAiB,CAAC/gB,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAWqI,KAAvB,CAAtB,EAAqD;EACjD;EACH;;EAED,WAAKrI,KAAL,CAAWqI,KAAX;EACH;EAED;;;;;;;EA4BA;;;;iCAIW7W,OAAO;EACd;EACA,UAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,CAAC,KAAKwlB,OAAjD;;EAEA,UAAIlhB,MAAJ,EAAY;EACR,aAAKyL,IAAL;EACH,OAFD,MAEO;EACH,aAAK8G,KAAL;EACH;EACJ;EAED;;;;;;6BAGO;EACH,UAAI,KAAKtI,OAAT,EAAkB;EACd,aAAKsI,KAAL;EACA,aAAKC,OAAL;EACH,OAHD,MAGO,IAAIrS,EAAE,CAACxB,QAAH,CAAY,KAAKuL,KAAL,CAAWkgB,IAAvB,CAAJ,EAAkC;EACrC,aAAKlgB,KAAL,CAAWkgB,IAAX;EACH;EACJ;EAED;;;;;;gCAGU;EACN,WAAKhf,WAAL,GAAmB,CAAnB;EACH;EAED;;;;;;;6BAIO2D,UAAU;EACb,WAAK3D,WAAL,GAAmB,KAAKA,WAAL,IAAoBjL,EAAE,CAAC1B,MAAH,CAAUsQ,QAAV,IAAsBA,QAAtB,GAAiC,KAAKvH,MAAL,CAAYuH,QAAjE,CAAnB;EACH;EAED;;;;;;;8BAIQA,UAAU;EACd,WAAK3D,WAAL,GAAmB,KAAKA,WAAL,IAAoBjL,EAAE,CAAC1B,MAAH,CAAUsQ,QAAV,IAAsBA,QAAtB,GAAiC,KAAKvH,MAAL,CAAYuH,QAAjE,CAAnB;EACH;EAED;;;;;;;;EAyHA;;;;qCAIeqG,MAAM;EACjB,UAAMlC,MAAM,GAAG,KAAKhJ,KAAL,CAAWqN,KAAX,GAAmB,CAAnB,GAAuB,KAAKrE,MAA3C;EACA,WAAKA,MAAL,GAAcA,MAAM,IAAI/S,EAAE,CAAC1B,MAAH,CAAU2W,IAAV,IAAkBA,IAAlB,GAAyB,CAA7B,CAApB;EACH;EAED;;;;;;;qCAIeA,MAAM;EACjB,WAAKmR,cAAL,CAAoB,CAACnR,IAArB;EACH;EAED;;;;;;;;EAuQA;;;;qCAIe1Z,OAAO;EAClBmX,MAAAA,QAAQ,CAAC7S,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2BjF,KAA3B,EAAkC,KAAlC;EACH;EAED;;;;;;;;EAkEA;;;;gCAIU;EACN;EACA,UAAIsN,OAAO,CAACY,OAAZ,EAAqB;EACjB,aAAKM,KAAL,CAAWgqB,8BAAX;EACH;EACJ;EAED;;;;;;;qCAIel0B,QAAQ;EACnB;EACA,UAAI,KAAKR,SAAL,CAAegK,EAAf,IAAqB,CAAC,KAAK0d,OAA/B,EAAwC;EACpC;EACA,YAAMiN,QAAQ,GAAGpuB,QAAQ,CAAC,KAAKjE,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuByX,YAAjD,CAAzB,CAFoC;;EAKpC,YAAMxZ,KAAK,GAAG,OAAO1F,MAAP,KAAkB,WAAlB,GAAgCiI,SAAhC,GAA4C,CAACjI,MAA3D,CALoC;;EAQpC,YAAMo0B,MAAM,GAAG3uB,WAAW,CAAC,KAAK3D,QAAL,CAAcC,SAAf,EAA0B,KAAKyF,MAAL,CAAYC,UAAZ,CAAuByX,YAAjD,EAA+DxZ,KAA/D,CAA1B,CARoC;;EAWpC,YAAI0uB,MAAM,IAAI,KAAK5sB,MAAL,CAAYqK,QAAZ,CAAqBzL,QAArB,CAA8B,UAA9B,CAAV,IAAuD,CAACjG,EAAE,CAACb,KAAH,CAAS,KAAKkI,MAAL,CAAYoL,QAArB,CAA5D,EAA4F;EACxFf,UAAAA,QAAQ,CAAC4I,UAAT,CAAoB9Z,IAApB,CAAyB,IAAzB,EAA+B,KAA/B;EACH,SAbmC;;;EAgBpC,YAAIyzB,MAAM,KAAKD,QAAf,EAAyB;EACrB,cAAME,SAAS,GAAGD,MAAM,GAAG,gBAAH,GAAsB,eAA9C;EACAnzB,UAAAA,YAAY,CAACN,IAAb,CAAkB,IAAlB,EAAwB,KAAKuJ,KAA7B,EAAoCmqB,SAApC;EACH;;EAED,eAAO,CAACD,MAAR;EACH;;EAED,aAAO,KAAP;EACH;EAED;;;;;;;;4BAKGn1B,OAAOc,UAAU;EAChBW,MAAAA,EAAE,CAACC,IAAH,CAAQ,IAAR,EAAc,KAAKmB,QAAL,CAAcC,SAA5B,EAAuC9C,KAAvC,EAA8Cc,QAA9C;EACH;EAED;;;;;;;;8BAKKd,OAAOc,UAAU;EAClBc,MAAAA,IAAI,CAACF,IAAL,CAAU,IAAV,EAAgB,KAAKmB,QAAL,CAAcC,SAA9B,EAAyC9C,KAAzC,EAAgDc,QAAhD;EACH;EAED;;;;;;;;6BAKId,OAAOc,UAAU;EACjBa,MAAAA,GAAG,CAAC,KAAKkB,QAAL,CAAcC,SAAf,EAA0B9C,KAA1B,EAAiCc,QAAjC,CAAH;EACH;EAED;;;;;;;;;;8BAOQA,UAAwB;EAAA;;EAAA,UAAdu0B,IAAc,uEAAP,KAAO;;EAC5B,UAAI,CAAC,KAAK5yB,KAAV,EAAiB;EACb;EACH;;EAED,UAAMumB,IAAI,GAAG,SAAPA,IAAO,GAAM;EACf;EACAzkB,QAAAA,QAAQ,CAACmN,IAAT,CAAc3I,KAAd,CAAoBya,QAApB,GAA+B,EAA/B,CAFe;;EAKf,QAAA,MAAI,CAAC1E,KAAL,GAAa,IAAb,CALe;;EAQf,YAAIuW,IAAJ,EAAU;EACN,cAAIt4B,MAAM,CAACgC,IAAP,CAAY,MAAI,CAAC8D,QAAjB,EAA2B/D,MAA/B,EAAuC;EACnC;EACA8F,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAcwQ,OAAd,CAAsB7G,IAAvB,CAAb;EACA5H,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAc+Q,QAAf,CAAb;EACAhP,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAc+P,QAAf,CAAb;EACAhO,YAAAA,aAAa,CAAC,MAAI,CAAC/B,QAAL,CAAcI,OAAf,CAAb,CALmC;;EAQnC,YAAA,MAAI,CAACJ,QAAL,CAAcwQ,OAAd,CAAsB7G,IAAtB,GAA6B,IAA7B;EACA,YAAA,MAAI,CAAC3J,QAAL,CAAc+Q,QAAd,GAAyB,IAAzB;EACA,YAAA,MAAI,CAAC/Q,QAAL,CAAc+P,QAAd,GAAyB,IAAzB;EACA,YAAA,MAAI,CAAC/P,QAAL,CAAcI,OAAd,GAAwB,IAAxB;EACH,WAbK;;;EAgBN,cAAI/B,EAAE,CAACxB,QAAH,CAAYoB,QAAZ,CAAJ,EAA2B;EACvBA,YAAAA,QAAQ;EACX;EACJ,SAnBD,MAmBO;EACH;EACAyB,UAAAA,eAAe,CAACb,IAAhB,CAAqB,MAArB,EAFG;;EAKHuD,UAAAA,cAAc,CAAC,MAAI,CAACpC,QAAL,CAAcgyB,QAAf,EAAyB,MAAI,CAAChyB,QAAL,CAAcC,SAAvC,CAAd,CALG;;EAQHd,UAAAA,YAAY,CAACN,IAAb,CAAkB,MAAlB,EAAwB,MAAI,CAACmB,QAAL,CAAcgyB,QAAtC,EAAgD,WAAhD,EAA6D,IAA7D,EARG;;EAWH,cAAI3zB,EAAE,CAACxB,QAAH,CAAYoB,QAAZ,CAAJ,EAA2B;EACvBA,YAAAA,QAAQ,CAACY,IAAT,CAAc,MAAI,CAACmB,QAAL,CAAcgyB,QAA5B;EACH,WAbE;;;EAgBH,UAAA,MAAI,CAACpyB,KAAL,GAAa,KAAb,CAhBG;;EAmBHG,UAAAA,UAAU,CAAC,YAAM;EACb,YAAA,MAAI,CAACC,QAAL,GAAgB,IAAhB;EACA,YAAA,MAAI,CAACoI,KAAL,GAAa,IAAb;EACH,WAHS,EAGP,GAHO,CAAV;EAIH;EACJ,OAnDD,CAL4B;;;EA2D5B,WAAKkgB,IAAL,GA3D4B;;EA8D5B,UAAI,KAAKngB,OAAT,EAAkB;EACd;EACAkb,QAAAA,YAAY,CAAC,KAAKC,MAAL,CAAYhE,OAAb,CAAZ,CAFc;;EAKd5X,QAAAA,EAAE,CAACkK,oBAAH,CAAwB/S,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC,EALc;;EAQdsnB,QAAAA,IAAI;EACP,OATD,MASO,IAAI,KAAKnL,SAAT,EAAoB;EACvB;EACA2Q,QAAAA,aAAa,CAAC,KAAKrI,MAAL,CAAYsI,SAAb,CAAb;EACAD,QAAAA,aAAa,CAAC,KAAKrI,MAAL,CAAYlE,OAAb,CAAb,CAHuB;;EAMvB,YAAI,KAAKnD,KAAL,KAAe,IAAf,IAAuB5d,EAAE,CAACxB,QAAH,CAAY,KAAKof,KAAL,CAAW8U,OAAvB,CAA3B,EAA4D;EACxD,eAAK9U,KAAL,CAAW8U,OAAX;EACH,SARsB;;;EAWvB5K,QAAAA,IAAI;EACP,OAZM,MAYA,IAAI,KAAK7N,OAAT,EAAkB;EACrB;EACA;EACA,YAAI,KAAK2D,KAAL,KAAe,IAAnB,EAAyB;EACrB,eAAKA,KAAL,CAAWwW,MAAX,GAAoBvyB,IAApB,CAAyBimB,IAAzB;EACH,SALoB;;;EAQrBpmB,QAAAA,UAAU,CAAComB,IAAD,EAAO,GAAP,CAAV;EACH;EACJ;EAED;;;;;;;+BAIS1nB,MAAM;EACX,aAAOyI,OAAO,CAACc,IAAR,CAAanJ,IAAb,CAAkB,IAAlB,EAAwBJ,IAAxB,CAAP;EACH;EAED;;;;;;;;;0BA7wBc;EACV,aAAO1E,OAAO,CAAC,KAAKuN,QAAL,KAAkBuY,SAAS,CAAChX,KAA7B,CAAd;EACH;;;0BAEa;EACV,aAAO9O,OAAO,CAAC,KAAKihB,SAAL,IAAkB,KAAK1C,OAAxB,CAAd;EACH;;;0BAEe;EACZ,aAAOve,OAAO,CAAC,KAAKuN,QAAL,KAAkBuY,SAAS,CAAC9S,OAA7B,CAAd;EACH;;;0BAEa;EACV,aAAOhT,OAAO,CAAC,KAAKuN,QAAL,KAAkBuY,SAAS,CAAC/S,KAA7B,CAAd;EACH;;;0BAEa;EACV,aAAO/S,OAAO,CAAC,KAAK0E,IAAL,KAAcqhB,KAAK,CAAC1Y,KAArB,CAAd;EACH;;;0BAEa;EACV,aAAOrN,OAAO,CAAC,KAAK0E,IAAL,KAAcqhB,KAAK,CAAC3Y,KAArB,CAAd;EACH;;;0BA4Ba;EACV,aAAOpN,OAAO,CAAC,KAAK6F,KAAL,IAAc,CAAC,KAAK2J,MAApB,IAA8B,CAAC,KAAK8b,KAArC,CAAd;EACH;EAED;;;;;;0BAGa;EACT,aAAOtrB,OAAO,CAAC,KAAKqO,KAAL,CAAWmB,MAAZ,CAAd;EACH;EAED;;;;;;0BAGc;EACV,aAAOxP,OAAO,CAAC,KAAKwP,MAAL,IAAe,KAAKD,WAAL,KAAqB,CAArC,CAAd;EACH;EAED;;;;;;0BAGY;EACR,aAAOvP,OAAO,CAAC,KAAKqO,KAAL,CAAWid,KAAZ,CAAd;EACH;;;wBAwDezrB,OAAO;EACnB;EACA,UAAI,CAAC,KAAK2X,QAAV,EAAoB;EAChB;EACH,OAJkB;;;EAOnB,UAAMmhB,YAAY,GAAGr0B,EAAE,CAAC1B,MAAH,CAAU/C,KAAV,KAAoBA,KAAK,GAAG,CAAjD,CAPmB;;EAUnB,WAAKwO,KAAL,CAAWkB,WAAX,GAAyBopB,YAAY,GAAGjoB,IAAI,CAAC4I,GAAL,CAASzZ,KAAT,EAAgB,KAAK2X,QAArB,CAAH,GAAoC,CAAzE,CAVmB;;EAanB,WAAKtH,KAAL,CAAWC,GAAX,sBAA6B,KAAKZ,WAAlC;EACH;EAED;;;;0BAGkB;EACd,aAAOlP,MAAM,CAAC,KAAKgO,KAAL,CAAWkB,WAAZ,CAAb;EACH;EAED;;;;;;0BAGe;EAAA,UACHyM,QADG,GACU,KAAK3N,KADf,CACH2N,QADG;;EAIX,UAAI1X,EAAE,CAAC1B,MAAH,CAAUoZ,QAAV,CAAJ,EAAyB;EACrB,eAAOA,QAAP;EACH,OANU;EASX;EACA;;;EACA,UAAIA,QAAQ,IAAIA,QAAQ,CAAC9Z,MAArB,IAA+B,KAAKsV,QAAL,GAAgB,CAAnD,EAAsD;EAClD,eAAOwE,QAAQ,CAACuI,GAAT,CAAa,CAAb,IAAkB,KAAK/M,QAA9B;EACH;;EAED,aAAO,CAAP;EACH;EAED;;;;;;0BAGc;EACV,aAAOxX,OAAO,CAAC,KAAKqO,KAAL,CAAWyO,OAAZ,CAAd;EACH;EAED;;;;;;0BAGe;EACX;EACA,UAAM8b,YAAY,GAAGvd,UAAU,CAAC,KAAK1P,MAAL,CAAY6L,QAAb,CAA/B,CAFW;;EAKX,UAAMqhB,YAAY,GAAG,CAAC,KAAKxqB,KAAL,IAAc,EAAf,EAAmBmJ,QAAxC;EACA,UAAMA,QAAQ,GAAG,CAAClT,EAAE,CAAC1B,MAAH,CAAUi2B,YAAV,CAAD,IAA4BA,YAAY,KAAKC,QAA7C,GAAwD,CAAxD,GAA4DD,YAA7E,CANW;;EASX,aAAOD,YAAY,IAAIphB,QAAvB;EACH;EAED;;;;;;;wBAIWlQ,OAAO;EACd,UAAI+P,MAAM,GAAG/P,KAAb;EACA,UAAMuK,GAAG,GAAG,CAAZ;EACA,UAAMyH,GAAG,GAAG,CAAZ;;EAEA,UAAIhV,EAAE,CAAChC,MAAH,CAAU+U,MAAV,CAAJ,EAAuB;EACnBA,QAAAA,MAAM,GAAGhX,MAAM,CAACgX,MAAD,CAAf;EACH,OAPa;;;EAUd,UAAI,CAAC/S,EAAE,CAAC1B,MAAH,CAAUyU,MAAV,CAAL,EAAwB;EACpBA,QAAAA,MAAM,GAAG,KAAKtH,OAAL,CAAajM,GAAb,CAAiB,QAAjB,CAAT;EACH,OAZa;;;EAed,UAAI,CAACQ,EAAE,CAAC1B,MAAH,CAAUyU,MAAV,CAAL,EAAwB;EACjBA,QAAAA,MADiB,GACN,KAAK1L,MADC,CACjB0L,MADiB;EAEvB,OAjBa;;;EAoBd,UAAIA,MAAM,GAAGxF,GAAb,EAAkB;EACdwF,QAAAA,MAAM,GAAGxF,GAAT;EACH,OAtBa;;;EAwBd,UAAIwF,MAAM,GAAGiC,GAAb,EAAkB;EACdjC,QAAAA,MAAM,GAAGiC,GAAT;EACH,OA1Ba;;;EA6Bd,WAAK3N,MAAL,CAAY0L,MAAZ,GAAqBA,MAArB,CA7Bc;;EAgCd,WAAKhJ,KAAL,CAAWgJ,MAAX,GAAoBA,MAApB,CAhCc;;EAmCd,UAAI,CAAC/S,EAAE,CAACb,KAAH,CAAS6D,KAAT,CAAD,IAAoB,KAAKoU,KAAzB,IAAkCrE,MAAM,GAAG,CAA/C,EAAkD;EAC9C,aAAKqE,KAAL,GAAa,KAAb;EACH;EACJ;EAED;;;;0BAGa;EACT,aAAOrb,MAAM,CAAC,KAAKgO,KAAL,CAAWgJ,MAAZ,CAAb;EACH;;;wBAuBSP,MAAM;EACZ,UAAI3S,MAAM,GAAG2S,IAAb,CADY;;EAIZ,UAAI,CAACxS,EAAE,CAACzB,OAAH,CAAWsB,MAAX,CAAL,EAAyB;EACrBA,QAAAA,MAAM,GAAG,KAAK4L,OAAL,CAAajM,GAAb,CAAiB,OAAjB,CAAT;EACH,OANW;;;EASZ,UAAI,CAACQ,EAAE,CAACzB,OAAH,CAAWsB,MAAX,CAAL,EAAyB;EACrBA,QAAAA,MAAM,GAAG,KAAKwH,MAAL,CAAY+P,KAArB;EACH,OAXW;;;EAcZ,WAAK/P,MAAL,CAAY+P,KAAZ,GAAoBvX,MAApB,CAdY;;EAiBZ,WAAKkK,KAAL,CAAWqN,KAAX,GAAmBvX,MAAnB;EACH;EAED;;;;0BAGY;EACR,aAAOnE,OAAO,CAAC,KAAKqO,KAAL,CAAWqN,KAAZ,CAAd;EACH;EAED;;;;;;0BAGe;EACX;EACA,UAAI,CAAC,KAAKtN,OAAV,EAAmB;EACf,eAAO,IAAP;EACH;;EAED,UAAI,KAAKid,OAAT,EAAkB;EACd,eAAO,IAAP;EACH,OARU;;;EAWX,aACIrrB,OAAO,CAAC,KAAKqO,KAAL,CAAW0qB,WAAZ,CAAP,IACA/4B,OAAO,CAAC,KAAKqO,KAAL,CAAW2qB,2BAAZ,CADP,IAEAh5B,OAAO,CAAC,KAAKqO,KAAL,CAAW4qB,WAAX,IAA0B,KAAK5qB,KAAL,CAAW4qB,WAAX,CAAuB/2B,MAAlD,CAHX;EAKH;EAED;;;;;;;wBAIUrC,OAAO;EACb,UAAIub,KAAK,GAAG,IAAZ;;EAEA,UAAI9W,EAAE,CAAC1B,MAAH,CAAU/C,KAAV,CAAJ,EAAsB;EAClBub,QAAAA,KAAK,GAAGvb,KAAR;EACH;;EAED,UAAI,CAACyE,EAAE,CAAC1B,MAAH,CAAUwY,KAAV,CAAL,EAAuB;EACnBA,QAAAA,KAAK,GAAG,KAAKrL,OAAL,CAAajM,GAAb,CAAiB,OAAjB,CAAR;EACH;;EAED,UAAI,CAACQ,EAAE,CAAC1B,MAAH,CAAUwY,KAAV,CAAL,EAAuB;EACnBA,QAAAA,KAAK,GAAG,KAAKzP,MAAL,CAAYyP,KAAZ,CAAkBqI,QAA1B;EACH,OAbY;;;EAgBb,UAAIrI,KAAK,GAAG,GAAZ,EAAiB;EACbA,QAAAA,KAAK,GAAG,GAAR;EACH;;EACD,UAAIA,KAAK,GAAG,GAAZ,EAAiB;EACbA,QAAAA,KAAK,GAAG,GAAR;EACH;;EAED,UAAI,CAAC,KAAKzP,MAAL,CAAYyP,KAAZ,CAAkBxX,OAAlB,CAA0B2G,QAA1B,CAAmC6Q,KAAnC,CAAL,EAAgD;EAC5C,aAAKlL,KAAL,CAAW0H,IAAX,8BAAsCwD,KAAtC;EACA;EACH,OA1BY;;;EA6Bb,WAAKzP,MAAL,CAAYyP,KAAZ,CAAkBqI,QAAlB,GAA6BrI,KAA7B,CA7Ba;;EAgCb,WAAK/M,KAAL,CAAWgjB,YAAX,GAA0BjW,KAA1B;EACH;EAED;;;;0BAGY;EACR,aAAO/a,MAAM,CAAC,KAAKgO,KAAL,CAAWgjB,YAAZ,CAAb;EACH;EAED;;;;;;;;wBAKYxxB,OAAO;EACf,UAAM8L,MAAM,GAAG,KAAKA,MAAL,CAAYmE,OAA3B;EACA,UAAMlM,OAAO,GAAG,KAAKA,OAAL,CAAakM,OAA7B;;EAEA,UAAI,CAAClM,OAAO,CAAC1B,MAAb,EAAqB;EACjB;EACH;;EAED,UAAI4N,OAAO,GAAG,CACV,CAACxL,EAAE,CAACb,KAAH,CAAS5D,KAAT,CAAD,IAAoBQ,MAAM,CAACR,KAAD,CADhB,EAEV,KAAKkQ,OAAL,CAAajM,GAAb,CAAiB,SAAjB,CAFU,EAGV6H,MAAM,CAAC8X,QAHG,EAIV9X,MAAM,CAAC4R,OAJG,EAKZrR,IALY,CAKP5H,EAAE,CAAC1B,MALI,CAAd;;EAOA,UAAI,CAACgB,OAAO,CAAC2G,QAAR,CAAiBuF,OAAjB,CAAL,EAAgC;EAC5B,YAAMxI,KAAK,GAAGgJ,OAAO,CAAC1M,OAAD,EAAUkM,OAAV,CAArB;EACA,aAAKI,KAAL,CAAW0H,IAAX,uCAA+C9H,OAA/C,qBAAiExI,KAAjE;EACAwI,QAAAA,OAAO,GAAGxI,KAAV;EACH,OAnBc;;;EAsBfqE,MAAAA,MAAM,CAAC8X,QAAP,GAAkB3T,OAAlB,CAtBe;;EAyBf,WAAKzB,KAAL,CAAWyB,OAAX,GAAqBA,OAArB;EACH;EAED;;;;0BAGc;EACV,aAAO,KAAKzB,KAAL,CAAWyB,OAAlB;EACH;EAED;;;;;;;;wBAKSjQ,OAAO;EACZ,UAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,KAAK8L,MAAL,CAAY6X,IAAZ,CAAiBhC,MAA5D;EACA,WAAK7V,MAAL,CAAY6X,IAAZ,CAAiBhC,MAAjB,GAA0Brd,MAA1B;EACA,WAAKkK,KAAL,CAAWmV,IAAX,GAAkBrf,MAAlB,CAHY;;EAMZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCH;EAED;;;;0BAGW;EACP,aAAOnE,OAAO,CAAC,KAAKqO,KAAL,CAAWmV,IAAZ,CAAd;EACH;EAED;;;;;;;wBAIW3jB,OAAO;EACdoP,MAAAA,MAAM,CAAC0oB,MAAP,CAAc7yB,IAAd,CAAmB,IAAnB,EAAyBjF,KAAzB;EACH;EAED;;;;0BAGa;EACT,aAAO,KAAKwO,KAAL,CAAWygB,UAAlB;EACH;EAED;;;;;;0BAGe;EAAA,UACHnP,QADG,GACU,KAAKhU,MAAL,CAAYsU,IADtB,CACHN,QADG;EAGX,aAAOrb,EAAE,CAACd,GAAH,CAAOmc,QAAP,IAAmBA,QAAnB,GAA8B,KAAK1Q,MAA1C;EACH;EAED;;;;;;;wBAIWpP,OAAO;EACd,UAAI,CAAC,KAAKmhB,OAAV,EAAmB;EACf,aAAK9Q,KAAL,CAAW0H,IAAX,CAAgB,kCAAhB;EACA;EACH;;EAEDjK,MAAAA,EAAE,CAACob,SAAH,CAAajkB,IAAb,CAAkB,IAAlB,EAAwBjF,KAAxB,EAA+B,KAA/B,EAAsCuV,KAAtC,CAA4C,YAAM,EAAlD;EACH;EAED;;;;0BAGa;EACT,UAAI,CAAC,KAAK4L,OAAV,EAAmB;EACf,eAAO,IAAP;EACH;;EAED,aAAO,KAAK3S,KAAL,CAAWa,YAAX,CAAwB,QAAxB,CAAP;EACH;EAED;;;;;;;wBAIarP,OAAO;EAChB,UAAMsE,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,KAAK8L,MAAL,CAAYqX,QAAvD;EACA,WAAKrX,MAAL,CAAYqX,QAAZ,GAAuB7e,MAAvB;EACH;EAED;;;;0BAGe;EACX,aAAOnE,OAAO,CAAC,KAAK2L,MAAL,CAAYqX,QAAb,CAAd;EACH;;;wBAcgBnjB,OAAO;EACpBmX,MAAAA,QAAQ,CAAC1H,GAAT,CAAaxK,IAAb,CAAkB,IAAlB,EAAwBjF,KAAxB,EAA+B,KAA/B;EACH;EAED;;;;0BAGmB;EAAA,2BACmB,KAAKmX,QADxB;EAAA,UACPmH,OADO,kBACPA,OADO;EAAA,UACEhD,YADF,kBACEA,YADF;EAEf,aAAOgD,OAAO,GAAGhD,YAAH,GAAkB,CAAC,CAAjC;EACH;EAED;;;;;;;;wBAKatb,OAAO;EAChBmX,MAAAA,QAAQ,CAAC+K,WAAT,CAAqBjd,IAArB,CAA0B,IAA1B,EAAgCjF,KAAhC,EAAuC,KAAvC;EACH;EAED;;;;0BAGe;EACX,aAAO,CAACmX,QAAQ,CAACwL,eAAT,CAAyB1d,IAAzB,CAA8B,IAA9B,KAAuC,EAAxC,EAA4CsZ,QAAnD;EACH;EAED;;;;;;;;wBAKQve,OAAO;EACX,UAAMq5B,MAAM,GAAG;EACXrrB,QAAAA,GAAG,EAAE,oBADM;EAEXsrB,QAAAA,MAAM,EAAE;EAFG,OAAf,CADW;;EAOX,UAAI,CAAChsB,OAAO,CAACU,GAAb,EAAkB;EACd;EACH,OATU;;;EAYX,UAAM1J,MAAM,GAAGG,EAAE,CAACzB,OAAH,CAAWhD,KAAX,IAAoBA,KAApB,GAA4B,KAAKgO,GAAL,KAAaqrB,MAAM,CAACC,MAA/D,CAZW;;EAeX,WAAK9qB,KAAL,CAAWP,yBAAX,CAAqC3J,MAAM,GAAG+0B,MAAM,CAACrrB,GAAV,GAAgBqrB,MAAM,CAACC,MAAlE;EACH;EAED;;;;0BAGU;EACN,UAAI,CAAChsB,OAAO,CAACU,GAAb,EAAkB;EACd,eAAO,IAAP;EACH;;EAED,aAAO,KAAKQ,KAAL,CAAW+qB,sBAAlB;EACH;;;gCA6LgB10B,MAAM6I,UAAU4rB,QAAQ;EACrC,aAAOhsB,OAAO,CAACG,KAAR,CAAc5I,IAAd,EAAoB6I,QAApB,EAA8B4rB,MAA9B,CAAP;EACH;EAED;;;;;;;;oCAKkB31B,KAAK+F,IAAI;EACvB,aAAOgL,UAAU,CAAC/Q,GAAD,EAAM+F,EAAN,CAAjB;EACH;EAED;;;;;;;;4BAKaT,UAAwB;EAAA,UAAdlF,OAAc,uEAAJ,EAAI;EACjC,UAAI0C,OAAO,GAAG,IAAd;;EAEA,UAAIhC,EAAE,CAAChC,MAAH,CAAUwG,QAAV,CAAJ,EAAyB;EACrBxC,QAAAA,OAAO,GAAGzF,KAAK,CAAC0F,IAAN,CAAWoB,QAAQ,CAAC2C,gBAAT,CAA0BxB,QAA1B,CAAX,CAAV;EACH,OAFD,MAEO,IAAIxE,EAAE,CAACrB,QAAH,CAAY6F,QAAZ,CAAJ,EAA2B;EAC9BxC,QAAAA,OAAO,GAAGzF,KAAK,CAAC0F,IAAN,CAAWuC,QAAX,CAAV;EACH,OAFM,MAEA,IAAIxE,EAAE,CAACvB,KAAH,CAAS+F,QAAT,CAAJ,EAAwB;EAC3BxC,QAAAA,OAAO,GAAGwC,QAAQ,CAACzB,MAAT,CAAgB/C,EAAE,CAACpB,OAAnB,CAAV;EACH;;EAED,UAAIoB,EAAE,CAACb,KAAH,CAAS6C,OAAT,CAAJ,EAAuB;EACnB,eAAO,IAAP;EACH;;EAED,aAAOA,OAAO,CAACwD,GAAR,CAAY,UAAAuvB,CAAC;EAAA,eAAI,IAAIvB,IAAJ,CAASuB,CAAT,EAAYz1B,OAAZ,CAAJ;EAAA,OAAb,CAAP;EACH;;;;;;EAGLk0B,IAAI,CAAC/U,QAAL,GAAgBnS,SAAS,CAACmS,QAAD,CAAzB","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!is.string(sel) || is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (is.object(existing) && is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = document.activeElement;\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus();\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n};\n\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => !browser.isIPhone && is.function(createElement('video').webkitSetPresentationMode))(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(inputType) {\n const [mediaType] = inputType.split('/');\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n let type;\n if (inputType && inputType.includes('codecs=')) {\n // Use input directly\n type = inputType;\n } else if (inputType === 'audio/mpeg') {\n // Skip codec\n type = 'audio/mpeg;';\n } else if (inputType in defaultCodecs) {\n // Use codec\n type = `${inputType}; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (err) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('size')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n\n // Save to storage\n player.storage.set({ quality: input });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n removeElement(html5.getSources.call(this));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n}\n","// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\n if (!attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek input\n const input = createElement(\n 'input',\n extend(\n getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !is.element(this.elements.inputs.seek) ||\n !is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n }\n\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this.props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.12/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n display: {\n time: 'plyr__time',\n },\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n on.call(player, player.media, 'canplay', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\n const padding = (100 / x) * y;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n hl: player.config.hl, // iframe interface language\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n triggerEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n triggerEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.4.5\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (is.nullOrUndefined(this.media) || !is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n on.call(this, this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isKeyboardEvent","KeyboardEvent","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","keyboardEvent","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","resolve","setTimeout","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","prototype","match","querySelectorAll","includes","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","getElement","querySelector","trapFocus","focusable","first","last","trap","keyCode","focused","activeElement","shiftKey","focus","preventDefault","setFocus","tabFocus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","err","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","dedupe","indexOf","closest","reduce","prev","curr","Math","abs","cloneDeep","JSON","parse","stringify","getDeep","path","obj","shift","generateId","prefix","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","resources","vimeo","youtube","i18n","seekTime","title","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","control","button","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","enumerable","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sort","a","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","isVimeo","values","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","setDownloadLink","download","create","inner","home","backButton","href","urls","isEmbed","inject","seektime","insertMethod","addProperty","controlPressed","labels","parseUrl","safe","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","browserLanguages","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","inactive","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","Fullscreen","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","recentTouchSeek","lastSeekTime","Date","now","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","rect","currentTarget","attribute","hasAttribute","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","define","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","t"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(\n resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!is.string(sel) || is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (is.object(existing) && is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = document.activeElement;\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus();\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n};\n\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(inputType) {\n const [mediaType] = inputType.split('/');\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n let type;\n if (inputType && inputType.includes('codecs=')) {\n // Use input directly\n type = inputType;\n } else if (inputType === 'audio/mpeg') {\n // Skip codec\n type = 'audio/mpeg;';\n } else if (inputType in defaultCodecs) {\n // Use codec\n type = `${inputType}; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (err) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from <source> elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('size')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n removeElement(html5.getSources.call(this));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n}\n","// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const attributes = Object.assign({}, attr);\n let type = toCamelCase(buttonType);\n\n const props = {\n element: 'button',\n toggle: false,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null,\n };\n\n ['element', 'icon', 'label'].forEach(key => {\n if (Object.keys(attributes).includes(key)) {\n props[key] = attributes[key];\n delete attributes[key];\n }\n });\n\n // Default to 'button' type to prevent form submission\n if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n attributes.type = 'button';\n }\n\n // Set class name\n if (Object.keys(attributes).includes('class')) {\n if (!attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n props.toggle = true;\n props.label = 'play';\n props.labelPressed = 'pause';\n props.icon = 'play';\n props.iconPressed = 'pause';\n break;\n\n case 'mute':\n props.toggle = true;\n props.label = 'mute';\n props.labelPressed = 'unmute';\n props.icon = 'volume';\n props.iconPressed = 'muted';\n break;\n\n case 'captions':\n props.toggle = true;\n props.label = 'enableCaptions';\n props.labelPressed = 'disableCaptions';\n props.icon = 'captions-off';\n props.iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n props.toggle = true;\n props.label = 'enterFullscreen';\n props.labelPressed = 'exitFullscreen';\n props.icon = 'enter-fullscreen';\n props.iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n props.label = 'play';\n props.icon = 'play';\n break;\n\n default:\n if (is.empty(props.label)) {\n props.label = type;\n }\n if (is.empty(props.icon)) {\n props.icon = buttonType;\n }\n }\n\n const button = createElement(props.element);\n\n // Setup toggle icon and labels\n if (props.toggle) {\n // Icon\n button.appendChild(\n controls.createIcon.call(this, props.iconPressed, {\n class: 'icon--pressed',\n }),\n );\n button.appendChild(\n controls.createIcon.call(this, props.icon, {\n class: 'icon--not-pressed',\n }),\n );\n\n // Label/Tooltip\n button.appendChild(\n controls.createLabel.call(this, props.labelPressed, {\n class: 'label--pressed',\n }),\n );\n button.appendChild(\n controls.createLabel.call(this, props.label, {\n class: 'label--not-pressed',\n }),\n );\n } else {\n button.appendChild(controls.createIcon.call(this, props.icon));\n button.appendChild(controls.createLabel.call(this, props.label));\n }\n\n // Merge and set attributes\n extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek input\n const input = createElement(\n 'input',\n extend(\n getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-label': i18n.get(type, this.config),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return input;\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = createElement(\n 'progress',\n extend(\n getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(createElement('span', null, '0'));\n\n const suffixKey = {\n played: 'played',\n buffer: 'buffered',\n }[type];\n const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = createElement(\n 'div',\n extend(attributes, {\n class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-label': i18n.get(type, this.config),\n }),\n '00:00',\n );\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Bind keyboard shortcuts for a menu item\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n bindMenuItemShortcuts(menuItem, type) {\n // Navigate through menus via arrow keys and space\n on(\n menuItem,\n 'keydown keyup',\n event => {\n // We only care about space and ⬆️ ⬇️️ ➡️\n if (![32, 38, 39, 40].includes(event.which)) {\n return;\n }\n\n // Prevent play / seek\n event.preventDefault();\n event.stopPropagation();\n\n // We're just here to prevent the keydown bubbling\n if (event.type === 'keydown') {\n return;\n }\n\n const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n // Show the respective menu\n if (!isRadioButton && [32, 39].includes(event.which)) {\n controls.showMenuPanel.call(this, type, true);\n } else {\n let target;\n\n if (event.which !== 32) {\n if (event.which === 40 || (isRadioButton && event.which === 39)) {\n target = menuItem.nextElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.firstElementChild;\n }\n } else {\n target = menuItem.previousElementSibling;\n\n if (!is.element(target)) {\n target = menuItem.parentNode.lastElementChild;\n }\n }\n\n setFocus.call(this, target, true);\n }\n }\n },\n false,\n );\n\n // Enter will fire a `click` event but we still need to manage focus\n // So we bind to keyup which fires after and set focus here\n on(menuItem, 'keyup', event => {\n if (event.which !== 13) {\n return;\n }\n\n controls.focusFirstMenuItem.call(this, null, true);\n });\n },\n\n // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n const menuItem = createElement(\n 'button',\n extend(attributes, {\n type: 'button',\n role: 'menuitemradio',\n class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n 'aria-checked': checked,\n value,\n }),\n );\n\n const flex = createElement('span');\n\n // We have to set as HTML incase of special characters\n flex.innerHTML = title;\n\n if (is.element(badge)) {\n flex.appendChild(badge);\n }\n\n menuItem.appendChild(flex);\n\n // Replicate radio button behaviour\n Object.defineProperty(menuItem, 'checked', {\n enumerable: true,\n get() {\n return menuItem.getAttribute('aria-checked') === 'true';\n },\n set(checked) {\n // Ensure exclusivity\n if (checked) {\n Array.from(menuItem.parentNode.children)\n .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n .forEach(node => node.setAttribute('aria-checked', 'false'));\n }\n\n menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n },\n });\n\n this.listeners.bind(\n menuItem,\n 'click keyup',\n event => {\n if (is.keyboardEvent(event) && event.which !== 32) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n menuItem.checked = true;\n\n switch (type) {\n case 'language':\n this.currentTrack = Number(value);\n break;\n\n case 'quality':\n this.quality = value;\n break;\n\n case 'speed':\n this.speed = parseFloat(value);\n break;\n\n default:\n break;\n }\n\n controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n },\n type,\n false,\n );\n\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n list.appendChild(menuItem);\n },\n\n // Format a time for display\n formatTime(time = 0, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return time;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = getHours(this.duration) > 0;\n\n return formatTime(time, forceHours, inverted);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!is.element(target) || !is.number(time)) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = controls.formatTime(time, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (is.element(this.elements.buttons.mute)) {\n this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = is.number(input) ? input : 0;\n const progress = is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria values for https://github.com/sampotts/plyr/issues/905\n if (matches(range, this.config.selectors.inputs.seek)) {\n range.setAttribute('aria-valuenow', this.currentTime);\n const currentTime = controls.formatTime(this.currentTime);\n const duration = controls.formatTime(this.duration);\n const format = i18n.get('seekLabel', this.config);\n range.setAttribute(\n 'aria-valuetext',\n format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n );\n } else if (matches(range, this.config.selectors.inputs.volume)) {\n const percent = range.value * 100;\n range.setAttribute('aria-valuenow', percent);\n range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n } else {\n range.setAttribute('aria-valuenow', range.value);\n }\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !is.element(this.elements.inputs.seek) ||\n !is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n }\n\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Set the speed options\n if (is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.which === 27) {\n show = false;\n } else if (is.event(input)) {\n const isMenuItem = popup.contains(input.target);\n\n // If the click was inside the menu or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download link\n setDownloadLink() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set download link\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Create the container\n const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Volume controls\n if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n volume.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n volume.appendChild(\n controls.createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n\n this.elements.volume = volume;\n }\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n const control = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n control.appendChild(\n controls.createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on(menuItem, 'click', () => {\n controls.showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on(\n pane,\n 'keydown',\n event => {\n // We only care about <-\n if (event.which !== 37) {\n return;\n }\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n controls.showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n control.appendChild(popup);\n container.appendChild(control);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = control;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Download button\n if (this.config.controls.includes('download')) {\n const attributes = {\n element: 'a',\n href: this.download,\n target: '_blank',\n };\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(controls.createButton.call(this, 'download', attributes));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n // Set available quality levels\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this.props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n } else if (is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (\n is.array(this.config.controls) &&\n this.config.controls.includes('settings') &&\n this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const url = parseUrl(src);\n\n if (\n url !== null &&\n url.hostname !== window.location.href.hostname &&\n ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n track.mode = 'hidden';\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(track => track.language === language);\n return !track; // Break iteration if there is a match\n });\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n playsinline: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.4.6/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api:\n 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n display: {\n time: 'plyr__time',\n },\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Trigger an event\n triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n\n // Force a repaint as sometimes Safari doesn't want to fill the screen\n setTimeout(() => repaint(this.target), 100);\n }\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n onChange.call(this);\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(\n document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullscreenEnabled\n );\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitEnterFullscreen();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('poster', poster);\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch(err => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw err;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n target.pressed = this.playing;\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { elements } = player;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n on.call(player, player.media, 'canplay', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n on.call(player, player.media, 'playing', () => {\n if (!player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (player.ads.enabled && !player.ads.initialized) {\n // Wait for manager response\n player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n }\n });\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an <input type=\"range\">,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\n const padding = (100 / x) * y;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = parseId(source);\n const id = generateId(player.provider);\n\n // Get poster, if already set\n const { poster } = player;\n\n // Replace media element\n const container = createElement('div', { id, poster });\n player.media = replaceElement(container, player.media);\n\n // Id to poster wrapper\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n })\n .catch(() => {});\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n hl: player.config.hl, // iframe interface language\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // YouTube may fire onError twice, so only handle it once\n if (!player.media.error) {\n const code = event.data;\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n const message =\n {\n 2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n 5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n 100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n 101: 'The owner of the requested video does not allow it to be played in embedded players.',\n 150: 'The owner of the requested video does not allow it to be played in embedded players.',\n }[code] || 'An unknown error occured';\n\n player.media.error = { code, message };\n\n triggerEvent.call(player, player.media, 'error');\n }\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Bail if onReady has already been called. See issue #1108\n if (is.function(player.media.play)) {\n return;\n }\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused && !player.embed.hasPlayed) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n triggerEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n triggerEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n triggerEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n triggerEvent.call(player, player.media, 'timeupdate');\n triggerEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n triggerEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n triggerEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n triggerEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n triggerEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused && !player.embed.hasPlayed) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n triggerEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n triggerEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n triggerEvent.call(player, player.media, 'durationchange');\n }\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n triggerEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isHTML5) {\n html5.extend.call(this);\n } else if (this.isYouTube) {\n youtube.setup.call(this);\n } else if (this.isVimeo) {\n vimeo.setup.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return (\n this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n );\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!is.object(window.google) || !is.object(window.google.ima)) {\n loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n event => this.onAdsManagerLoaded(event),\n false,\n );\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Load could occur after a source change (race condition)\n if (!this.enabled) {\n return;\n }\n\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n triggerEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (is.array(handlers)) {\n handlers.forEach(handler => {\n if (is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (is.string(attributes)) {\n insertElement(type, this.media, {\n src: attributes,\n });\n } else if (is.array(attributes)) {\n attributes.forEach(attribute => {\n insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!getDeep(input, 'sources.length')) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n const { sources, type } = input;\n const [{ provider = providers.html5, src }] = sources;\n const tagName = provider === 'html5' ? type : 'div';\n const attributes = provider === 'html5' ? {} : { src };\n\n Object.assign(this, {\n provider,\n type,\n // Check for support\n supported: support.check(type, provider, this.config.playsinline),\n // Create new element\n media: createElement(tagName, attributes),\n });\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.4.6\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || is.nodeList(this.media) || is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {},\n },\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap(),\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (is.nullOrUndefined(this.media) || !is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (is.element(iframe)) {\n // Detect provider\n url = parseUrl(iframe.getAttribute('src'));\n this.provider = getProviderByUrl(url.toString());\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n if (url.search.length) {\n const truthy = ['1', 'true'];\n\n if (truthy.includes(url.searchParams.get('autoplay'))) {\n this.config.autoplay = true;\n }\n if (truthy.includes(url.searchParams.get('loop'))) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n this.eventListeners = [];\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!is.element(this.elements.container)) {\n this.elements.container = createElement('div');\n wrap(this.media, this.elements.container);\n }\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n on.call(this, this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n if (this.config.ads.enabled) {\n this.ads = new Ads(this);\n }\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n\n // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n this.lastSeekTime = 0;\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN or Infinity before the media has loaded\n const realDuration = (this.media || {}).duration;\n const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (is.number(step) ? step : 0);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n this.increaseVolume(-step);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (is.number(input)) {\n speed = input;\n }\n\n if (!is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n const config = this.config.quality;\n const options = this.options.quality;\n\n if (!options.length) {\n return;\n }\n\n let quality = [\n !is.empty(input) && Number(input),\n this.storage.get('quality'),\n config.selected,\n config.default,\n ].find(is.number);\n\n let updateStorage = true;\n\n if (!options.includes(quality)) {\n const value = closest(options, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n quality = value;\n\n // Don't update storage if quality is not supported\n updateStorage = false;\n }\n\n // Update config\n config.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n\n // Save to storage\n if (updateStorage) {\n this.storage.set({ quality });\n }\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Get a download URL (either source or custom)\n */\n get download() {\n const { download } = this.config.urls;\n\n return is.url(download) ? download : this.source;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input, false).catch(() => {});\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n captions.toggle.call(this, input, false);\n }\n\n /**\n * Set the caption track by index\n * @param {number} - Caption index\n */\n set currentTrack(input) {\n captions.set.call(this, input, false);\n }\n\n /**\n * Get the current caption track index (-1 if disabled)\n */\n get currentTrack() {\n const { toggled, currentTrack } = this.captions;\n return toggled ? currentTrack : -1;\n }\n\n /**\n * Set the wanted language for captions\n * Since tracks can be added later it won't update the actual caption track until there is a matching track\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n captions.setLanguage.call(this, input, false);\n }\n\n /**\n * Get the current track's language\n */\n get language() {\n return (captions.getCurrentTrack.call(this) || {}).language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = is.boolean(input) ? input : !this.pip;\n\n // Toggle based on current state\n // Safari\n if (is.function(this.media.webkitSetPresentationMode)) {\n this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n }\n\n // Chrome\n if (is.function(this.media.requestPictureInPicture)) {\n if (!this.pip && toggle) {\n this.media.requestPictureInPicture();\n } else if (this.pip && !toggle) {\n document.exitPictureInPicture();\n }\n }\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n // Safari\n if (!is.empty(this.media.webkitPresentationMode)) {\n return this.media.webkitPresentationMode === pip.active;\n }\n\n // Chrome\n return this.media === document.pictureInPictureElement;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n\n return !hiding;\n }\n\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file