');s.append(e.control_input),e.dropdown.insertBefore(s,e.dropdown.firstChild);const r=St('
');r.placeholder=e.settings.placeholder||"",e.control.append(r);const n=null==(t=e.input)?void 0:t.getAttribute("aria-label");n&&r.setAttribute("aria-label",n)}),e.on("initialize",()=>{e.control_input.addEventListener("keydown",t=>{switch(t.keyCode){case 27:return e.isOpen&&(((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(t,!0),e.close()),void e.clearActiveItems();case 9:e.focus_node.tabIndex=-1}return e.onKeyDown.call(e,t)}),e.on("blur",()=>{e.focus_node.tabIndex=e.isDisabled?-1:e.tabIndex}),e.on("dropdown_open",()=>{e.control_input.focus()});const t=e.onBlur;var s,r,n,i;e.hook("instead","onBlur",s=>{if(!s||s.relatedTarget!=e.control_input)return t.call(e)}),s=e.control_input,r="blur",n=()=>e.onBlur(),s.addEventListener(r,n,i),e.hook("before","close",()=>{e.isOpen&&e.focus_node.focus({preventScroll:!0})})})}),mt.define("input_autogrow",function(){var e=this;e.on("initialize",()=>{var t=document.createElement("span"),s=e.control_input;t.style.cssText="position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ",e.wrapper.appendChild(t);for(const e of["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"])t.style[e]=s.style[e];var r=()=>{t.textContent=s.value,s.style.width=t.clientWidth+"px"};r(),e.on("update item_add item_remove",r),Lt(s,"input",r),Lt(s,"keyup",r),Lt(s,"blur",r),Lt(s,"update",r)})}),mt.define("no_backspace_delete",function(){var e=this,t=e.deleteSelection;this.hook("instead","deleteSelection",s=>!!e.activeItems.length&&t.call(e,s))}),mt.define("no_active_items",function(){this.hook("instead","setActiveItem",()=>{}),this.hook("instead","selectAll",()=>{})}),mt.define("optgroup_columns",function(){var e=this,t=e.onKeyDown;e.hook("instead","onKeyDown",s=>{var r,n,i,o;if(!e.isOpen||37!==s.keyCode&&39!==s.keyCode)return t.call(e,s);e.ignoreHover=!0,o=((e,t)=>{for(;e&&e.matches;){if(e.matches(t))return e;e=e.parentNode}})(e.activeOption,"[data-group]"),r=((e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var s=0;e=e.previousElementSibling;)e.matches(t)&&s++;return s})(e.activeOption,"[data-selectable]"),o&&(o=37===s.keyCode?o.previousSibling:o.nextSibling)&&(n=(i=o.querySelectorAll("[data-selectable]"))[Math.min(i.length-1,r)])&&e.setActiveOption(n)})}),mt.define("remove_button",function(e){const t=Object.assign({label:"×",title:"Remove",className:"remove",append:!0},e);var s=this;if(t.append){var r='
/g,">").replace(/"/g,""")+'">')+t.label+"";s.hook("after","setupTemplates",()=>{var e=s.settings.render.item;s.settings.render.item=(t,n)=>{var i=_t(e.call(s,t,n)),o=_t(r);return i.appendChild(o),Nt(o,"mousedown",e=>{Mt(e,!0)}),Nt(o,"click",e=>{s.isLocked||(Mt(e,!0),s.isLocked||s.shouldDelete([i],e)&&(s.removeItem(i),s.refreshOptions(!1),s.inputState()))}),i}})}}),mt.define("restore_on_backspace",function(e){const t=this,s=Object.assign({text:e=>e[t.settings.labelField]},e);t.on("item_remove",function(e){if(t.isFocused&&""===t.control_input.value.trim()){var r=t.options[e];r&&t.setTextboxValue(s.text.call(t,r))}})}),mt.define("virtual_scroll",function(){const e=this,t=e.canLoad,s=e.clearActiveOption,r=e.loadCallback;var n,i,o={},a=!1,l=[];if(e.settings.shouldLoadMore||(e.settings.shouldLoadMore=()=>{if(n.clientHeight/(n.scrollHeight-n.scrollTop)>.9)return!0;if(e.activeOption){var t=e.selectable();if(Array.from(t).indexOf(e.activeOption)>=t.length-2)return!0}return!1}),!e.settings.firstUrl)throw"virtual_scroll plugin requires a firstUrl() method";e.settings.sortField=[{field:"$order"},{field:"$score"}];const c=t=>!("number"==typeof e.settings.maxOptions&&n.children.length>=e.settings.maxOptions)&&!(!(t in o)||!o[t]),u=(t,s)=>e.items.indexOf(s)>=0||l.indexOf(s)>=0;e.setNextUrl=(e,t)=>{o[e]=t},e.getUrl=t=>{if(t in o){const e=o[t];return o[t]=!1,e}return e.clearPagination(),e.settings.firstUrl.call(e,t)},e.clearPagination=()=>{o={}},e.hook("instead","clearActiveOption",()=>{if(!a)return s.call(e)}),e.hook("instead","canLoad",s=>s in o?c(s):t.call(e,s)),e.hook("instead","loadCallback",(t,s)=>{if(a){if(i){const s=t[0];void 0!==s&&(i.dataset.value=s[e.settings.valueField])}}else e.clearOptions(u);r.call(e,t,s),a=!1}),e.hook("after","refreshOptions",()=>{const t=e.lastValue;var s;c(t)?(s=e.render("loading_more",{query:t}))&&(s.setAttribute("data-selectable",""),i=s):t in o&&!n.querySelector(".no-results")&&(s=e.render("no_more_results",{query:t})),s&&(((e,...t)=>{var s=$t(t);(e=Bt(e)).map(e=>{s.map(t=>{e.classList.add(t)})})})(s,e.settings.optionClass),n.append(s))}),e.on("initialize",()=>{l=Object.keys(e.options),n=e.dropdown_content,e.settings.render=Object.assign({},{loading_more:()=>'
Loading more results ...
',no_more_results:()=>'
No more results
'},e.settings.render),n.addEventListener("scroll",()=>{e.settings.shouldLoadMore.call(e)&&c(e.lastValue)&&(a||(a=!0,e.load.call(e,e.lastValue)))})})});var Dt=mt;const jt=class{constructor(e=document.documentElement,r=Q){this.logger=console,this.debug=!1,this.logDebugActivity=(e,t,s={})=>{this.debug&&this.logFormattedMessage(e,t,s)},this.element=e,this.schema=r,this.dispatcher=new t(this),this.router=new W(this),this.actionDescriptorFilters=Object.assign({},s)}static start(e,t){const s=new this(e,t);return s.start(),s}async start(){await new Promise(e=>{"loading"==document.readyState?document.addEventListener("DOMContentLoaded",()=>e()):e()}),this.logDebugActivity("application","starting"),this.dispatcher.start(),this.router.start(),this.logDebugActivity("application","start")}stop(){this.logDebugActivity("application","stopping"),this.dispatcher.stop(),this.router.stop(),this.logDebugActivity("application","stop")}register(e,t){this.load({identifier:e,controllerConstructor:t})}registerActionOption(e,t){this.actionDescriptorFilters[e]=t}load(e,...t){(Array.isArray(e)?e:[e,...t]).forEach(e=>{e.controllerConstructor.shouldLoad&&this.router.loadDefinition(e)})}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach(e=>this.router.unloadIdentifier(e))}get controllers(){return this.router.contexts.map(e=>e.controller)}getControllerForElementAndIdentifier(e,t){const s=this.router.getContextForElementAndIdentifier(e,t);return s?s.controller:null}handleError(e,t,s){var r;this.logger.error("%s\n\n%o\n\n%o",t,e,s),null===(r=window.onerror)||void 0===r||r.call(window,t,"",0,0,e)}logFormattedMessage(e,t,s={}){s=Object.assign({application:this},s),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},s)),this.logger.groupEnd()}}.start();jt.debug=!1,jt.register("codefog--tags-widget",class extends ie{static targets=["input"];static values={config:{type:Object,default:{}}};connect(){this.tomSelect=new Dt(this.inputTarget,this.#e())}disconnect(){this.tomSelect.destroy()}add(e){this.tomSelect.addItem(e.target.value)}remove(e){this.tomSelect.removeItem(e.target.value)}#e(){const e=this.configValue,t={delimiter:",",options:e.allTags,items:e.valueTags,persist:!1,render:{option_create:(t,s)=>`
${e.addLabel} ${s(t.input)}…
`,item:(t,s)=>`
${s(t.text)}
`,no_results:()=>`
${e.noResultsLabel}
`}};return e.allowCreate&&(t.create=e=>({value:e,text:e})),e.maxItems&&(t.maxItems=e.maxItems),e.sortable&&(t.plugins=["drag_drop"]),t}})}();
+//# sourceMappingURL=tags-widget.92015867.js.map
\ No newline at end of file
diff --git a/public/tags-widget.92015867.js.map b/public/tags-widget.92015867.js.map
new file mode 100644
index 0000000..8f57ffb
--- /dev/null
+++ b/public/tags-widget.92015867.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"tags-widget.92015867.js","mappings":"yBAIA,MAAMA,EACF,WAAAC,CAAYC,EAAaC,EAAWC,GAChCC,KAAKH,YAAcA,EACnBG,KAAKF,UAAYA,EACjBE,KAAKD,aAAeA,EACpBC,KAAKC,kBAAoB,IAAIC,GACjC,CACA,OAAAC,GACIH,KAAKH,YAAYO,iBAAiBJ,KAAKF,UAAWE,KAAMA,KAAKD,aACjE,CACA,UAAAM,GACIL,KAAKH,YAAYS,oBAAoBN,KAAKF,UAAWE,KAAMA,KAAKD,aACpE,CACA,gBAAAQ,CAAiBC,GACbR,KAAKC,kBAAkBQ,IAAID,EAC/B,CACA,mBAAAE,CAAoBF,GAChBR,KAAKC,kBAAkBU,OAAOH,EAClC,CACA,WAAAI,CAAYC,GACR,MAAMC,EAoBd,SAAqBD,GACjB,GAAI,gCAAiCA,EACjC,OAAOA,EAEN,CACD,MAAM,yBAAEE,GAA6BF,EACrC,OAAOG,OAAOC,OAAOJ,EAAO,CACxBK,6BAA6B,EAC7B,wBAAAH,GACIf,KAAKkB,6BAA8B,EACnCH,EAAyBI,KAAKnB,KAClC,GAER,CACJ,CAlC8BoB,CAAYP,GAClC,IAAK,MAAML,KAAWR,KAAKqB,SAAU,CACjC,GAAIP,EAAcI,4BACd,MAGAV,EAAQI,YAAYE,EAE5B,CACJ,CACA,WAAAQ,GACI,OAAOtB,KAAKC,kBAAkBsB,KAAO,CACzC,CACA,YAAIF,GACA,OAAOG,MAAMC,KAAKzB,KAAKC,mBAAmByB,KAAK,CAACC,EAAMC,KAClD,MAAMC,EAAYF,EAAKG,MAAOC,EAAaH,EAAME,MACjD,OAAOD,EAAYE,GAAc,EAAIF,EAAYE,EAAa,EAAI,GAE1E,EAkBJ,MAAMC,EACF,WAAApC,CAAYqC,GACRjC,KAAKiC,YAAcA,EACnBjC,KAAKkC,kBAAoB,IAAIC,IAC7BnC,KAAKoC,SAAU,CACnB,CACA,KAAAC,GACSrC,KAAKoC,UACNpC,KAAKoC,SAAU,EACfpC,KAAKsC,eAAeC,QAASC,GAAkBA,EAAcrC,WAErE,CACA,IAAAsC,GACQzC,KAAKoC,UACLpC,KAAKoC,SAAU,EACfpC,KAAKsC,eAAeC,QAASC,GAAkBA,EAAcnC,cAErE,CACA,kBAAIiC,GACA,OAAOd,MAAMC,KAAKzB,KAAKkC,kBAAkBQ,UAAUC,OAAO,CAACC,EAAWC,IAAQD,EAAUE,OAAOtB,MAAMC,KAAKoB,EAAIH,WAAY,GAC9H,CACA,gBAAAnC,CAAiBC,GACbR,KAAK+C,6BAA6BvC,GAASD,iBAAiBC,EAChE,CACA,mBAAAE,CAAoBF,EAASwC,GAAsB,GAC/ChD,KAAK+C,6BAA6BvC,GAASE,oBAAoBF,GAC3DwC,GACAhD,KAAKiD,8BAA8BzC,EAC3C,CACA,WAAA0C,CAAYC,EAAOC,EAASC,EAAS,CAAC,GAClCrD,KAAKiC,YAAYiB,YAAYC,EAAO,SAASC,IAAWC,EAC5D,CACA,6BAAAJ,CAA8BzC,GAC1B,MAAMgC,EAAgBxC,KAAK+C,6BAA6BvC,GACnDgC,EAAclB,gBACfkB,EAAcnC,aACdL,KAAKsD,6BAA6B9C,GAE1C,CACA,4BAAA8C,CAA6B9C,GACzB,MAAM,YAAEX,EAAW,UAAEC,EAAS,aAAEC,GAAiBS,EAC3C+C,EAAmBvD,KAAKwD,oCAAoC3D,GAC5D4D,EAAWzD,KAAKyD,SAAS3D,EAAWC,GAC1CwD,EAAiB5C,OAAO8C,GACK,GAAzBF,EAAiBhC,MACjBvB,KAAKkC,kBAAkBvB,OAAOd,EACtC,CACA,4BAAAkD,CAA6BvC,GACzB,MAAM,YAAEX,EAAW,UAAEC,EAAS,aAAEC,GAAiBS,EACjD,OAAOR,KAAK0D,mBAAmB7D,EAAaC,EAAWC,EAC3D,CACA,kBAAA2D,CAAmB7D,EAAaC,EAAWC,GACvC,MAAMwD,EAAmBvD,KAAKwD,oCAAoC3D,GAC5D4D,EAAWzD,KAAKyD,SAAS3D,EAAWC,GAC1C,IAAIyC,EAAgBe,EAAiBI,IAAIF,GAKzC,OAJKjB,IACDA,EAAgBxC,KAAK4D,oBAAoB/D,EAAaC,EAAWC,GACjEwD,EAAiBM,IAAIJ,EAAUjB,IAE5BA,CACX,CACA,mBAAAoB,CAAoB/D,EAAaC,EAAWC,GACxC,MAAMyC,EAAgB,IAAI7C,EAAcE,EAAaC,EAAWC,GAIhE,OAHIC,KAAKoC,SACLI,EAAcrC,UAEXqC,CACX,CACA,mCAAAgB,CAAoC3D,GAChC,IAAI0D,EAAmBvD,KAAKkC,kBAAkByB,IAAI9D,GAKlD,OAJK0D,IACDA,EAAmB,IAAIpB,IACvBnC,KAAKkC,kBAAkB2B,IAAIhE,EAAa0D,IAErCA,CACX,CACA,QAAAE,CAAS3D,EAAWC,GAChB,MAAM+D,EAAQ,CAAChE,GAMf,OALAkB,OAAO+C,KAAKhE,GACP2B,OACAa,QAASyB,IACVF,EAAMG,KAAK,GAAGlE,EAAaiE,GAAO,GAAK,MAAMA,OAE1CF,EAAMI,KAAK,IACtB,EAGJ,MAAMC,EAAiC,CACnC,IAAA1B,EAAK,MAAE5B,EAAK,MAAEuD,IAGV,OAFIA,GACAvD,EAAMwD,mBACH,CACX,EACA,OAAAC,EAAQ,MAAEzD,EAAK,MAAEuD,IAGb,OAFIA,GACAvD,EAAM0D,kBACH,CACX,EACA,IAAAC,EAAK,MAAE3D,EAAK,MAAEuD,EAAK,QAAEK,IACjB,OAAIL,GACOK,IAAY5D,EAAM6D,MAKjC,GAEEC,EAAoB,+FAmB1B,SAASC,EAAiBC,GACtB,MAAuB,UAAnBA,EACOC,OAEiB,YAAnBD,EACEE,cADN,CAGT,CAeA,SAASC,EAASZ,GACd,OAAOA,EAAMa,QAAQ,sBAAuB,CAACC,EAAGC,IAASA,EAAKC,cAClE,CACA,SAASC,EAAkBjB,GACvB,OAAOY,EAASZ,EAAMa,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KAC7D,CACA,SAASK,EAAWlB,GAChB,OAAOA,EAAMmB,OAAO,GAAGH,cAAgBhB,EAAMoB,MAAM,EACvD,CACA,SAASC,EAAUrB,GACf,OAAOA,EAAMa,QAAQ,WAAY,CAACC,EAAGC,IAAS,IAAIA,EAAKO,gBAC3D,CAKA,SAASC,EAAYC,GACjB,OAAOA,OACX,CACA,SAASC,EAAYD,EAAQE,GACzB,OAAO9E,OAAO+E,UAAUC,eAAe7E,KAAKyE,EAAQE,EACxD,CAEA,MAAMG,EAAe,CAAC,OAAQ,OAAQ,MAAO,SAC7C,MAAMC,EACF,WAAAtG,CAAY6E,EAAS3C,EAAOqE,EAAYC,GACpCpG,KAAKyE,QAAUA,EACfzE,KAAK8B,MAAQA,EACb9B,KAAKH,YAAcsG,EAAWtG,aAAe4E,EAC7CzE,KAAKF,UAAYqG,EAAWrG,WA0EpC,SAAuC2E,GACnC,MAAM4B,EAAU5B,EAAQ4B,QAAQX,cAChC,GAAIW,KAAWC,EACX,OAAOA,EAAkBD,GAAS5B,EAE1C,CA/EiD8B,CAA8B9B,IAAYtB,EAAM,sBACzFnD,KAAKD,aAAeoG,EAAWpG,cAAgB,CAAC,EAChDC,KAAKwG,WAAaL,EAAWK,YAAcrD,EAAM,sBACjDnD,KAAKyG,WAAaN,EAAWM,YAActD,EAAM,uBACjDnD,KAAK0G,UAAYP,EAAWO,WAAa,GACzC1G,KAAKoG,OAASA,CAClB,CACA,eAAOO,CAASC,EAAOR,GACnB,OAAO,IAAIpG,KAAK4G,EAAMnC,QAASmC,EAAM9E,MA7E7C,SAAqC+E,GACjC,MACMC,EADSD,EAAiBE,OACTC,MAAMrC,IAAsB,GACnD,IAAI7E,EAAYgH,EAAQ,GACpBJ,EAAYI,EAAQ,GAKxB,OAJIJ,IAAc,CAAC,UAAW,QAAS,YAAYO,SAASnH,KACxDA,GAAa,IAAI4G,IACjBA,EAAY,IAET,CACH7G,YAAa+E,EAAiBkC,EAAQ,IACtChH,YACAC,aAAc+G,EAAQ,IAcH/G,EAd0B+G,EAAQ,GAelD/G,EACFmH,MAAM,KACNvE,OAAO,CAACwE,EAASP,IAAU5F,OAAOC,OAAOkG,EAAS,CAAE,CAACP,EAAM3B,QAAQ,KAAM,MAAO,KAAKmC,KAAKR,KAAW,CAAC,IAjB5C,CAAC,EAC5DJ,WAAYM,EAAQ,GACpBL,WAAYK,EAAQ,GACpBJ,UAAWI,EAAQ,IAAMJ,GAWjC,IAA2B3G,CAT3B,CA4DoDsH,CAA4BT,EAAMU,SAAUlB,EAC5F,CACA,QAAAmB,GACI,MAAMC,EAAcxH,KAAK0G,UAAY,IAAI1G,KAAK0G,YAAc,GACtD7G,EAAcG,KAAK6E,gBAAkB,IAAI7E,KAAK6E,kBAAoB,GACxE,MAAO,GAAG7E,KAAKF,YAAY0H,IAAc3H,MAAgBG,KAAKwG,cAAcxG,KAAKyG,YACrF,CACA,yBAAAgB,CAA0B5G,GACtB,IAAKb,KAAK0G,UACN,OAAO,EAEX,MAAMgB,EAAU1H,KAAK0G,UAAUQ,MAAM,KACrC,GAAIlH,KAAK2H,sBAAsB9G,EAAO6G,GAClC,OAAO,EAEX,MAAME,EAAiBF,EAAQG,OAAQ7D,IAASiC,EAAagB,SAASjD,IAAM,GAC5E,QAAK4D,IAGA/B,EAAY7F,KAAK8H,YAAaF,IAC/BzE,EAAM,gCAAgCnD,KAAK0G,aAExC1G,KAAK8H,YAAYF,GAAgBlC,gBAAkB7E,EAAMmD,IAAI0B,cACxE,CACA,sBAAAqC,CAAuBlH,GACnB,IAAKb,KAAK0G,UACN,OAAO,EAEX,MAAMgB,EAAU,CAAC1H,KAAK0G,WACtB,QAAI1G,KAAK2H,sBAAsB9G,EAAO6G,EAI1C,CACA,UAAIM,GACA,MAAMA,EAAS,CAAC,EACVC,EAAU,IAAIC,OAAO,SAASlI,KAAKwG,yBAA0B,KACnE,IAAK,MAAM,KAAE2B,EAAI,MAAE/D,KAAW5C,MAAMC,KAAKzB,KAAKyE,QAAQ2D,YAAa,CAC/D,MAAMpB,EAAQmB,EAAKnB,MAAMiB,GACnBjE,EAAMgD,GAASA,EAAM,GACvBhD,IACAgE,EAAOhD,EAAShB,IAAQqE,EAASjE,GAEzC,CACA,OAAO4D,CACX,CACA,mBAAInD,GACA,OA7FsBhF,EA6FMG,KAAKH,cA5FlBiF,OACR,SAEFjF,GAAekF,SACb,gBADN,EAJT,IAA8BlF,CA8F1B,CACA,eAAIiI,GACA,OAAO9H,KAAKoG,OAAO0B,WACvB,CACA,qBAAAH,CAAsB9G,EAAO6G,GACzB,MAAOY,EAAMC,EAAMC,EAAKC,GAASxC,EAAapD,IAAK6F,GAAahB,EAAQT,SAASyB,IACjF,OAAO7H,EAAM8H,UAAYL,GAAQzH,EAAM+H,UAAYL,GAAQ1H,EAAMgI,SAAWL,GAAO3H,EAAMiI,WAAaL,CAC1G,EAEJ,MAAMnC,EAAoB,CACtByC,EAAG,IAAM,QACTC,OAAQ,IAAM,QACdC,KAAM,IAAM,SACZC,QAAS,IAAM,SACfC,MAAQC,GAAiC,UAA1BA,EAAEC,aAAa,QAAsB,QAAU,QAC9DC,OAAQ,IAAM,SACdC,SAAU,IAAM,SAQpB,SAASpG,EAAMC,GACX,MAAM,IAAIoG,MAAMpG,EACpB,CACA,SAASiF,EAASjE,GACd,IACI,OAAOqF,KAAKC,MAAMtF,EACtB,CACA,MAAOuF,GACH,OAAOvF,CACX,CACJ,CAEA,MAAMwF,EACF,WAAAhK,CAAYiK,EAASC,GACjB9J,KAAK6J,QAAUA,EACf7J,KAAK8J,OAASA,CAClB,CACA,SAAIhI,GACA,OAAO9B,KAAK8J,OAAOhI,KACvB,CACA,eAAIjC,GACA,OAAOG,KAAK8J,OAAOjK,WACvB,CACA,gBAAIE,GACA,OAAOC,KAAK8J,OAAO/J,YACvB,CACA,cAAIyG,GACA,OAAOxG,KAAK6J,QAAQrD,UACxB,CACA,WAAA5F,CAAYC,GACR,MAAMkJ,EAAc/J,KAAKgK,mBAAmBnJ,GACxCb,KAAKiK,qBAAqBpJ,IAAUb,KAAKkK,oBAAoBH,IAC7D/J,KAAKmK,gBAAgBJ,EAE7B,CACA,aAAIjK,GACA,OAAOE,KAAK8J,OAAOhK,SACvB,CACA,UAAIsK,GACA,MAAMA,EAASpK,KAAKqK,WAAWrK,KAAKyG,YACpC,GAAqB,mBAAV2D,EACP,OAAOA,EAEX,MAAM,IAAIZ,MAAM,WAAWxJ,KAAK8J,wCAAwC9J,KAAKyG,cACjF,CACA,mBAAAyD,CAAoBrJ,GAChB,MAAM,QAAE4D,GAAYzE,KAAK8J,QACnB,wBAAEQ,GAA4BtK,KAAK6J,QAAQ5H,aAC3C,WAAEoI,GAAerK,KAAK6J,QAC5B,IAAIU,GAAS,EACb,IAAK,MAAOpC,EAAM/D,KAAUpD,OAAOwJ,QAAQxK,KAAKD,cAC5C,GAAIoI,KAAQmC,EAAyB,CACjC,MAAMzC,EAASyC,EAAwBnC,GACvCoC,EAASA,GAAU1C,EAAO,CAAEM,OAAM/D,QAAOvD,QAAO4D,UAAS4F,cAC7D,CAKJ,OAAOE,CACX,CACA,kBAAAP,CAAmBnJ,GACf,OAAOG,OAAOC,OAAOJ,EAAO,CAAEmH,OAAQhI,KAAK8J,OAAO9B,QACtD,CACA,eAAAmC,CAAgBtJ,GACZ,MAAM,OAAE6D,EAAM,cAAE+F,GAAkB5J,EAClC,IACIb,KAAKoK,OAAOjJ,KAAKnB,KAAKqK,WAAYxJ,GAClCb,KAAK6J,QAAQa,iBAAiB1K,KAAKyG,WAAY,CAAE5F,QAAO6D,SAAQ+F,gBAAeX,OAAQ9J,KAAKyG,YAChG,CACA,MAAOtD,GACH,MAAM,WAAEqD,EAAU,WAAE6D,EAAU,QAAE5F,EAAO,MAAE3C,GAAU9B,KAC7CqD,EAAS,CAAEmD,aAAY6D,aAAY5F,UAAS3C,QAAOjB,SACzDb,KAAK6J,QAAQ3G,YAAYC,EAAO,oBAAoBnD,KAAK8J,UAAWzG,EACxE,CACJ,CACA,oBAAA4G,CAAqBpJ,GACjB,MAAMhB,EAAcgB,EAAM6D,OAC1B,QAAI7D,aAAiB8J,eAAiB3K,KAAK8J,OAAOrC,0BAA0B5G,QAGxEA,aAAiB+J,YAAc5K,KAAK8J,OAAO/B,uBAAuBlH,MAGlEb,KAAKyE,UAAY5E,IAGZA,aAAuBgL,SAAW7K,KAAKyE,QAAQqG,SAASjL,GACtDG,KAAK+K,MAAMC,gBAAgBnL,GAG3BG,KAAK+K,MAAMC,gBAAgBhL,KAAK8J,OAAOrF,WAEtD,CACA,cAAI4F,GACA,OAAOrK,KAAK6J,QAAQQ,UACxB,CACA,cAAI5D,GACA,OAAOzG,KAAK8J,OAAOrD,UACvB,CACA,WAAIhC,GACA,OAAOzE,KAAK+K,MAAMtG,OACtB,CACA,SAAIsG,GACA,OAAO/K,KAAK6J,QAAQkB,KACxB,EAGJ,MAAME,EACF,WAAArL,CAAY6E,EAASyG,GACjBlL,KAAKmL,qBAAuB,CAAE/C,YAAY,EAAMgD,WAAW,EAAMC,SAAS,GAC1ErL,KAAKyE,QAAUA,EACfzE,KAAKoC,SAAU,EACfpC,KAAKkL,SAAWA,EAChBlL,KAAKsL,SAAW,IAAIpL,IACpBF,KAAKuL,iBAAmB,IAAIC,iBAAkBC,GAAczL,KAAK0L,iBAAiBD,GACtF,CACA,KAAApJ,GACSrC,KAAKoC,UACNpC,KAAKoC,SAAU,EACfpC,KAAKuL,iBAAiBI,QAAQ3L,KAAKyE,QAASzE,KAAKmL,sBACjDnL,KAAK4L,UAEb,CACA,KAAAC,CAAMC,GACE9L,KAAKoC,UACLpC,KAAKuL,iBAAiBlL,aACtBL,KAAKoC,SAAU,GAEnB0J,IACK9L,KAAKoC,UACNpC,KAAKuL,iBAAiBI,QAAQ3L,KAAKyE,QAASzE,KAAKmL,sBACjDnL,KAAKoC,SAAU,EAEvB,CACA,IAAAK,GACQzC,KAAKoC,UACLpC,KAAKuL,iBAAiBQ,cACtB/L,KAAKuL,iBAAiBlL,aACtBL,KAAKoC,SAAU,EAEvB,CACA,OAAAwJ,GACI,GAAI5L,KAAKoC,QAAS,CACd,MAAM0E,EAAU,IAAI5G,IAAIF,KAAKgM,uBAC7B,IAAK,MAAMvH,KAAWjD,MAAMC,KAAKzB,KAAKsL,UAC7BxE,EAAQmF,IAAIxH,IACbzE,KAAKkM,cAAczH,GAG3B,IAAK,MAAMA,KAAWjD,MAAMC,KAAKqF,GAC7B9G,KAAKmM,WAAW1H,EAExB,CACJ,CACA,gBAAAiH,CAAiBD,GACb,GAAIzL,KAAKoC,QACL,IAAK,MAAMgK,KAAYX,EACnBzL,KAAKqM,gBAAgBD,EAGjC,CACA,eAAAC,CAAgBD,GACS,cAAjBA,EAASE,KACTtM,KAAKuM,uBAAuBH,EAAS1H,OAAQ0H,EAASI,eAEhC,aAAjBJ,EAASE,OACdtM,KAAKyM,oBAAoBL,EAASM,cAClC1M,KAAK2M,kBAAkBP,EAASQ,YAExC,CACA,sBAAAL,CAAuB9H,EAAS+H,GACxBxM,KAAKsL,SAASW,IAAIxH,GACdzE,KAAKkL,SAAS2B,yBAA2B7M,KAAK8M,aAAarI,GAC3DzE,KAAKkL,SAAS2B,wBAAwBpI,EAAS+H,GAG/CxM,KAAKkM,cAAczH,GAGlBzE,KAAK8M,aAAarI,IACvBzE,KAAKmM,WAAW1H,EAExB,CACA,mBAAAgI,CAAoBM,GAChB,IAAK,MAAMC,KAAQxL,MAAMC,KAAKsL,GAAQ,CAClC,MAAMtI,EAAUzE,KAAKiN,gBAAgBD,GACjCvI,GACAzE,KAAKkN,YAAYzI,EAASzE,KAAKkM,cAEvC,CACJ,CACA,iBAAAS,CAAkBI,GACd,IAAK,MAAMC,KAAQxL,MAAMC,KAAKsL,GAAQ,CAClC,MAAMtI,EAAUzE,KAAKiN,gBAAgBD,GACjCvI,GAAWzE,KAAKmN,gBAAgB1I,IAChCzE,KAAKkN,YAAYzI,EAASzE,KAAKmM,WAEvC,CACJ,CACA,YAAAW,CAAarI,GACT,OAAOzE,KAAKkL,SAAS4B,aAAarI,EACtC,CACA,mBAAAuH,CAAoBoB,EAAOpN,KAAKyE,SAC5B,OAAOzE,KAAKkL,SAASc,oBAAoBoB,EAC7C,CACA,WAAAF,CAAYE,EAAMC,GACd,IAAK,MAAM5I,KAAWzE,KAAKgM,oBAAoBoB,GAC3CC,EAAUlM,KAAKnB,KAAMyE,EAE7B,CACA,eAAAwI,CAAgBD,GACZ,GAAIA,EAAKM,UAAYC,KAAKC,aACtB,OAAOR,CAEf,CACA,eAAAG,CAAgB1I,GACZ,OAAIA,EAAQgJ,aAAezN,KAAKyE,QAAQgJ,aAI7BzN,KAAKyE,QAAQqG,SAASrG,EAErC,CACA,UAAA0H,CAAW1H,GACFzE,KAAKsL,SAASW,IAAIxH,IACfzE,KAAKmN,gBAAgB1I,KACrBzE,KAAKsL,SAAS7K,IAAIgE,GACdzE,KAAKkL,SAASwC,gBACd1N,KAAKkL,SAASwC,eAAejJ,GAI7C,CACA,aAAAyH,CAAczH,GACNzE,KAAKsL,SAASW,IAAIxH,KAClBzE,KAAKsL,SAAS3K,OAAO8D,GACjBzE,KAAKkL,SAASyC,kBACd3N,KAAKkL,SAASyC,iBAAiBlJ,GAG3C,EAGJ,MAAMmJ,EACF,WAAAhO,CAAY6E,EAAS+H,EAAetB,GAChClL,KAAKwM,cAAgBA,EACrBxM,KAAKkL,SAAWA,EAChBlL,KAAK6N,gBAAkB,IAAI5C,EAAgBxG,EAASzE,KACxD,CACA,WAAIyE,GACA,OAAOzE,KAAK6N,gBAAgBpJ,OAChC,CACA,YAAIqJ,GACA,MAAO,IAAI9N,KAAKwM,gBACpB,CACA,KAAAnK,GACIrC,KAAK6N,gBAAgBxL,OACzB,CACA,KAAAwJ,CAAMC,GACF9L,KAAK6N,gBAAgBhC,MAAMC,EAC/B,CACA,IAAArJ,GACIzC,KAAK6N,gBAAgBpL,MACzB,CACA,OAAAmJ,GACI5L,KAAK6N,gBAAgBjC,SACzB,CACA,WAAIxJ,GACA,OAAOpC,KAAK6N,gBAAgBzL,OAChC,CACA,YAAA0K,CAAarI,GACT,OAAOA,EAAQsJ,aAAa/N,KAAKwM,cACrC,CACA,mBAAAR,CAAoBoB,GAChB,MAAMpG,EAAQhH,KAAK8M,aAAaM,GAAQ,CAACA,GAAQ,GAC3CtG,EAAUtF,MAAMC,KAAK2L,EAAKY,iBAAiBhO,KAAK8N,WACtD,OAAO9G,EAAMlE,OAAOgE,EACxB,CACA,cAAA4G,CAAejJ,GACPzE,KAAKkL,SAAS+C,yBACdjO,KAAKkL,SAAS+C,wBAAwBxJ,EAASzE,KAAKwM,cAE5D,CACA,gBAAAmB,CAAiBlJ,GACTzE,KAAKkL,SAASgD,2BACdlO,KAAKkL,SAASgD,0BAA0BzJ,EAASzE,KAAKwM,cAE9D,CACA,uBAAAK,CAAwBpI,EAAS+H,GACzBxM,KAAKkL,SAASiD,8BAAgCnO,KAAKwM,eAAiBA,GACpExM,KAAKkL,SAASiD,6BAA6B1J,EAAS+H,EAE5D,EAGJ,SAAS/L,EAAIoC,EAAKmB,EAAKI,GACnBgK,EAAMvL,EAAKmB,GAAKvD,IAAI2D,EACxB,CACA,SAASiK,EAAIxL,EAAKmB,EAAKI,GACnBgK,EAAMvL,EAAKmB,GAAKrD,OAAOyD,GAW3B,SAAevB,EAAKmB,GAChB,MAAMtB,EAASG,EAAIc,IAAIK,GACT,MAAVtB,GAAiC,GAAfA,EAAOnB,MACzBsB,EAAIlC,OAAOqD,EAEnB,CAfIsK,CAAMzL,EAAKmB,EACf,CACA,SAASoK,EAAMvL,EAAKmB,GAChB,IAAItB,EAASG,EAAIc,IAAIK,GAKrB,OAJKtB,IACDA,EAAS,IAAIxC,IACb2C,EAAIgB,IAAIG,EAAKtB,IAEVA,CACX,CAQA,MAAM6L,EACF,WAAA3O,GACII,KAAKwO,YAAc,IAAIrM,GAC3B,CACA,QAAI4B,GACA,OAAOvC,MAAMC,KAAKzB,KAAKwO,YAAYzK,OACvC,CACA,UAAIrB,GAEA,OADalB,MAAMC,KAAKzB,KAAKwO,YAAY9L,UAC7BC,OAAO,CAACD,EAAQmB,IAAQnB,EAAOI,OAAOtB,MAAMC,KAAKoC,IAAO,GACxE,CACA,QAAItC,GAEA,OADaC,MAAMC,KAAKzB,KAAKwO,YAAY9L,UAC7BC,OAAO,CAACpB,EAAMsC,IAAQtC,EAAOsC,EAAItC,KAAM,EACvD,CACA,GAAAd,CAAIuD,EAAKI,GACL3D,EAAIT,KAAKwO,YAAaxK,EAAKI,EAC/B,CACA,OAAOJ,EAAKI,GACRiK,EAAIrO,KAAKwO,YAAaxK,EAAKI,EAC/B,CACA,GAAA6H,CAAIjI,EAAKI,GACL,MAAM1B,EAAS1C,KAAKwO,YAAY7K,IAAIK,GACpC,OAAiB,MAAVtB,GAAkBA,EAAOuJ,IAAI7H,EACxC,CACA,MAAAqK,CAAOzK,GACH,OAAOhE,KAAKwO,YAAYvC,IAAIjI,EAChC,CACA,QAAA0K,CAAStK,GAEL,OADa5C,MAAMC,KAAKzB,KAAKwO,YAAY9L,UAC7BiM,KAAM9K,GAAQA,EAAIoI,IAAI7H,GACtC,CACA,eAAAwK,CAAgB5K,GACZ,MAAMtB,EAAS1C,KAAKwO,YAAY7K,IAAIK,GACpC,OAAOtB,EAASlB,MAAMC,KAAKiB,GAAU,EACzC,CACA,eAAAmM,CAAgBzK,GACZ,OAAO5C,MAAMC,KAAKzB,KAAKwO,aAClB3G,OAAO,EAAEiH,EAAMpM,KAAYA,EAAOuJ,IAAI7H,IACtCvB,IAAI,EAAEmB,EAAK+K,KAAa/K,EACjC,EA4BJ,MAAMgL,EACF,WAAApP,CAAY6E,EAASqJ,EAAU5C,EAAUhC,GACrClJ,KAAKiP,UAAYnB,EACjB9N,KAAKkJ,QAAUA,EACflJ,KAAK6N,gBAAkB,IAAI5C,EAAgBxG,EAASzE,MACpDA,KAAKkL,SAAWA,EAChBlL,KAAKkP,iBAAmB,IAAIX,CAChC,CACA,WAAInM,GACA,OAAOpC,KAAK6N,gBAAgBzL,OAChC,CACA,YAAI0L,GACA,OAAO9N,KAAKiP,SAChB,CACA,YAAInB,CAASA,GACT9N,KAAKiP,UAAYnB,EACjB9N,KAAK4L,SACT,CACA,KAAAvJ,GACIrC,KAAK6N,gBAAgBxL,OACzB,CACA,KAAAwJ,CAAMC,GACF9L,KAAK6N,gBAAgBhC,MAAMC,EAC/B,CACA,IAAArJ,GACIzC,KAAK6N,gBAAgBpL,MACzB,CACA,OAAAmJ,GACI5L,KAAK6N,gBAAgBjC,SACzB,CACA,WAAInH,GACA,OAAOzE,KAAK6N,gBAAgBpJ,OAChC,CACA,YAAAqI,CAAarI,GACT,MAAM,SAAEqJ,GAAa9N,KACrB,GAAI8N,EAAU,CACV,MAAMhH,EAAUrC,EAAQqC,QAAQgH,GAChC,OAAI9N,KAAKkL,SAASiE,qBACPrI,GAAW9G,KAAKkL,SAASiE,qBAAqB1K,EAASzE,KAAKkJ,SAEhEpC,CACX,CAEI,OAAO,CAEf,CACA,mBAAAkF,CAAoBoB,GAChB,MAAM,SAAEU,GAAa9N,KACrB,GAAI8N,EAAU,CACV,MAAM9G,EAAQhH,KAAK8M,aAAaM,GAAQ,CAACA,GAAQ,GAC3CtG,EAAUtF,MAAMC,KAAK2L,EAAKY,iBAAiBF,IAAWjG,OAAQb,GAAUhH,KAAK8M,aAAa9F,IAChG,OAAOA,EAAMlE,OAAOgE,EACxB,CAEI,MAAO,EAEf,CACA,cAAA4G,CAAejJ,GACX,MAAM,SAAEqJ,GAAa9N,KACjB8N,GACA9N,KAAKoP,gBAAgB3K,EAASqJ,EAEtC,CACA,gBAAAH,CAAiBlJ,GACb,MAAM4K,EAAYrP,KAAKkP,iBAAiBL,gBAAgBpK,GACxD,IAAK,MAAMqJ,KAAYuB,EACnBrP,KAAKsP,kBAAkB7K,EAASqJ,EAExC,CACA,uBAAAjB,CAAwBpI,EAAS8K,GAC7B,MAAM,SAAEzB,GAAa9N,KACrB,GAAI8N,EAAU,CACV,MAAMhH,EAAU9G,KAAK8M,aAAarI,GAC5B+K,EAAgBxP,KAAKkP,iBAAiBjD,IAAI6B,EAAUrJ,GACtDqC,IAAY0I,EACZxP,KAAKoP,gBAAgB3K,EAASqJ,IAExBhH,GAAW0I,GACjBxP,KAAKsP,kBAAkB7K,EAASqJ,EAExC,CACJ,CACA,eAAAsB,CAAgB3K,EAASqJ,GACrB9N,KAAKkL,SAASkE,gBAAgB3K,EAASqJ,EAAU9N,KAAKkJ,SACtDlJ,KAAKkP,iBAAiBzO,IAAIqN,EAAUrJ,EACxC,CACA,iBAAA6K,CAAkB7K,EAASqJ,GACvB9N,KAAKkL,SAASoE,kBAAkB7K,EAASqJ,EAAU9N,KAAKkJ,SACxDlJ,KAAKkP,iBAAiBvO,OAAOmN,EAAUrJ,EAC3C,EAGJ,MAAMgL,EACF,WAAA7P,CAAY6E,EAASyG,GACjBlL,KAAKyE,QAAUA,EACfzE,KAAKkL,SAAWA,EAChBlL,KAAKoC,SAAU,EACfpC,KAAK0P,UAAY,IAAIvN,IACrBnC,KAAKuL,iBAAmB,IAAIC,iBAAkBC,GAAczL,KAAK0L,iBAAiBD,GACtF,CACA,KAAApJ,GACSrC,KAAKoC,UACNpC,KAAKoC,SAAU,EACfpC,KAAKuL,iBAAiBI,QAAQ3L,KAAKyE,QAAS,CAAE2D,YAAY,EAAMuH,mBAAmB,IACnF3P,KAAK4L,UAEb,CACA,IAAAnJ,GACQzC,KAAKoC,UACLpC,KAAKuL,iBAAiBQ,cACtB/L,KAAKuL,iBAAiBlL,aACtBL,KAAKoC,SAAU,EAEvB,CACA,OAAAwJ,GACI,GAAI5L,KAAKoC,QACL,IAAK,MAAMoK,KAAiBxM,KAAK4P,oBAC7B5P,KAAK6P,iBAAiBrD,EAAe,KAGjD,CACA,gBAAAd,CAAiBD,GACb,GAAIzL,KAAKoC,QACL,IAAK,MAAMgK,KAAYX,EACnBzL,KAAKqM,gBAAgBD,EAGjC,CACA,eAAAC,CAAgBD,GACZ,MAAMI,EAAgBJ,EAASI,cAC3BA,GACAxM,KAAK6P,iBAAiBrD,EAAeJ,EAAS0D,SAEtD,CACA,gBAAAD,CAAiBrD,EAAesD,GAC5B,MAAM9L,EAAMhE,KAAKkL,SAAS6E,4BAA4BvD,GACtD,GAAW,MAAPxI,EAAa,CACRhE,KAAK0P,UAAUzD,IAAIO,IACpBxM,KAAKgQ,kBAAkBhM,EAAKwI,GAEhC,MAAMpI,EAAQpE,KAAKyE,QAAQ4E,aAAamD,GAIxC,GAHIxM,KAAK0P,UAAU/L,IAAI6I,IAAkBpI,GACrCpE,KAAKiQ,sBAAsB7L,EAAOJ,EAAK8L,GAE9B,MAAT1L,EAAe,CACf,MAAM0L,EAAW9P,KAAK0P,UAAU/L,IAAI6I,GACpCxM,KAAK0P,UAAU/O,OAAO6L,GAClBsD,GACA9P,KAAKkQ,oBAAoBlM,EAAKwI,EAAesD,EACrD,MAEI9P,KAAK0P,UAAU7L,IAAI2I,EAAepI,EAE1C,CACJ,CACA,iBAAA4L,CAAkBhM,EAAKwI,GACfxM,KAAKkL,SAAS8E,mBACdhQ,KAAKkL,SAAS8E,kBAAkBhM,EAAKwI,EAE7C,CACA,qBAAAyD,CAAsB7L,EAAOJ,EAAK8L,GAC1B9P,KAAKkL,SAAS+E,uBACdjQ,KAAKkL,SAAS+E,sBAAsB7L,EAAOJ,EAAK8L,EAExD,CACA,mBAAAI,CAAoBlM,EAAKwI,EAAesD,GAChC9P,KAAKkL,SAASgF,qBACdlQ,KAAKkL,SAASgF,oBAAoBlM,EAAKwI,EAAesD,EAE9D,CACA,uBAAIF,GACA,OAAOpO,MAAMC,KAAK,IAAIvB,IAAIF,KAAKmQ,sBAAsBrN,OAAO9C,KAAKoQ,yBACrE,CACA,yBAAID,GACA,OAAO3O,MAAMC,KAAKzB,KAAKyE,QAAQ2D,YAAYvF,IAAKwN,GAAcA,EAAUlI,KAC5E,CACA,0BAAIiI,GACA,OAAO5O,MAAMC,KAAKzB,KAAK0P,UAAU3L,OACrC,EAGJ,MAAMuM,EACF,WAAA1Q,CAAY6E,EAAS+H,EAAetB,GAChClL,KAAKuQ,kBAAoB,IAAI3C,EAAkBnJ,EAAS+H,EAAexM,MACvEA,KAAKkL,SAAWA,EAChBlL,KAAKwQ,gBAAkB,IAAIjC,CAC/B,CACA,WAAInM,GACA,OAAOpC,KAAKuQ,kBAAkBnO,OAClC,CACA,KAAAC,GACIrC,KAAKuQ,kBAAkBlO,OAC3B,CACA,KAAAwJ,CAAMC,GACF9L,KAAKuQ,kBAAkB1E,MAAMC,EACjC,CACA,IAAArJ,GACIzC,KAAKuQ,kBAAkB9N,MAC3B,CACA,OAAAmJ,GACI5L,KAAKuQ,kBAAkB3E,SAC3B,CACA,WAAInH,GACA,OAAOzE,KAAKuQ,kBAAkB9L,OAClC,CACA,iBAAI+H,GACA,OAAOxM,KAAKuQ,kBAAkB/D,aAClC,CACA,uBAAAyB,CAAwBxJ,GACpBzE,KAAKyQ,cAAczQ,KAAK0Q,qBAAqBjM,GACjD,CACA,4BAAA0J,CAA6B1J,GACzB,MAAOkM,EAAiBC,GAAiB5Q,KAAK6Q,wBAAwBpM,GACtEzE,KAAK8Q,gBAAgBH,GACrB3Q,KAAKyQ,cAAcG,EACvB,CACA,yBAAA1C,CAA0BzJ,GACtBzE,KAAK8Q,gBAAgB9Q,KAAKwQ,gBAAgB5B,gBAAgBnK,GAC9D,CACA,aAAAgM,CAAcM,GACVA,EAAOxO,QAASqE,GAAU5G,KAAKgR,aAAapK,GAChD,CACA,eAAAkK,CAAgBC,GACZA,EAAOxO,QAASqE,GAAU5G,KAAKiR,eAAerK,GAClD,CACA,YAAAoK,CAAapK,GACT5G,KAAKkL,SAAS8F,aAAapK,GAC3B5G,KAAKwQ,gBAAgB/P,IAAImG,EAAMnC,QAASmC,EAC5C,CACA,cAAAqK,CAAerK,GACX5G,KAAKkL,SAAS+F,eAAerK,GAC7B5G,KAAKwQ,gBAAgB7P,OAAOiG,EAAMnC,QAASmC,EAC/C,CACA,uBAAAiK,CAAwBpM,GACpB,MAAMyM,EAAiBlR,KAAKwQ,gBAAgB5B,gBAAgBnK,GACtD0M,EAAgBnR,KAAK0Q,qBAAqBjM,GAC1C2M,EAqBd,SAAazP,EAAMC,GACf,MAAMyP,EAASC,KAAKC,IAAI5P,EAAK0P,OAAQzP,EAAMyP,QAC3C,OAAO7P,MAAMC,KAAK,CAAE4P,UAAU,CAACnM,EAAGpD,IAAU,CAACH,EAAKG,GAAQF,EAAME,IACpE,CAxBoC0P,CAAIN,EAAgBC,GAAeM,UAAU,EAAEC,EAAeC,MAAkB,OAyBtF/P,EAzBqH+P,KAyB3HhQ,EAzB4G+P,IA0BjH9P,GAASD,EAAKG,OAASF,EAAME,OAASH,EAAK2F,SAAW1F,EAAM0F,SAD/E,IAAwB3F,EAAMC,IAxBtB,OAA4B,GAAxBwP,EACO,CAAC,GAAI,IAGL,CAACF,EAAe1L,MAAM4L,GAAsBD,EAAc3L,MAAM4L,GAE/E,CACA,oBAAAV,CAAqBjM,GACjB,MAAM+H,EAAgBxM,KAAKwM,cAE3B,OAGR,SAA0BoF,EAAanN,EAAS+H,GAC5C,OAAOoF,EACF7K,OACAG,MAAM,OACNW,OAAQP,GAAYA,EAAQ+J,QAC5BxO,IAAI,CAACyE,EAASxF,KAAU,CAAG2C,UAAS+H,gBAAelF,UAASxF,UACrE,CATe+P,CADapN,EAAQ4E,aAAamD,IAAkB,GACtB/H,EAAS+H,EAClD,EAiBJ,MAAMsF,EACF,WAAAlS,CAAY6E,EAAS+H,EAAetB,GAChClL,KAAK+R,kBAAoB,IAAIzB,EAAkB7L,EAAS+H,EAAexM,MACvEA,KAAKkL,SAAWA,EAChBlL,KAAKgS,oBAAsB,IAAIC,QAC/BjS,KAAKkS,uBAAyB,IAAID,OACtC,CACA,WAAI7P,GACA,OAAOpC,KAAK+R,kBAAkB3P,OAClC,CACA,KAAAC,GACIrC,KAAK+R,kBAAkB1P,OAC3B,CACA,IAAAI,GACIzC,KAAK+R,kBAAkBtP,MAC3B,CACA,OAAAmJ,GACI5L,KAAK+R,kBAAkBnG,SAC3B,CACA,WAAInH,GACA,OAAOzE,KAAK+R,kBAAkBtN,OAClC,CACA,iBAAI+H,GACA,OAAOxM,KAAK+R,kBAAkBvF,aAClC,CACA,YAAAwE,CAAapK,GACT,MAAM,QAAEnC,GAAYmC,GACd,MAAExC,GAAUpE,KAAKmS,yBAAyBvL,GAC5CxC,IACApE,KAAKoS,6BAA6B3N,GAASZ,IAAI+C,EAAOxC,GACtDpE,KAAKkL,SAASmH,oBAAoB5N,EAASL,GAEnD,CACA,cAAA6M,CAAerK,GACX,MAAM,QAAEnC,GAAYmC,GACd,MAAExC,GAAUpE,KAAKmS,yBAAyBvL,GAC5CxC,IACApE,KAAKoS,6BAA6B3N,GAAS9D,OAAOiG,GAClD5G,KAAKkL,SAASoH,sBAAsB7N,EAASL,GAErD,CACA,wBAAA+N,CAAyBvL,GACrB,IAAI2L,EAAcvS,KAAKgS,oBAAoBrO,IAAIiD,GAK/C,OAJK2L,IACDA,EAAcvS,KAAKwS,WAAW5L,GAC9B5G,KAAKgS,oBAAoBnO,IAAI+C,EAAO2L,IAEjCA,CACX,CACA,4BAAAH,CAA6B3N,GACzB,IAAIgO,EAAgBzS,KAAKkS,uBAAuBvO,IAAIc,GAKpD,OAJKgO,IACDA,EAAgB,IAAItQ,IACpBnC,KAAKkS,uBAAuBrO,IAAIY,EAASgO,IAEtCA,CACX,CACA,UAAAD,CAAW5L,GACP,IAEI,MAAO,CAAExC,MADKpE,KAAKkL,SAASwH,mBAAmB9L,GAEnD,CACA,MAAOzD,GACH,MAAO,CAAEA,QACb,CACJ,EAGJ,MAAMwP,EACF,WAAA/S,CAAYiK,EAASqB,GACjBlL,KAAK6J,QAAUA,EACf7J,KAAKkL,SAAWA,EAChBlL,KAAK4S,iBAAmB,IAAIzQ,GAChC,CACA,KAAAE,GACSrC,KAAK6S,oBACN7S,KAAK6S,kBAAoB,IAAIf,EAAkB9R,KAAKyE,QAASzE,KAAK8S,gBAAiB9S,MACnFA,KAAK6S,kBAAkBxQ,QAE/B,CACA,IAAAI,GACQzC,KAAK6S,oBACL7S,KAAK6S,kBAAkBpQ,cAChBzC,KAAK6S,kBACZ7S,KAAK+S,uBAEb,CACA,WAAItO,GACA,OAAOzE,KAAK6J,QAAQpF,OACxB,CACA,cAAI+B,GACA,OAAOxG,KAAK6J,QAAQrD,UACxB,CACA,mBAAIsM,GACA,OAAO9S,KAAKoG,OAAO0M,eACvB,CACA,UAAI1M,GACA,OAAOpG,KAAK6J,QAAQzD,MACxB,CACA,YAAI/E,GACA,OAAOG,MAAMC,KAAKzB,KAAK4S,iBAAiBlQ,SAC5C,CACA,aAAAsQ,CAAclJ,GACV,MAAMtJ,EAAU,IAAIoJ,EAAQ5J,KAAK6J,QAASC,GAC1C9J,KAAK4S,iBAAiB/O,IAAIiG,EAAQtJ,GAClCR,KAAKkL,SAAS3K,iBAAiBC,EACnC,CACA,gBAAAyS,CAAiBnJ,GACb,MAAMtJ,EAAUR,KAAK4S,iBAAiBjP,IAAImG,GACtCtJ,IACAR,KAAK4S,iBAAiBjS,OAAOmJ,GAC7B9J,KAAKkL,SAASxK,oBAAoBF,GAE1C,CACA,oBAAAuS,GACI/S,KAAKqB,SAASkB,QAAS/B,GAAYR,KAAKkL,SAASxK,oBAAoBF,GAAS,IAC9ER,KAAK4S,iBAAiBM,OAC1B,CACA,kBAAAR,CAAmB9L,GACf,MAAMkD,EAAS5D,EAAOS,SAASC,EAAO5G,KAAKoG,QAC3C,GAAI0D,EAAOtD,YAAcxG,KAAKwG,WAC1B,OAAOsD,CAEf,CACA,mBAAAuI,CAAoB5N,EAASqF,GACzB9J,KAAKgT,cAAclJ,EACvB,CACA,qBAAAwI,CAAsB7N,EAASqF,GAC3B9J,KAAKiT,iBAAiBnJ,EAC1B,EAGJ,MAAMqJ,EACF,WAAAvT,CAAYiK,EAASuJ,GACjBpT,KAAK6J,QAAUA,EACf7J,KAAKoT,SAAWA,EAChBpT,KAAKqT,kBAAoB,IAAI5D,EAAkBzP,KAAKyE,QAASzE,MAC7DA,KAAKsT,mBAAqBtT,KAAKqK,WAAWiJ,kBAC9C,CACA,KAAAjR,GACIrC,KAAKqT,kBAAkBhR,QACvBrC,KAAKuT,wCACT,CACA,IAAA9Q,GACIzC,KAAKqT,kBAAkB5Q,MAC3B,CACA,WAAIgC,GACA,OAAOzE,KAAK6J,QAAQpF,OACxB,CACA,cAAI4F,GACA,OAAOrK,KAAK6J,QAAQQ,UACxB,CACA,2BAAA0F,CAA4BvD,GACxB,GAAIA,KAAiBxM,KAAKsT,mBACtB,OAAOtT,KAAKsT,mBAAmB9G,GAAerE,IAEtD,CACA,iBAAA6H,CAAkBhM,EAAKwI,GACnB,MAAMrG,EAAanG,KAAKsT,mBAAmB9G,GACtCxM,KAAK0O,SAAS1K,IACfhE,KAAKwT,sBAAsBxP,EAAKmC,EAAWsN,OAAOzT,KAAKoT,SAASpP,IAAOmC,EAAWsN,OAAOtN,EAAWuN,cAE5G,CACA,qBAAAzD,CAAsB7L,EAAO+D,EAAM2H,GAC/B,MAAM3J,EAAanG,KAAK2T,uBAAuBxL,GACjC,OAAV/D,IAEa,OAAb0L,IACAA,EAAW3J,EAAWsN,OAAOtN,EAAWuN,eAE5C1T,KAAKwT,sBAAsBrL,EAAM/D,EAAO0L,GAC5C,CACA,mBAAAI,CAAoBlM,EAAKwI,EAAesD,GACpC,MAAM3J,EAAanG,KAAK2T,uBAAuB3P,GAC3ChE,KAAK0O,SAAS1K,GACdhE,KAAKwT,sBAAsBxP,EAAKmC,EAAWsN,OAAOzT,KAAKoT,SAASpP,IAAO8L,GAGvE9P,KAAKwT,sBAAsBxP,EAAKmC,EAAWsN,OAAOtN,EAAWuN,cAAe5D,EAEpF,CACA,sCAAAyD,GACI,IAAK,MAAM,IAAEvP,EAAG,KAAEmE,EAAI,aAAEuL,EAAY,OAAED,KAAYzT,KAAK4T,iBAC/BC,MAAhBH,GAA8B1T,KAAKqK,WAAWyJ,KAAK7H,IAAIjI,IACvDhE,KAAKwT,sBAAsBrL,EAAMsL,EAAOC,QAAeG,EAGnE,CACA,qBAAAL,CAAsBrL,EAAM4L,EAAUC,GAClC,MAAMC,EAAoB,GAAG9L,WACvB+L,EAAgBlU,KAAKoT,SAASa,GACpC,GAA4B,mBAAjBC,EAA6B,CACpC,MAAM/N,EAAanG,KAAK2T,uBAAuBxL,GAC/C,IACI,MAAM/D,EAAQ+B,EAAWgO,OAAOJ,GAChC,IAAIjE,EAAWkE,EACXA,IACAlE,EAAW3J,EAAWgO,OAAOH,IAEjCE,EAAc/S,KAAKnB,KAAKoT,SAAUhP,EAAO0L,EAC7C,CACA,MAAO3M,GAIH,MAHIA,aAAiBiR,YACjBjR,EAAMC,QAAU,mBAAmBpD,KAAK6J,QAAQrD,cAAcL,EAAWgC,WAAWhF,EAAMC,WAExFD,CACV,CACJ,CACJ,CACA,oBAAIyQ,GACA,MAAM,mBAAEN,GAAuBtT,KAC/B,OAAOgB,OAAO+C,KAAKuP,GAAoBzQ,IAAKmB,GAAQsP,EAAmBtP,GAC3E,CACA,0BAAI2P,GACA,MAAMU,EAAc,CAAC,EAKrB,OAJArT,OAAO+C,KAAK/D,KAAKsT,oBAAoB/Q,QAASyB,IAC1C,MAAMmC,EAAanG,KAAKsT,mBAAmBtP,GAC3CqQ,EAAYlO,EAAWgC,MAAQhC,IAE5BkO,CACX,CACA,QAAA3F,CAASlC,GACL,MACM8H,EAAgB,MAAMhP,EADTtF,KAAK2T,uBAAuBnH,GACGrE,QAClD,OAAOnI,KAAKoT,SAASkB,EACzB,EAGJ,MAAMC,EACF,WAAA3U,CAAYiK,EAASqB,GACjBlL,KAAK6J,QAAUA,EACf7J,KAAKkL,SAAWA,EAChBlL,KAAKwU,cAAgB,IAAIjG,CAC7B,CACA,KAAAlM,GACSrC,KAAK+R,oBACN/R,KAAK+R,kBAAoB,IAAIzB,EAAkBtQ,KAAKyE,QAASzE,KAAKwM,cAAexM,MACjFA,KAAK+R,kBAAkB1P,QAE/B,CACA,IAAAI,GACQzC,KAAK+R,oBACL/R,KAAKyU,uBACLzU,KAAK+R,kBAAkBtP,cAChBzC,KAAK+R,kBAEpB,CACA,YAAAf,EAAa,QAAEvM,EAAS6C,QAASa,IACzBnI,KAAK+K,MAAMC,gBAAgBvG,IAC3BzE,KAAK0U,cAAcjQ,EAAS0D,EAEpC,CACA,cAAA8I,EAAe,QAAExM,EAAS6C,QAASa,IAC/BnI,KAAK2U,iBAAiBlQ,EAAS0D,EACnC,CACA,aAAAuM,CAAcjQ,EAAS0D,GACnB,IAAIyM,EACC5U,KAAKwU,cAAcvI,IAAI9D,EAAM1D,KAC9BzE,KAAKwU,cAAc/T,IAAI0H,EAAM1D,GACK,QAAjCmQ,EAAK5U,KAAK+R,yBAA2C,IAAZ6C,GAAyBA,EAAG/I,MAAM,IAAM7L,KAAKkL,SAAS2J,gBAAgBpQ,EAAS0D,IAEjI,CACA,gBAAAwM,CAAiBlQ,EAAS0D,GACtB,IAAIyM,EACA5U,KAAKwU,cAAcvI,IAAI9D,EAAM1D,KAC7BzE,KAAKwU,cAAc7T,OAAOwH,EAAM1D,GACE,QAAjCmQ,EAAK5U,KAAK+R,yBAA2C,IAAZ6C,GAAyBA,EAAG/I,MAAM,IAAM7L,KAAKkL,SAAS4J,mBAAmBrQ,EAAS0D,IAEpI,CACA,oBAAAsM,GACI,IAAK,MAAMtM,KAAQnI,KAAKwU,cAAczQ,KAClC,IAAK,MAAMU,KAAWzE,KAAKwU,cAAc5F,gBAAgBzG,GACrDnI,KAAK2U,iBAAiBlQ,EAAS0D,EAG3C,CACA,iBAAIqE,GACA,MAAO,QAAQxM,KAAK6J,QAAQrD,mBAChC,CACA,WAAI/B,GACA,OAAOzE,KAAK6J,QAAQpF,OACxB,CACA,SAAIsG,GACA,OAAO/K,KAAK6J,QAAQkB,KACxB,EAGJ,SAASgK,EAAiCnV,EAAaoV,GACnD,MAAMC,EAAYC,EAA2BtV,GAC7C,OAAO4B,MAAMC,KAAKwT,EAAUtS,OAAO,CAACD,EAAQ9C,KAoBhD,SAAiCA,EAAaoV,GAC1C,MAAMG,EAAavV,EAAYoV,GAC/B,OAAOxT,MAAM4T,QAAQD,GAAcA,EAAa,EACpD,CAtBQE,CAAwBzV,EAAaoV,GAAczS,QAAS4F,GAASzF,EAAOjC,IAAI0H,IACzEzF,GACR,IAAIxC,KACX,CACA,SAASoV,EAAiC1V,EAAaoV,GAEnD,OADkBE,EAA2BtV,GAC5B+C,OAAO,CAAC4S,EAAO3V,KAC5B2V,EAAMtR,QAgBd,SAAiCrE,EAAaoV,GAC1C,MAAMG,EAAavV,EAAYoV,GAC/B,OAAOG,EAAanU,OAAO+C,KAAKoR,GAAYtS,IAAKmB,GAAQ,CAACA,EAAKmR,EAAWnR,KAAS,EACvF,CAnBsBwR,CAAwB5V,EAAaoV,IAC5CO,GACR,GACP,CACA,SAASL,EAA2BtV,GAChC,MAAMqV,EAAY,GAClB,KAAOrV,GACHqV,EAAUhR,KAAKrE,GACfA,EAAcoB,OAAOyU,eAAe7V,GAExC,OAAOqV,EAAUS,SACrB,CAUA,MAAMC,EACF,WAAA/V,CAAYiK,EAASqB,GACjBlL,KAAKoC,SAAU,EACfpC,KAAK6J,QAAUA,EACf7J,KAAKkL,SAAWA,EAChBlL,KAAK4V,cAAgB,IAAIrH,EACzBvO,KAAK6V,qBAAuB,IAAItH,EAChCvO,KAAK8V,oBAAsB,IAAI3T,IAC/BnC,KAAK+V,qBAAuB,IAAI5T,GACpC,CACA,KAAAE,GACSrC,KAAKoC,UACNpC,KAAKgW,kBAAkBzT,QAAS0T,IAC5BjW,KAAKkW,+BAA+BD,GACpCjW,KAAKmW,gCAAgCF,KAEzCjW,KAAKoC,SAAU,EACfpC,KAAKoW,kBAAkB7T,QAASsH,GAAYA,EAAQ+B,WAE5D,CACA,OAAAA,GACI5L,KAAK8V,oBAAoBvT,QAAS8T,GAAaA,EAASzK,WACxD5L,KAAK+V,qBAAqBxT,QAAS8T,GAAaA,EAASzK,UAC7D,CACA,IAAAnJ,GACQzC,KAAKoC,UACLpC,KAAKoC,SAAU,EACfpC,KAAKsW,uBACLtW,KAAKuW,wBACLvW,KAAKwW,yBAEb,CACA,qBAAAD,GACQvW,KAAK8V,oBAAoBvU,KAAO,IAChCvB,KAAK8V,oBAAoBvT,QAAS8T,GAAaA,EAAS5T,QACxDzC,KAAK8V,oBAAoB5C,QAEjC,CACA,sBAAAsD,GACQxW,KAAK+V,qBAAqBxU,KAAO,IACjCvB,KAAK+V,qBAAqBxT,QAAS8T,GAAaA,EAAS5T,QACzDzC,KAAK+V,qBAAqB7C,QAElC,CACA,eAAA9D,CAAgB3K,EAASwK,GAAW,WAAEgH,IAClC,MAAMQ,EAASzW,KAAK0W,UAAUjS,EAASwR,GACnCQ,GACAzW,KAAK2W,cAAcF,EAAQhS,EAASwR,EAE5C,CACA,iBAAA3G,CAAkB7K,EAASwK,GAAW,WAAEgH,IACpC,MAAMQ,EAASzW,KAAK4W,iBAAiBnS,EAASwR,GAC1CQ,GACAzW,KAAK6W,iBAAiBJ,EAAQhS,EAASwR,EAE/C,CACA,oBAAA9G,CAAqB1K,GAAS,WAAEwR,IAC5B,MAAMnI,EAAW9N,KAAK8N,SAASmI,GACzBa,EAAY9W,KAAK8W,UAAUrS,EAASwR,GACpCc,EAAsBtS,EAAQqC,QAAQ,IAAI9G,KAAKoG,OAAO4Q,wBAAwBf,MACpF,QAAInI,IACOgJ,GAAaC,GAAuBtS,EAAQqC,QAAQgH,GAKnE,CACA,uBAAAG,CAAwBgJ,EAAUzK,GAC9B,MAAMyJ,EAAajW,KAAKkX,qCAAqC1K,GACzDyJ,GACAjW,KAAKmX,gCAAgClB,EAE7C,CACA,4BAAA9H,CAA6B8I,EAAUzK,GACnC,MAAMyJ,EAAajW,KAAKkX,qCAAqC1K,GACzDyJ,GACAjW,KAAKmX,gCAAgClB,EAE7C,CACA,yBAAA/H,CAA0B+I,EAAUzK,GAChC,MAAMyJ,EAAajW,KAAKkX,qCAAqC1K,GACzDyJ,GACAjW,KAAKmX,gCAAgClB,EAE7C,CACA,aAAAU,CAAcF,EAAQhS,EAASwR,GAC3B,IAAIrB,EACC5U,KAAK6V,qBAAqB5J,IAAIgK,EAAYxR,KAC3CzE,KAAK4V,cAAcnV,IAAIwV,EAAYQ,GACnCzW,KAAK6V,qBAAqBpV,IAAIwV,EAAYxR,GACU,QAAnDmQ,EAAK5U,KAAK8V,oBAAoBnS,IAAIsS,UAAqC,IAAZrB,GAAyBA,EAAG/I,MAAM,IAAM7L,KAAKkL,SAASkM,gBAAgBX,EAAQhS,EAASwR,IAE3J,CACA,gBAAAY,CAAiBJ,EAAQhS,EAASwR,GAC9B,IAAIrB,EACA5U,KAAK6V,qBAAqB5J,IAAIgK,EAAYxR,KAC1CzE,KAAK4V,cAAcjV,OAAOsV,EAAYQ,GACtCzW,KAAK6V,qBAAqBlV,OAAOsV,EAAYxR,GAEnB,QADzBmQ,EAAK5U,KAAK8V,oBACNnS,IAAIsS,UAAqC,IAAZrB,GAAyBA,EAAG/I,MAAM,IAAM7L,KAAKkL,SAASmM,mBAAmBZ,EAAQhS,EAASwR,IAEpI,CACA,oBAAAK,GACI,IAAK,MAAML,KAAcjW,KAAK6V,qBAAqB9R,KAC/C,IAAK,MAAMU,KAAWzE,KAAK6V,qBAAqBjH,gBAAgBqH,GAC5D,IAAK,MAAMQ,KAAUzW,KAAK4V,cAAchH,gBAAgBqH,GACpDjW,KAAK6W,iBAAiBJ,EAAQhS,EAASwR,EAIvD,CACA,+BAAAkB,CAAgClB,GAC5B,MAAMI,EAAWrW,KAAK8V,oBAAoBnS,IAAIsS,GAC1CI,IACAA,EAASvI,SAAW9N,KAAK8N,SAASmI,GAE1C,CACA,8BAAAC,CAA+BD,GAC3B,MAAMnI,EAAW9N,KAAK8N,SAASmI,GACzBqB,EAAmB,IAAItI,EAAiBjK,SAASwS,KAAMzJ,EAAU9N,KAAM,CAAEiW,eAC/EjW,KAAK8V,oBAAoBjS,IAAIoS,EAAYqB,GACzCA,EAAiBjV,OACrB,CACA,+BAAA8T,CAAgCF,GAC5B,MAAMzJ,EAAgBxM,KAAKwX,2BAA2BvB,GAChD1F,EAAoB,IAAI3C,EAAkB5N,KAAK+K,MAAMtG,QAAS+H,EAAexM,MACnFA,KAAK+V,qBAAqBlS,IAAIoS,EAAY1F,GAC1CA,EAAkBlO,OACtB,CACA,QAAAyL,CAASmI,GACL,OAAOjW,KAAK+K,MAAM0M,QAAQC,yBAAyBzB,EACvD,CACA,0BAAAuB,CAA2BvB,GACvB,OAAOjW,KAAK+K,MAAM3E,OAAOuR,wBAAwB3X,KAAKwG,WAAYyP,EACtE,CACA,oCAAAiB,CAAqC1K,GACjC,OAAOxM,KAAKgW,kBAAkB4B,KAAM3B,GAAejW,KAAKwX,2BAA2BvB,KAAgBzJ,EACvG,CACA,sBAAIqL,GACA,MAAMC,EAAe,IAAIvJ,EAMzB,OALAvO,KAAK+X,OAAOC,QAAQzV,QAAS0V,IAETlD,EADIkD,EAAO9C,WAAW+C,sBACwB,WACtD3V,QAASkU,GAAWqB,EAAarX,IAAIgW,EAAQwB,EAAOzR,eAEzDsR,CACX,CACA,qBAAI9B,GACA,OAAOhW,KAAK6X,mBAAmBhJ,gBAAgB7O,KAAKwG,WACxD,CACA,kCAAI2R,GACA,OAAOnY,KAAK6X,mBAAmBjJ,gBAAgB5O,KAAKwG,WACxD,CACA,qBAAI4P,GACA,MAAMgC,EAAcpY,KAAKmY,+BACzB,OAAOnY,KAAK+X,OAAOM,SAASxQ,OAAQgC,GAAYuO,EAAYnR,SAAS4C,EAAQrD,YACjF,CACA,SAAAsQ,CAAUrS,EAASwR,GACf,QAASjW,KAAK0W,UAAUjS,EAASwR,MAAiBjW,KAAK4W,iBAAiBnS,EAASwR,EACrF,CACA,SAAAS,CAAUjS,EAASwR,GACf,OAAOjW,KAAKiC,YAAYqW,qCAAqC7T,EAASwR,EAC1E,CACA,gBAAAW,CAAiBnS,EAASwR,GACtB,OAAOjW,KAAK4V,cAAchH,gBAAgBqH,GAAY2B,KAAMnB,GAAWA,EAAOhS,UAAYA,EAC9F,CACA,SAAIsG,GACA,OAAO/K,KAAK6J,QAAQkB,KACxB,CACA,UAAI3E,GACA,OAAOpG,KAAK6J,QAAQzD,MACxB,CACA,cAAII,GACA,OAAOxG,KAAK6J,QAAQrD,UACxB,CACA,eAAIvE,GACA,OAAOjC,KAAK6J,QAAQ5H,WACxB,CACA,UAAI8V,GACA,OAAO/X,KAAKiC,YAAY8V,MAC5B,EAGJ,MAAMQ,EACF,WAAA3Y,CAAYqY,EAAQlN,GAChB/K,KAAK0K,iBAAmB,CAAC8N,EAAcnV,EAAS,CAAC,KAC7C,MAAM,WAAEmD,EAAU,WAAE6D,EAAU,QAAE5F,GAAYzE,KAC5CqD,EAASrC,OAAOC,OAAO,CAAEuF,aAAY6D,aAAY5F,WAAWpB,GAC5DrD,KAAKiC,YAAYyI,iBAAiB1K,KAAKwG,WAAYgS,EAAcnV,IAErErD,KAAKiY,OAASA,EACdjY,KAAK+K,MAAQA,EACb/K,KAAKqK,WAAa,IAAI4N,EAAOC,sBAAsBlY,MACnDA,KAAKyY,gBAAkB,IAAI9F,EAAgB3S,KAAMA,KAAK0Y,YACtD1Y,KAAK2Y,cAAgB,IAAIxF,EAAcnT,KAAMA,KAAKqK,YAClDrK,KAAK4Y,eAAiB,IAAIrE,EAAevU,KAAMA,MAC/CA,KAAK6Y,eAAiB,IAAIlD,EAAe3V,KAAMA,MAC/C,IACIA,KAAKqK,WAAWyO,aAChB9Y,KAAK0K,iBAAiB,aAC1B,CACA,MAAOvH,GACHnD,KAAKkD,YAAYC,EAAO,0BAC5B,CACJ,CACA,OAAAhD,GACIH,KAAKyY,gBAAgBpW,QACrBrC,KAAK2Y,cAActW,QACnBrC,KAAK4Y,eAAevW,QACpBrC,KAAK6Y,eAAexW,QACpB,IACIrC,KAAKqK,WAAWlK,UAChBH,KAAK0K,iBAAiB,UAC1B,CACA,MAAOvH,GACHnD,KAAKkD,YAAYC,EAAO,wBAC5B,CACJ,CACA,OAAAyI,GACI5L,KAAK6Y,eAAejN,SACxB,CACA,UAAAvL,GACI,IACIL,KAAKqK,WAAWhK,aAChBL,KAAK0K,iBAAiB,aAC1B,CACA,MAAOvH,GACHnD,KAAKkD,YAAYC,EAAO,2BAC5B,CACAnD,KAAK6Y,eAAepW,OACpBzC,KAAK4Y,eAAenW,OACpBzC,KAAK2Y,cAAclW,OACnBzC,KAAKyY,gBAAgBhW,MACzB,CACA,eAAIR,GACA,OAAOjC,KAAKiY,OAAOhW,WACvB,CACA,cAAIuE,GACA,OAAOxG,KAAKiY,OAAOzR,UACvB,CACA,UAAIJ,GACA,OAAOpG,KAAKiC,YAAYmE,MAC5B,CACA,cAAIsS,GACA,OAAO1Y,KAAKiC,YAAYyW,UAC5B,CACA,WAAIjU,GACA,OAAOzE,KAAK+K,MAAMtG,OACtB,CACA,iBAAIsU,GACA,OAAO/Y,KAAKyE,QAAQsU,aACxB,CACA,WAAA7V,CAAYC,EAAOC,EAASC,EAAS,CAAC,GAClC,MAAM,WAAEmD,EAAU,WAAE6D,EAAU,QAAE5F,GAAYzE,KAC5CqD,EAASrC,OAAOC,OAAO,CAAEuF,aAAY6D,aAAY5F,WAAWpB,GAC5DrD,KAAKiC,YAAYiB,YAAYC,EAAO,SAASC,IAAWC,EAC5D,CACA,eAAAwR,CAAgBpQ,EAAS0D,GACrBnI,KAAKgZ,uBAAuB,GAAG7Q,mBAAuB1D,EAC1D,CACA,kBAAAqQ,CAAmBrQ,EAAS0D,GACxBnI,KAAKgZ,uBAAuB,GAAG7Q,sBAA0B1D,EAC7D,CACA,eAAA2S,CAAgBX,EAAQhS,EAAS0D,GAC7BnI,KAAKgZ,uBAAuB,GAAG3T,EAAkB8C,oBAAwBsO,EAAQhS,EACrF,CACA,kBAAA4S,CAAmBZ,EAAQhS,EAAS0D,GAChCnI,KAAKgZ,uBAAuB,GAAG3T,EAAkB8C,uBAA2BsO,EAAQhS,EACxF,CACA,sBAAAuU,CAAuBvS,KAAewS,GAClC,MAAM5O,EAAarK,KAAKqK,WACa,mBAA1BA,EAAW5D,IAClB4D,EAAW5D,MAAewS,EAElC,EAGJ,SAASC,EAAMtZ,GACX,OAEJ,SAAgBA,EAAauZ,GACzB,MAAMC,EAAoBC,EAAOzZ,GAC3B0Z,EAeV,SAA6BvT,EAAWoT,GACpC,OAAOI,EAAWJ,GAAYxW,OAAO,CAAC2W,EAAkBtV,KACpD,MAAMmC,EAOd,SAA+BJ,EAAWoT,EAAYnV,GAClD,MAAMwV,EAAsBxY,OAAOyY,yBAAyB1T,EAAW/B,GAEvE,IADwBwV,KAAuB,UAAWA,GACpC,CAClB,MAAMrT,EAAanF,OAAOyY,yBAAyBN,EAAYnV,GAAKI,MAKpE,OAJIoV,IACArT,EAAWxC,IAAM6V,EAAoB7V,KAAOwC,EAAWxC,IACvDwC,EAAWtC,IAAM2V,EAAoB3V,KAAOsC,EAAWtC,KAEpDsC,CACX,CACJ,CAlB2BuT,CAAsB3T,EAAWoT,EAAYnV,GAIhE,OAHImC,GACAnF,OAAOC,OAAOqY,EAAkB,CAAE,CAACtV,GAAMmC,IAEtCmT,GACR,CAAC,EACR,CAvB6BK,CAAoB/Z,EAAYmG,UAAWoT,GAEpE,OADAnY,OAAO4Y,iBAAiBR,EAAkBrT,UAAWuT,GAC9CF,CACX,CAPWS,CAAOja,EAQlB,SAA8BA,GAC1B,MAAMka,EAAY/E,EAAiCnV,EAAa,aAChE,OAAOka,EAAUnX,OAAO,CAACoX,EAAmBC,KACxC,MAAMb,EAAaa,EAASpa,GAC5B,IAAK,MAAMoE,KAAOmV,EAAY,CAC1B,MAAMhT,EAAa4T,EAAkB/V,IAAQ,CAAC,EAC9C+V,EAAkB/V,GAAOhD,OAAOC,OAAOkF,EAAYgT,EAAWnV,GAClE,CACA,OAAO+V,GACR,CAAC,EACR,CAlB+BE,CAAqBra,GACpD,CAuCA,MAAM2Z,EACyC,mBAAhCvY,OAAOkZ,sBACNtU,GAAW,IAAI5E,OAAOmZ,oBAAoBvU,MAAY5E,OAAOkZ,sBAAsBtU,IAGpF5E,OAAOmZ,oBAGhBd,EAAS,MACX,SAASe,EAAkBxa,GACvB,SAASya,IACL,OAAOC,QAAQC,UAAU3a,EAAa4a,qBAC1C,CAKA,OAJAH,EAAStU,UAAY/E,OAAOyZ,OAAO7a,EAAYmG,UAAW,CACtDnG,YAAa,CAAEwE,MAAOiW,KAE1BC,QAAQI,eAAeL,EAAUza,GAC1Bya,CACX,CASA,IAEI,OAVJ,WACI,MAGMM,EAAIP,EAHA,WACNpa,KAAK+I,EAAE5H,KAAKnB,KAChB,GAEA2a,EAAE5U,UAAUgD,EAAI,WAAc,EACvB,IAAI4R,CACf,CAEIC,GACOR,CACX,CACA,MAAOjX,GACH,OAAQvD,GAAgB,cAAuBA,GAEnD,CACH,EA3Bc,GAoCf,MAAMib,EACF,WAAAjb,CAAYqC,EAAakT,GACrBnV,KAAKiC,YAAcA,EACnBjC,KAAKmV,WAVb,SAAyBA,GACrB,MAAO,CACH3O,WAAY2O,EAAW3O,WACvB0R,sBAAuBgB,EAAM/D,EAAW+C,uBAEhD,CAK0B4C,CAAgB3F,GAClCnV,KAAK+a,gBAAkB,IAAI9I,QAC3BjS,KAAKgb,kBAAoB,IAAI9a,GACjC,CACA,cAAIsG,GACA,OAAOxG,KAAKmV,WAAW3O,UAC3B,CACA,yBAAI0R,GACA,OAAOlY,KAAKmV,WAAW+C,qBAC3B,CACA,YAAIG,GACA,OAAO7W,MAAMC,KAAKzB,KAAKgb,kBAC3B,CACA,sBAAAC,CAAuBlQ,GACnB,MAAMlB,EAAU7J,KAAKkb,qBAAqBnQ,GAC1C/K,KAAKgb,kBAAkBva,IAAIoJ,GAC3BA,EAAQ1J,SACZ,CACA,yBAAAgb,CAA0BpQ,GACtB,MAAMlB,EAAU7J,KAAK+a,gBAAgBpX,IAAIoH,GACrClB,IACA7J,KAAKgb,kBAAkBra,OAAOkJ,GAC9BA,EAAQxJ,aAEhB,CACA,oBAAA6a,CAAqBnQ,GACjB,IAAIlB,EAAU7J,KAAK+a,gBAAgBpX,IAAIoH,GAKvC,OAJKlB,IACDA,EAAU,IAAI0O,EAAQvY,KAAM+K,GAC5B/K,KAAK+a,gBAAgBlX,IAAIkH,EAAOlB,IAE7BA,CACX,EAGJ,MAAMuR,EACF,WAAAxb,CAAYmL,GACR/K,KAAK+K,MAAQA,CACjB,CACA,GAAAkB,CAAI9D,GACA,OAAOnI,KAAK8T,KAAK7H,IAAIjM,KAAKqb,WAAWlT,GACzC,CACA,GAAAxE,CAAIwE,GACA,OAAOnI,KAAKsb,OAAOnT,GAAM,EAC7B,CACA,MAAAmT,CAAOnT,GACH,MAAMyJ,EAAc5R,KAAK8T,KAAKnQ,IAAI3D,KAAKqb,WAAWlT,KAAU,GAC5D,OAAgByJ,EAr8CP5K,MAAM,YAAc,EAs8CjC,CACA,gBAAAuU,CAAiBpT,GACb,OAAOnI,KAAK8T,KAAK0H,uBAAuBxb,KAAKqb,WAAWlT,GAC5D,CACA,UAAAkT,CAAWlT,GACP,MAAO,GAAGA,SACd,CACA,QAAI2L,GACA,OAAO9T,KAAK+K,MAAM+I,IACtB,EAGJ,MAAM2H,EACF,WAAA7b,CAAYmL,GACR/K,KAAK+K,MAAQA,CACjB,CACA,WAAItG,GACA,OAAOzE,KAAK+K,MAAMtG,OACtB,CACA,cAAI+B,GACA,OAAOxG,KAAK+K,MAAMvE,UACtB,CACA,GAAA7C,CAAIK,GACA,MAAMmE,EAAOnI,KAAKwb,uBAAuBxX,GACzC,OAAOhE,KAAKyE,QAAQ4E,aAAalB,EACrC,CACA,GAAAtE,CAAIG,EAAKI,GACL,MAAM+D,EAAOnI,KAAKwb,uBAAuBxX,GAEzC,OADAhE,KAAKyE,QAAQiX,aAAavT,EAAM/D,GACzBpE,KAAK2D,IAAIK,EACpB,CACA,GAAAiI,CAAIjI,GACA,MAAMmE,EAAOnI,KAAKwb,uBAAuBxX,GACzC,OAAOhE,KAAKyE,QAAQsJ,aAAa5F,EACrC,CACA,OAAOnE,GACH,GAAIhE,KAAKiM,IAAIjI,GAAM,CACf,MAAMmE,EAAOnI,KAAKwb,uBAAuBxX,GAEzC,OADAhE,KAAKyE,QAAQkX,gBAAgBxT,IACtB,CACX,CAEI,OAAO,CAEf,CACA,sBAAAqT,CAAuBxX,GACnB,MAAO,QAAQhE,KAAKwG,cAAcf,EAAUzB,IAChD,EAGJ,MAAM4X,EACF,WAAAhc,CAAYic,GACR7b,KAAK8b,mBAAqB,IAAI7J,QAC9BjS,KAAK6b,OAASA,CAClB,CACA,IAAAE,CAAKnW,EAAQ5B,EAAKZ,GACd,IAAI4Y,EAAahc,KAAK8b,mBAAmBnY,IAAIiC,GACxCoW,IACDA,EAAa,IAAI9b,IACjBF,KAAK8b,mBAAmBjY,IAAI+B,EAAQoW,IAEnCA,EAAW/P,IAAIjI,KAChBgY,EAAWvb,IAAIuD,GACfhE,KAAK6b,OAAOE,KAAK3Y,EAASwC,GAElC,EAGJ,SAASqW,EAA4BzP,EAAe5F,GAChD,MAAO,IAAI4F,OAAmB5F,KAClC,CAEA,MAAMsV,EACF,WAAAtc,CAAYmL,GACR/K,KAAK+K,MAAQA,CACjB,CACA,WAAItG,GACA,OAAOzE,KAAK+K,MAAMtG,OACtB,CACA,cAAI+B,GACA,OAAOxG,KAAK+K,MAAMvE,UACtB,CACA,UAAIJ,GACA,OAAOpG,KAAK+K,MAAM3E,MACtB,CACA,GAAA6F,CAAIkQ,GACA,OAAgC,MAAzBnc,KAAK4X,KAAKuE,EACrB,CACA,IAAAvE,IAAQwE,GACJ,OAAOA,EAAYzZ,OAAO,CAAC+B,EAAQyX,IAAezX,GAAU1E,KAAKqc,WAAWF,IAAenc,KAAKsc,iBAAiBH,QAAatI,EAClI,CACA,OAAA0I,IAAWH,GACP,OAAOA,EAAYzZ,OAAO,CAAC6Z,EAASL,IAAe,IAC5CK,KACAxc,KAAKyc,eAAeN,MACpBnc,KAAK0c,qBAAqBP,IAC9B,GACP,CACA,UAAAE,CAAWF,GACP,MAAMrO,EAAW9N,KAAK2c,yBAAyBR,GAC/C,OAAOnc,KAAK+K,MAAM6R,YAAY9O,EAClC,CACA,cAAA2O,CAAeN,GACX,MAAMrO,EAAW9N,KAAK2c,yBAAyBR,GAC/C,OAAOnc,KAAK+K,MAAM8R,gBAAgB/O,EACtC,CACA,wBAAA6O,CAAyBR,GAErB,OAAOF,EADejc,KAAKoG,OAAO0W,wBAAwB9c,KAAKwG,YACb2V,EACtD,CACA,gBAAAG,CAAiBH,GACb,MAAMrO,EAAW9N,KAAK+c,+BAA+BZ,GACrD,OAAOnc,KAAKgd,UAAUhd,KAAK+K,MAAM6R,YAAY9O,GAAWqO,EAC5D,CACA,oBAAAO,CAAqBP,GACjB,MAAMrO,EAAW9N,KAAK+c,+BAA+BZ,GACrD,OAAOnc,KAAK+K,MAAM8R,gBAAgB/O,GAAUjL,IAAK4B,GAAYzE,KAAKgd,UAAUvY,EAAS0X,GACzF,CACA,8BAAAY,CAA+BZ,GAC3B,MAAMc,EAAmB,GAAGjd,KAAKwG,cAAc2V,IAC/C,OAAOF,EAA4Bjc,KAAKoG,OAAO8W,gBAAiBD,EACpE,CACA,SAAAD,CAAUvY,EAAS0X,GACf,GAAI1X,EAAS,CACT,MAAM,WAAE+B,GAAexG,KACjBwM,EAAgBxM,KAAKoG,OAAO8W,gBAC5BC,EAAuBnd,KAAKoG,OAAO0W,wBAAwBtW,GACjExG,KAAKod,MAAMrB,KAAKtX,EAAS,UAAU0X,IAAc,kBAAkB3P,MAAkBhG,KAAc2V,WAAoBgB,MAAyBhB,WACrI3P,iFACf,CACA,OAAO/H,CACX,CACA,SAAI2Y,GACA,OAAOpd,KAAK+K,MAAMqS,KACtB,EAGJ,MAAMC,EACF,WAAAzd,CAAYmL,EAAOuS,GACftd,KAAK+K,MAAQA,EACb/K,KAAKsd,kBAAoBA,CAC7B,CACA,WAAI7Y,GACA,OAAOzE,KAAK+K,MAAMtG,OACtB,CACA,cAAI+B,GACA,OAAOxG,KAAK+K,MAAMvE,UACtB,CACA,UAAIJ,GACA,OAAOpG,KAAK+K,MAAM3E,MACtB,CACA,GAAA6F,CAAIgK,GACA,OAAgC,MAAzBjW,KAAK4X,KAAK3B,EACrB,CACA,IAAA2B,IAAQ2F,GACJ,OAAOA,EAAY5a,OAAO,CAAC8T,EAAQR,IAAeQ,GAAUzW,KAAKwd,WAAWvH,QAAapC,EAC7F,CACA,OAAA0I,IAAWgB,GACP,OAAOA,EAAY5a,OAAO,CAAC8U,EAASxB,IAAe,IAAIwB,KAAYzX,KAAKyd,eAAexH,IAAc,GACzG,CACA,wBAAAyB,CAAyBzB,GACrB,MAAMzJ,EAAgBxM,KAAKoG,OAAOuR,wBAAwB3X,KAAKwG,WAAYyP,GAC3E,OAAOjW,KAAKsd,kBAAkBjU,aAAamD,EAC/C,CACA,UAAAgR,CAAWvH,GACP,MAAMnI,EAAW9N,KAAK0X,yBAAyBzB,GAC/C,GAAInI,EACA,OAAO9N,KAAK4c,YAAY9O,EAAUmI,EAC1C,CACA,cAAAwH,CAAexH,GACX,MAAMnI,EAAW9N,KAAK0X,yBAAyBzB,GAC/C,OAAOnI,EAAW9N,KAAK6c,gBAAgB/O,EAAUmI,GAAc,EACnE,CACA,WAAA2G,CAAY9O,EAAUmI,GAElB,OADiBjW,KAAK+K,MAAM2S,cAAc5P,GAC1BjG,OAAQpD,GAAYzE,KAAK2d,eAAelZ,EAASqJ,EAAUmI,IAAa,EAC5F,CACA,eAAA4G,CAAgB/O,EAAUmI,GAEtB,OADiBjW,KAAK+K,MAAM2S,cAAc5P,GAC1BjG,OAAQpD,GAAYzE,KAAK2d,eAAelZ,EAASqJ,EAAUmI,GAC/E,CACA,cAAA0H,CAAelZ,EAASqJ,EAAUmI,GAC9B,MAAMe,EAAsBvS,EAAQ4E,aAAarJ,KAAK+K,MAAM3E,OAAO4Q,sBAAwB,GAC3F,OAAOvS,EAAQqC,QAAQgH,IAAakJ,EAAoB9P,MAAM,KAAKD,SAASgP,EAChF,EAGJ,MAAM2H,EACF,WAAAhe,CAAYwG,EAAQ3B,EAAS+B,EAAYqV,GACrC7b,KAAKwc,QAAU,IAAIN,EAAUlc,MAC7BA,KAAK6d,QAAU,IAAIzC,EAASpb,MAC5BA,KAAK8T,KAAO,IAAI2H,EAAQzb,MACxBA,KAAKgL,gBAAmBvG,GACbA,EAAQqZ,QAAQ9d,KAAK+d,sBAAwB/d,KAAKyE,QAE7DzE,KAAKoG,OAASA,EACdpG,KAAKyE,QAAUA,EACfzE,KAAKwG,WAAaA,EAClBxG,KAAKod,MAAQ,IAAIxB,EAAMC,GACvB7b,KAAKyX,QAAU,IAAI4F,EAAUrd,KAAKge,cAAevZ,EACrD,CACA,WAAAmY,CAAY9O,GACR,OAAO9N,KAAKyE,QAAQqC,QAAQgH,GAAY9N,KAAKyE,QAAUzE,KAAK0d,cAAc5P,GAAU8J,KAAK5X,KAAKgL,gBAClG,CACA,eAAA6R,CAAgB/O,GACZ,MAAO,IACC9N,KAAKyE,QAAQqC,QAAQgH,GAAY,CAAC9N,KAAKyE,SAAW,MACnDzE,KAAK0d,cAAc5P,GAAUjG,OAAO7H,KAAKgL,iBAEpD,CACA,aAAA0S,CAAc5P,GACV,OAAOtM,MAAMC,KAAKzB,KAAKyE,QAAQuJ,iBAAiBF,GACpD,CACA,sBAAIiQ,GACA,OAAO9B,EAA4Bjc,KAAKoG,OAAO4Q,oBAAqBhX,KAAKwG,WAC7E,CACA,mBAAIyX,GACA,OAAOje,KAAKyE,UAAYM,SAASmZ,eACrC,CACA,iBAAIF,GACA,OAAOhe,KAAKie,gBACNje,KACA,IAAI4d,EAAM5d,KAAKoG,OAAQrB,SAASmZ,gBAAiBle,KAAKwG,WAAYxG,KAAKod,MAAMvB,OACvF,EAGJ,MAAMsC,EACF,WAAAve,CAAY6E,EAAS2B,EAAQ8E,GACzBlL,KAAKyE,QAAUA,EACfzE,KAAKoG,OAASA,EACdpG,KAAKkL,SAAWA,EAChBlL,KAAK6S,kBAAoB,IAAIf,EAAkB9R,KAAKyE,QAASzE,KAAKgX,oBAAqBhX,MACvFA,KAAKoe,4BAA8B,IAAInM,QACvCjS,KAAKqe,qBAAuB,IAAIpM,OACpC,CACA,KAAA5P,GACIrC,KAAK6S,kBAAkBxQ,OAC3B,CACA,IAAAI,GACIzC,KAAK6S,kBAAkBpQ,MAC3B,CACA,uBAAIuU,GACA,OAAOhX,KAAKoG,OAAO4Q,mBACvB,CACA,kBAAAtE,CAAmB9L,GACf,MAAM,QAAEnC,EAAS6C,QAASd,GAAeI,EACzC,OAAO5G,KAAKse,kCAAkC7Z,EAAS+B,EAC3D,CACA,iCAAA8X,CAAkC7Z,EAAS+B,GACvC,MAAM+X,EAAqBve,KAAKwe,kCAAkC/Z,GAClE,IAAIsG,EAAQwT,EAAmB5a,IAAI6C,GAKnC,OAJKuE,IACDA,EAAQ/K,KAAKkL,SAASuT,mCAAmCha,EAAS+B,GAClE+X,EAAmB1a,IAAI2C,EAAYuE,IAEhCA,CACX,CACA,mBAAAsH,CAAoB5N,EAASL,GACzB,MAAMsa,GAAkB1e,KAAKqe,qBAAqB1a,IAAIS,IAAU,GAAK,EACrEpE,KAAKqe,qBAAqBxa,IAAIO,EAAOsa,GACf,GAAlBA,GACA1e,KAAKkL,SAASyT,eAAeva,EAErC,CACA,qBAAAkO,CAAsB7N,EAASL,GAC3B,MAAMsa,EAAiB1e,KAAKqe,qBAAqB1a,IAAIS,GACjDsa,IACA1e,KAAKqe,qBAAqBxa,IAAIO,EAAOsa,EAAiB,GAChC,GAAlBA,GACA1e,KAAKkL,SAAS0T,kBAAkBxa,GAG5C,CACA,iCAAAoa,CAAkC/Z,GAC9B,IAAI8Z,EAAqBve,KAAKoe,4BAA4Bza,IAAIc,GAK9D,OAJK8Z,IACDA,EAAqB,IAAIpc,IACzBnC,KAAKoe,4BAA4Bva,IAAIY,EAAS8Z,IAE3CA,CACX,EAGJ,MAAMM,EACF,WAAAjf,CAAYqC,GACRjC,KAAKiC,YAAcA,EACnBjC,KAAK8e,cAAgB,IAAIX,EAAcne,KAAKyE,QAASzE,KAAKoG,OAAQpG,MAClEA,KAAKue,mBAAqB,IAAIhQ,EAC9BvO,KAAK+e,oBAAsB,IAAI5c,GACnC,CACA,WAAIsC,GACA,OAAOzE,KAAKiC,YAAYwC,OAC5B,CACA,UAAI2B,GACA,OAAOpG,KAAKiC,YAAYmE,MAC5B,CACA,UAAIyV,GACA,OAAO7b,KAAKiC,YAAY4Z,MAC5B,CACA,uBAAI7E,GACA,OAAOhX,KAAKoG,OAAO4Q,mBACvB,CACA,WAAIgB,GACA,OAAOxW,MAAMC,KAAKzB,KAAK+e,oBAAoBrc,SAC/C,CACA,YAAI2V,GACA,OAAOrY,KAAKgY,QAAQrV,OAAO,CAAC0V,EAAUJ,IAAWI,EAASvV,OAAOmV,EAAOI,UAAW,GACvF,CACA,KAAAhW,GACIrC,KAAK8e,cAAczc,OACvB,CACA,IAAAI,GACIzC,KAAK8e,cAAcrc,MACvB,CACA,cAAAuc,CAAe7J,GACXnV,KAAKif,iBAAiB9J,EAAW3O,YACjC,MAAMyR,EAAS,IAAI4C,EAAO7a,KAAKiC,YAAakT,GAC5CnV,KAAKkf,cAAcjH,GACnB,MAAMkH,EAAYhK,EAAW+C,sBAAsBiH,UAC/CA,GACAA,EAAUhe,KAAKgU,EAAW+C,sBAAuB/C,EAAW3O,WAAYxG,KAAKiC,YAErF,CACA,gBAAAgd,CAAiBzY,GACb,MAAMyR,EAASjY,KAAK+e,oBAAoBpb,IAAI6C,GACxCyR,GACAjY,KAAKof,iBAAiBnH,EAE9B,CACA,iCAAAoH,CAAkC5a,EAAS+B,GACvC,MAAMyR,EAASjY,KAAK+e,oBAAoBpb,IAAI6C,GAC5C,GAAIyR,EACA,OAAOA,EAAOI,SAAST,KAAM/N,GAAYA,EAAQpF,SAAWA,EAEpE,CACA,4CAAA6a,CAA6C7a,EAAS+B,GAClD,MAAMuE,EAAQ/K,KAAK8e,cAAcR,kCAAkC7Z,EAAS+B,GACxEuE,EACA/K,KAAK8e,cAAczM,oBAAoBtH,EAAMtG,QAASsG,GAGtDwU,QAAQpc,MAAM,kDAAkDqD,kBAA4B/B,EAEpG,CACA,WAAAvB,CAAYC,EAAOC,EAASC,GACxBrD,KAAKiC,YAAYiB,YAAYC,EAAOC,EAASC,EACjD,CACA,kCAAAob,CAAmCha,EAAS+B,GACxC,OAAO,IAAIoX,EAAM5d,KAAKoG,OAAQ3B,EAAS+B,EAAYxG,KAAK6b,OAC5D,CACA,cAAA8C,CAAe5T,GACX/K,KAAKue,mBAAmB9d,IAAIsK,EAAMvE,WAAYuE,GAC9C,MAAMkN,EAASjY,KAAK+e,oBAAoBpb,IAAIoH,EAAMvE,YAC9CyR,GACAA,EAAOgD,uBAAuBlQ,EAEtC,CACA,iBAAA6T,CAAkB7T,GACd/K,KAAKue,mBAAmB5d,OAAOoK,EAAMvE,WAAYuE,GACjD,MAAMkN,EAASjY,KAAK+e,oBAAoBpb,IAAIoH,EAAMvE,YAC9CyR,GACAA,EAAOkD,0BAA0BpQ,EAEzC,CACA,aAAAmU,CAAcjH,GACVjY,KAAK+e,oBAAoBlb,IAAIoU,EAAOzR,WAAYyR,GACjCjY,KAAKue,mBAAmB3P,gBAAgBqJ,EAAOzR,YACvDjE,QAASwI,GAAUkN,EAAOgD,uBAAuBlQ,GAC5D,CACA,gBAAAqU,CAAiBnH,GACbjY,KAAK+e,oBAAoBpe,OAAOsX,EAAOzR,YACxBxG,KAAKue,mBAAmB3P,gBAAgBqJ,EAAOzR,YACvDjE,QAASwI,GAAUkN,EAAOkD,0BAA0BpQ,GAC/D,EAGJ,MAAMyU,EAAgB,CAClBxI,oBAAqB,kBACrBlE,gBAAiB,cACjBoK,gBAAiB,cACjBJ,wBAA0BtW,GAAe,QAAQA,WACjDmR,wBAAyB,CAACnR,EAAYiQ,IAAW,QAAQjQ,KAAciQ,WACvE3O,YAAa9G,OAAOC,OAAOD,OAAOC,OAAO,CAAEwe,MAAO,QAASC,IAAK,MAAOC,IAAK,SAAUC,MAAO,IAAKC,GAAI,UAAWC,KAAM,YAAane,KAAM,YAAaC,MAAO,aAAcme,KAAM,OAAQC,IAAK,MAAOC,QAAS,SAAUC,UAAW,YAAcC,EAAkB,6BAA6BjZ,MAAM,IAAIrE,IAAKud,GAAM,CAACA,EAAGA,MAAOD,EAAkB,aAAajZ,MAAM,IAAIrE,IAAKwd,GAAM,CAACA,EAAGA,OAE7X,SAASF,EAAkBG,GACvB,OAAOA,EAAM3d,OAAO,CAAC4d,GAAOC,EAAGC,KAAQzf,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAGsf,GAAO,CAAE,CAACC,GAAIC,IAAO,CAAC,EACjG,CA0HA,SAASC,EAAoBrW,EAAY5F,EAAS+B,GAC9C,OAAO6D,EAAWpI,YAAYqW,qCAAqC7T,EAAS+B,EAChF,CACA,SAASma,EAAqCtW,EAAY5F,EAASwR,GAC/D,IAAI2K,EAAmBF,EAAoBrW,EAAY5F,EAASwR,GAChE,OAAI2K,IAEJvW,EAAWpI,YAAY8V,OAAOuH,6CAA6C7a,EAASwR,GACpF2K,EAAmBF,EAAoBrW,EAAY5F,EAASwR,GACxD2K,QAAJ,EAEJ,CAyIA,SAASC,GAA0Bja,EAAOka,GAAiBzW,GACvD,OAmFJ,SAAkD0W,GAC9C,MAAM,MAAEna,EAAK,eAAEka,GAAmBC,EAC5B/c,EAAM,GAAGyB,EAAUmB,WACnB0F,EAhCV,SAAkCyU,GAC9B,MAAM,WAAE1W,EAAU,MAAEzD,EAAK,eAAEka,GAAmBC,EACxCC,EAAa,CAAE3W,aAAYzD,QAAOoa,WAAYF,GAC9CG,EAvBV,SAA8BF,GAC1B,MAAM,WAAE1W,EAAU,MAAEzD,EAAK,WAAEoa,GAAeD,EACpCG,EAAUvb,EAAYqb,EAAW1U,MACjC6U,EAAaxb,EAAYqb,EAAWI,SACpCC,EAAaH,GAAWC,EACxBG,EAAWJ,IAAYC,EACvBI,GAAeL,GAAWC,EAC1BF,EAAiBO,EAAuBR,EAAW1U,MACnDmV,EAAuBC,GAAsBX,EAAQC,WAAWI,SACtE,GAAIE,EACA,OAAOL,EACX,GAAIM,EACA,OAAOE,EACX,GAAIR,IAAmBQ,EAAsB,CAEzC,MAAM,IAAIjY,MAAM,uDADKa,EAAa,GAAGA,KAAczD,IAAUA,mCACwDqa,sCAAmDD,EAAWI,wBAAwBK,MAC/M,CACA,GAAIJ,EACA,OAAOJ,CACf,CAI2BU,CAAqBX,GACtCS,EAAuBC,GAAsBZ,GAC7Cc,EAAmBJ,EAAuBV,GAC1CxU,EAAO2U,GAAkBQ,GAAwBG,EACvD,GAAItV,EACA,OAAOA,EACX,MAAMuV,EAAexX,EAAa,GAAGA,KAAcyW,IAAmBla,EACtE,MAAM,IAAI4C,MAAM,uBAAuBqY,WAAsBjb,WACjE,CAqBiBkb,CAAyBf,GACtC,MAAO,CACHzU,OACAtI,MACAmE,KAAMnD,EAAShB,GACf,gBAAI0P,GACA,OA1BZ,SAAmCoN,GAC/B,MAAMiB,EAAWP,EAAuBV,GACxC,GAAIiB,EACA,OAAOC,GAAoBD,GAC/B,MAAMZ,EAAatb,EAAYib,EAAgB,WACzCI,EAAUrb,EAAYib,EAAgB,QACtCE,EAAaF,EACnB,GAAIK,EACA,OAAOH,EAAWI,QACtB,GAAIF,EAAS,CACT,MAAM,KAAE5U,GAAS0U,EACXiB,EAAmBT,EAAuBlV,GAChD,GAAI2V,EACA,OAAOD,GAAoBC,EACnC,CACA,OAAOnB,CACX,CAUmBoB,CAA0BpB,EACrC,EACA,yBAAIqB,GACA,YAAiDtO,IAA1C6N,GAAsBZ,EACjC,EACA3M,OAAQiO,GAAQ9V,GAChBmH,OAAQ4O,GAAQ/V,IAAS+V,GAAQjB,QAEzC,CApGWkB,CAAyC,CAC5CjY,aACAzD,QACAka,kBAER,CACA,SAASU,EAAuBO,GAC5B,OAAQA,GACJ,KAAKvgB,MACD,MAAO,QACX,KAAK+gB,QACD,MAAO,UACX,KAAKC,OACD,MAAO,SACX,KAAKxhB,OACD,MAAO,SACX,KAAKyhB,OACD,MAAO,SAEnB,CACA,SAASf,GAAsBhO,GAC3B,cAAeA,GACX,IAAK,UACD,MAAO,UACX,IAAK,SACD,MAAO,SACX,IAAK,SACD,MAAO,SAEf,OAAIlS,MAAM4T,QAAQ1B,GACP,QAC0C,oBAAjD1S,OAAO+E,UAAUwB,SAASpG,KAAKuS,GACxB,cADX,CAEJ,CAoEA,MAAMsO,GAAsB,CACxB,SAAI1B,GACA,MAAO,EACX,EACAoC,SAAS,EACTC,OAAQ,EACR,UAAI/c,GACA,MAAO,CAAC,CACZ,EACAgd,OAAQ,IAENR,GAAU,CACZ,KAAA9B,CAAMlc,GACF,MAAMkc,EAAQ7W,KAAKC,MAAMtF,GACzB,IAAK5C,MAAM4T,QAAQkL,GACf,MAAM,IAAIlM,UAAU,yDAAyDhQ,eAAmBsd,GAAsBpB,OAE1H,OAAOA,CACX,EACA,OAAAoC,CAAQte,GACJ,QAAkB,KAATA,GAA+C,SAA/Bqe,OAAOre,GAAOsB,cAC3C,EACA,MAAAid,CAAOve,GACH,OAAOoe,OAAOpe,EAAMa,QAAQ,KAAM,IACtC,EACA,MAAAW,CAAOxB,GACH,MAAMwB,EAAS6D,KAAKC,MAAMtF,GAC1B,GAAe,OAAXwB,GAAoC,iBAAVA,GAAsBpE,MAAM4T,QAAQxP,GAC9D,MAAM,IAAIwO,UAAU,0DAA0DhQ,eAAmBsd,GAAsB9b,OAE3H,OAAOA,CACX,EACA,MAAAgd,CAAOxe,GACH,OAAOA,CACX,GAEEie,GAAU,CACZjB,QAOJ,SAAqBhd,GACjB,MAAO,GAAGA,GACd,EARIkc,MAAOuC,GACPjd,OAAQid,IAEZ,SAASA,GAAUze,GACf,OAAOqF,KAAKqZ,UAAU1e,EAC1B,CAKA,MAAM2e,GACF,WAAAnjB,CAAYiK,GACR7J,KAAK6J,QAAUA,CACnB,CACA,qBAAWmZ,GACP,OAAO,CACX,CACA,gBAAO7D,CAAU8D,EAAaC,GAE9B,CACA,eAAIjhB,GACA,OAAOjC,KAAK6J,QAAQ5H,WACxB,CACA,SAAI8I,GACA,OAAO/K,KAAK6J,QAAQkB,KACxB,CACA,WAAItG,GACA,OAAOzE,KAAK+K,MAAMtG,OACtB,CACA,cAAI+B,GACA,OAAOxG,KAAK+K,MAAMvE,UACtB,CACA,WAAIgW,GACA,OAAOxc,KAAK+K,MAAMyR,OACtB,CACA,WAAI/E,GACA,OAAOzX,KAAK+K,MAAM0M,OACtB,CACA,WAAIoG,GACA,OAAO7d,KAAK+K,MAAM8S,OACtB,CACA,QAAI/J,GACA,OAAO9T,KAAK+K,MAAM+I,IACtB,CACA,UAAAgF,GACA,CACA,OAAA3Y,GACA,CACA,UAAAE,GACA,CACA,QAAA8iB,CAASrjB,GAAW,OAAE4E,EAAS1E,KAAKyE,QAAO,OAAEpB,EAAS,CAAC,EAAC,OAAE+f,EAASpjB,KAAKwG,WAAU,QAAE6c,GAAU,EAAI,WAAEC,GAAa,GAAU,CAAC,GACxH,MACMziB,EAAQ,IAAI0iB,YADLH,EAAS,GAAGA,KAAUtjB,IAAcA,EACb,CAAEuD,SAAQggB,UAASC,eAEvD,OADA5e,EAAO8e,cAAc3iB,GACdA,CACX,ECz+EJ,SAAS4iB,GAAUC,EAAQ5X,GACvB4X,EAAOxc,MAAM,OAAO3E,QAAS1B,IACzBiL,EAASjL,IAEjB,CDu+EAkiB,GAAWjJ,UAAY,CAhYvB,SAAiCla,GAE7B,OADgBmV,EAAiCnV,EAAa,WAC/C+C,OAAO,CAACwW,EAAYwK,KAC/B,OAAO3iB,OAAOC,OAAOkY,GAGSnV,EAHgC2f,EAI3D,CACH,CAAC,GAAG3f,UAAa,CACb,GAAAL,GACI,MAAM,QAAEka,GAAY7d,KACpB,GAAI6d,EAAQ5R,IAAIjI,GACZ,OAAO6Z,EAAQla,IAAIK,GAElB,CACD,MAAMqM,EAAYwN,EAAQtC,iBAAiBvX,GAC3C,MAAM,IAAIwF,MAAM,sBAAsB6G,KAC1C,CACJ,GAEJ,CAAC,GAAGrM,YAAe,CACf,GAAAL,GACI,OAAO3D,KAAK6d,QAAQvC,OAAOtX,EAC/B,GAEJ,CAAC,MAAMsB,EAAWtB,WAAc,CAC5B,GAAAL,GACI,OAAO3D,KAAK6d,QAAQ5R,IAAIjI,EAC5B,MAtBZ,IAAsCA,GAF/B,CAAC,EACR,EAuGA,SAAkCpE,GAE9B,OADgBmV,EAAiCnV,EAAa,WAC/C+C,OAAO,CAACwW,EAAYyK,KAC/B,OAAO5iB,OAAOC,OAAOkY,GAGUhR,EAHgCyb,EAI5D,CACH,CAAC,GAAGzb,WAAe,CACf,GAAAxE,GACI,MAAMe,EAAS1E,KAAKwc,QAAQ5E,KAAKzP,GACjC,GAAIzD,EACA,OAAOA,EAGP,MAAM,IAAI8E,MAAM,2BAA2BrB,WAAcnI,KAAKwG,yBAEtE,GAEJ,CAAC,GAAG2B,YAAgB,CAChB,GAAAxE,GACI,OAAO3D,KAAKwc,QAAQD,QAAQpU,EAChC,GAEJ,CAAC,MAAM7C,EAAW6C,YAAgB,CAC9B,GAAAxE,GACI,OAAO3D,KAAKwc,QAAQvQ,IAAI9D,EAC5B,MArBZ,IAAuCA,GAFhC,CAAC,EACR,EA2BA,SAAiCvI,GAC7B,MAAMikB,EAAuBvO,EAAiC1V,EAAa,UACrEkkB,EAAwB,CAC1BxQ,mBAAoB,CAChB,GAAA3P,GACI,OAAOkgB,EAAqBlhB,OAAO,CAACohB,EAAQC,KACxC,MAAMC,EAAkBpD,EAAyBmD,EAAqBhkB,KAAKwG,YACrEgG,EAAgBxM,KAAK8T,KAAK0H,uBAAuByI,EAAgBjgB,KACvE,OAAOhD,OAAOC,OAAO8iB,EAAQ,CAAE,CAACvX,GAAgByX,KACjD,CAAC,EACR,IAGR,OAAOJ,EAAqBlhB,OAAO,CAACwW,EAAY6K,IACrChjB,OAAOC,OAAOkY,EAG7B,SAA0C6K,EAAqB3Z,GAC3D,MAAM8K,EAAa0L,EAAyBmD,EAAqB3Z,IAC3D,IAAErG,EAAG,KAAEmE,EAAMgM,OAAQ+P,EAAMzQ,OAAQ0Q,GAAUhP,EACnD,MAAO,CACH,CAAChN,GAAO,CACJ,GAAAxE,GACI,MAAMS,EAAQpE,KAAK8T,KAAKnQ,IAAIK,GAC5B,OAAc,OAAVI,EACO8f,EAAK9f,GAGL+Q,EAAWzB,YAE1B,EACA,GAAA7P,CAAIO,QACcyP,IAAVzP,EACApE,KAAK8T,KAAKnT,OAAOqD,GAGjBhE,KAAK8T,KAAKjQ,IAAIG,EAAKmgB,EAAM/f,GAEjC,GAEJ,CAAC,MAAMkB,EAAW6C,MAAU,CACxB,GAAAxE,GACI,OAAO3D,KAAK8T,KAAK7H,IAAIjI,IAAQmR,EAAWgN,qBAC5C,GAGZ,CAhCyCiC,CAAiCJ,IACnEF,EACP,EA3HA,SAAkClkB,GAE9B,OADgBmV,EAAiCnV,EAAa,WAC/C+C,OAAO,CAACwW,EAAYkL,IACxBrjB,OAAOC,OAAOkY,EAe7B,SAAuChR,GACnC,MAAMmc,EAAgBjf,EAAkB8C,GACxC,MAAO,CACH,CAAC,GAAGmc,WAAwB,CACxB,GAAA3gB,GACI,MAAM4gB,EAAgBvkB,KAAKyX,QAAQG,KAAKzP,GAClC2F,EAAW9N,KAAKyX,QAAQC,yBAAyBvP,GACvD,GAAIoc,EAAe,CACf,MAAM3D,EAAmBD,EAAqC3gB,KAAMukB,EAAepc,GACnF,GAAIyY,EACA,OAAOA,EACX,MAAM,IAAIpX,MAAM,gEAAgErB,oCAAuCnI,KAAKwG,cAChI,CACA,MAAM,IAAIgD,MAAM,2BAA2BrB,2BAA8BnI,KAAKwG,iFAAiFsH,MACnK,GAEJ,CAAC,GAAGwW,YAAyB,CACzB,GAAA3gB,GACI,MAAM8T,EAAUzX,KAAKyX,QAAQ8E,QAAQpU,GACrC,OAAIsP,EAAQpG,OAAS,EACVoG,EACF5U,IAAK0hB,IACN,MAAM3D,EAAmBD,EAAqC3gB,KAAMukB,EAAepc,GACnF,GAAIyY,EACA,OAAOA,EACXrB,QAAQxD,KAAK,gEAAgE5T,oCAAuCnI,KAAKwG,cAAe+d,KAEvI1c,OAAQwC,GAAeA,GAEzB,EACX,GAEJ,CAAC,GAAGia,kBAA+B,CAC/B,GAAA3gB,GACI,MAAM4gB,EAAgBvkB,KAAKyX,QAAQG,KAAKzP,GAClC2F,EAAW9N,KAAKyX,QAAQC,yBAAyBvP,GACvD,GAAIoc,EACA,OAAOA,EAGP,MAAM,IAAI/a,MAAM,2BAA2BrB,2BAA8BnI,KAAKwG,iFAAiFsH,MAEvK,GAEJ,CAAC,GAAGwW,mBAAgC,CAChC,GAAA3gB,GACI,OAAO3D,KAAKyX,QAAQ8E,QAAQpU,EAChC,GAEJ,CAAC,MAAM7C,EAAWgf,YAAyB,CACvC,GAAA3gB,GACI,OAAO3D,KAAKyX,QAAQxL,IAAI9D,EAC5B,GAGZ,CAtEyCqc,CAA8BH,IAChE,CAAC,EACR,GAgWAtB,GAAWvG,QAAU,GACrBuG,GAAWtL,QAAU,GACrBsL,GAAWrgB,OAAS,CAAC,EC9+EN,MAAM+hB,GACjB,WAAA7kB,GACII,KAAK0kB,QAAU,CAAC,CACpB,CACA,EAAAC,CAAGjB,EAAQkB,GACPnB,GAAUC,EAAS7iB,IACf,MAAMgkB,EAAc7kB,KAAK0kB,QAAQ7jB,IAAU,GAC3CgkB,EAAY5gB,KAAK2gB,GACjB5kB,KAAK0kB,QAAQ7jB,GAASgkB,GAE9B,CACA,GAAAC,CAAIpB,EAAQkB,GACR,IAAIvE,EAAI7F,UAAUnJ,OACR,IAANgP,EAIJoD,GAAUC,EAAS7iB,IACf,GAAU,IAANwf,EAEA,mBADOrgB,KAAK0kB,QAAQ7jB,GAGxB,MAAMgkB,EAAc7kB,KAAK0kB,QAAQ7jB,QACbgT,IAAhBgR,IAEJA,EAAYE,OAAOF,EAAYG,QAAQJ,GAAM,GAC7C5kB,KAAK0kB,QAAQ7jB,GAASgkB,KAZtB7kB,KAAK0kB,QAAU,CAAC,CAcxB,CACA,OAAAO,CAAQvB,KAAWzK,GACf,IAAIzU,EAAOxE,KACXyjB,GAAUC,EAAS7iB,IACf,MAAMgkB,EAAcrgB,EAAKkgB,QAAQ7jB,QACbgT,IAAhBgR,GAEJA,EAAYtiB,QAAQqiB,IAChBA,EAAIM,MAAM1gB,EAAMyU,MAG5B,ECpDG,MAAMkM,GAAkBC,IAC3BA,EAAQA,EAAMvd,OAAO0a,UACXlR,OAAS,EACR+T,EAAM,IAAM,GAEU,GAAzBC,GAAeD,GAAe,IAAMA,EAAMlhB,KAAK,IAAM,IAAM,MAAQkhB,EAAMlhB,KAAK,KAAO,IAEpFohB,GAAmBhF,IAC5B,IAAKiF,GAAcjF,GACf,OAAOA,EAAMpc,KAAK,IAEtB,IAAI+D,EAAU,GACVud,EAAkB,EACtB,MAAMC,EAAe,KACbD,EAAkB,IAClBvd,GAAW,IAAMud,EAAkB,MAa3C,OAVAlF,EAAM/d,QAAQ,CAAC4C,EAAMugB,KACbvgB,IAASmb,EAAMoF,EAAI,IAIvBD,IACAxd,GAAW9C,EACXqgB,EAAkB,GALdA,MAORC,IACOxd,GAOE0d,GAAgBP,IACzB,IAAI9E,EAAQ9e,MAAMC,KAAK2jB,GACvB,OAAOD,GAAe7E,IAKbiF,GAAiBjF,GACnB,IAAKpgB,IAAIogB,GAAQ/e,OAAS+e,EAAMjP,OAK9BuU,GAAgBC,IACjBA,EAAM,IAAI5gB,QAAQ,qCAAsC,QAKvDogB,GAAkB/E,GACpBA,EAAM3d,OAAO,CAACmjB,EAAS1hB,IAAUkN,KAAKC,IAAIuU,EAASC,GAAc3hB,IAAS,GAExE2hB,GAAiBF,GACnBrkB,MAAMC,KAAKokB,GAAKxU,OC3Dd2U,GAAiB7c,IAC1B,GAAqB,IAAjBA,EAAMkI,OACN,MAAO,CAAC,CAAClI,IACb,IAAI4a,EAAS,GACb,MAAM1hB,EAAQ8G,EAAM8c,UAAU,GAU9B,OATaD,GAAc3jB,GACtBE,QAAQ,SAAU2jB,GACnB,IAAIC,EAAMD,EAAU1gB,MAAM,GAC1B2gB,EAAI,GAAKhd,EAAM5D,OAAO,GAAK4gB,EAAI,GAC/BpC,EAAO9f,KAAKkiB,GACZA,EAAMD,EAAU1gB,MAAM,GACtB2gB,EAAIC,QAAQjd,EAAM5D,OAAO,IACzBwe,EAAO9f,KAAKkiB,EAChB,GACOpC,GChBEsC,GAAc,CAAC,CAAC,EAAG,QAEzB,IAAIC,GACPC,GACJ,MACMC,GAAgB,CAAC,EACjBC,GAAkB,CACpB,IAAK,KACL,EAAK,IACL,EAAK,MACL,GAAM,IACN,GAAM,MACN,GAAM,IACN,GAAM,IACN,GAAM,KACN,GAAM,IACN,EAAK,MACL,EAAK,OACL,EAAK,WACL,EAAK,OACL,EAAK,KACL,EAAK,SACL,EAAK,OACL,EAAK,KACL,EAAK,KACL,EAAK,SACL,EAAK,WACL,EAAK,MACL,EAAK,UACL,EAAK,UACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,SACL,EAAK,MACL,EAAK,QACL,EAAK,QACL,EAAK,QACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,MACL,GAAM,IACN,EAAK,IACL,EAAK,MACL,EAAK,QACL,GAAM,KAEV,IAAK,IAAIC,KAASD,GAAiB,CAC/B,IAAIE,EAAUF,GAAgBC,IAAU,GACxC,IAAK,IAAIhB,EAAI,EAAGA,EAAIiB,EAAQtV,OAAQqU,IAAK,CACrC,IAAIvgB,EAAOwhB,EAAQV,UAAUP,EAAGA,EAAI,GACpCc,GAAcrhB,GAAQuhB,CAC1B,CACJ,CACA,MAAME,GAAc,IAAI1e,OAAOlH,OAAO+C,KAAKyiB,IAAetiB,KAAK,KAAhClD,YAAyD,MAa3E6lB,GAAY,CAAChB,EAAK5c,EAAO,SAAW4c,EAAIgB,UAAU5d,GAMlD6d,GAAajB,GACfrkB,MAAMC,KAAKokB,GAAKljB,OAKvB,CAACohB,EAAQ5e,IACE4e,EAASgD,GAAW5hB,GAC5B,IAEM4hB,GAAclB,IACvBA,EAAMgB,GAAUhB,GACXngB,cACAT,QAAQ2hB,GAAoCzhB,GACtCqhB,GAAcrhB,IAAS,IAG3B0hB,GAAUhB,EAAK,QA+BnB,MAAMmB,GAAgBX,IACzB,MAAMY,EAAe,CAAC,EAChBC,EAAc,CAACC,EAAQC,KAEzB,MAAMC,EAAaJ,EAAaE,IAAW,IAAIjnB,IACzConB,EAAO,IAAIpf,OAAO,IAAMyd,GAAa0B,GAAc,IAAK,MAC1DD,EAAOpgB,MAAMsgB,KAGjBD,EAAW5mB,IAAImlB,GAAawB,IAC5BH,EAAaE,GAAUE,IAE3B,IAAK,IAAIjjB,KAtCN,UAAoBiiB,GACvB,IAAK,MAAOkB,EAAgBC,KAAmBnB,EAC3C,IAAK,IAAIX,EAAI6B,EAAgB7B,GAAK8B,EAAgB9B,IAAK,CACnD,IAAI+B,EAAWhF,OAAOiF,aAAahC,GAC/ByB,EAASL,GAAUW,GACnBN,GAAUM,EAAS/hB,gBAQnByhB,EAAO9V,OA1GC,GA6GS,GAAjB8V,EAAO9V,cAGL,CAAE8V,OAAQA,EAAQM,SAAUA,EAAUE,WAAYjC,IAC5D,CAER,CAgBsBkC,CAAUvB,GACxBa,EAAY9iB,EAAM+iB,OAAQ/iB,EAAM+iB,QAChCD,EAAY9iB,EAAM+iB,OAAQ/iB,EAAMqjB,UAEpC,OAAOR,GAMEY,GAAexB,IACxB,MAAMY,EAAeD,GAAaX,GAC5BC,EAAc,CAAC,EACrB,IAAIwB,EAAa,GACjB,IAAK,IAAIX,KAAUF,EAAc,CAC7B,IAAIpjB,EAAMojB,EAAaE,GACnBtjB,IACAyiB,EAAYa,GAAUxB,GAAa9hB,IAEnCsjB,EAAO9V,OAAS,GAChByW,EAAW7jB,KAAK2hB,GAAauB,GAErC,CACAW,EAAWpmB,KAAK,CAACqH,EAAG4R,IAAMA,EAAEtJ,OAAStI,EAAEsI,QACvC,MAAM0W,EAAkB5C,GAAe2C,GAEvC,OADAvB,GAAiB,IAAIre,OAAO,IAAM6f,EAAiB,KAC5CzB,GA0BE0B,GAAsB,CAACnC,EAAKoC,EAAkB,KACvDA,EAAkB3W,KAAKC,IAAI0W,EAAiBpC,EAAIxU,OAAS,GAClD8T,GAAea,GAAcH,GAAKhjB,IAAKqlB,GAvBvB,EAACC,EAASF,EAAkB,KACnD,IAAIG,EAAiB,EAOrB,OANAD,EAAUA,EAAQtlB,IAAKgjB,IACfS,GAAYT,KACZuC,GAAkBvC,EAAIxU,QAEnBiV,GAAYT,IAAQA,IAE3BuC,GAAkBH,EACX3C,GAAgB6C,GAEpB,IAaIE,CAAYH,EAASD,MAO9BK,GAAqB,CAACC,EAAWC,GAAM,KACzC,IAAIP,EAAkBM,EAAUlX,OAAS,EAAI,EAAI,EACjD,OAAO8T,GAAeoD,EAAU1lB,IAAK4lB,IACjC,IAAIC,EAAM,GACV,MAAMC,EAAMH,EAAMC,EAASpX,SAAWoX,EAASpX,SAAW,EAC1D,IAAK,IAAIuX,EAAI,EAAGA,EAAID,EAAKC,IACrBF,EAAIzkB,KAAK+jB,GAAoBS,EAASI,QAAQD,IAAM,GAAIX,IAE5D,OAAO3C,GAAgBoD,OAMzBI,GAAc,CAACC,EAAYR,KAC7B,IAAK,MAAMG,KAAOH,EAAW,CACzB,GAAIG,EAAIrmB,OAAS0mB,EAAW1mB,OAASqmB,EAAI1I,KAAO+I,EAAW/I,IACvD,SAEJ,GAAI0I,EAAIG,QAAQ3kB,KAAK,MAAQ6kB,EAAWF,QAAQ3kB,KAAK,IACjD,SAEJ,IAAI8kB,EAAeD,EAAWjlB,MAC9B,MAAM+D,EAAUohB,IACZ,IAAK,MAAMC,KAAeF,EAAc,CACpC,GAAIE,EAAY7mB,QAAU4mB,EAAK5mB,OAAS6mB,EAAYC,SAAWF,EAAKE,OAChE,OAAO,EAEX,GAAmB,GAAfF,EAAK5X,QAAqC,GAAtB6X,EAAY7X,OAApC,CAQA,GAAI4X,EAAK5mB,MAAQ6mB,EAAY7mB,OAAS4mB,EAAKjJ,IAAMkJ,EAAY7mB,MACzD,OAAO,EAEX,GAAI6mB,EAAY7mB,MAAQ4mB,EAAK5mB,OAAS6mB,EAAYlJ,IAAMiJ,EAAK5mB,MACzD,OAAO,CAVX,CAYJ,CACA,OAAO,GAGX,KADeqmB,EAAI5kB,MAAM+D,OAAOA,GACnBwJ,OAAS,GAGtB,OAAO,CACX,CACA,OAAO,GAEX,MAAM+X,GACFtlB,MACA+kB,QACAxmB,MACA2d,IACA,WAAApgB,GACII,KAAK8D,MAAQ,GACb9D,KAAK6oB,QAAU,GACf7oB,KAAKqC,MAAQ,EACbrC,KAAKggB,IAAM,CACf,CACA,GAAAvf,CAAIwoB,GACIA,IACAjpB,KAAK8D,MAAMG,KAAKglB,GAChBjpB,KAAK6oB,QAAQ5kB,KAAKglB,EAAKE,QACvBnpB,KAAKqC,MAAQiP,KAAK+X,IAAIJ,EAAK5mB,MAAOrC,KAAKqC,OACvCrC,KAAKggB,IAAM1O,KAAKC,IAAI0X,EAAKjJ,IAAKhgB,KAAKggB,KAE3C,CACA,IAAAsJ,GACI,OAAOtpB,KAAK8D,MAAM9D,KAAK8D,MAAMuN,OAAS,EAC1C,CACA,MAAAA,GACI,OAAOrR,KAAK8D,MAAMuN,MACtB,CACA,KAAAkY,CAAMC,EAAUC,GACZ,IAAIF,EAAQ,IAAIH,GACZtlB,EAAQ2F,KAAKC,MAAMD,KAAKqZ,UAAU9iB,KAAK8D,QACvC4lB,EAAY5lB,EAAM6lB,MACtB,IAAK,MAAMV,KAAQnlB,EACfylB,EAAM9oB,IAAIwoB,GAEd,IAAIW,EAAcH,EAAWN,OAAOlD,UAAU,EAAGuD,EAAWE,EAAUrnB,OAClEwnB,EAAiBD,EAAYvY,OAEjC,OADAkY,EAAM9oB,IAAI,CAAE4B,MAAOqnB,EAAUrnB,MAAO2d,IAAK0J,EAAUrnB,MAAQwnB,EAAgBxY,OAAQwY,EAAgBV,OAAQS,IACpGL,CACX,EAcG,MAAMO,GAAcjE,IAhPD,IAACkE,OACHlW,IAAhByS,KAEJA,GAAcuB,GAAYkC,GAAgB1D,KA+O1CR,EAAMiB,GAAUjB,GAChB,IAAI5d,EAAU,GACVsgB,EAAY,CAAC,IAAIa,IACrB,IAAK,IAAI1D,EAAI,EAAGA,EAAIG,EAAIxU,OAAQqU,IAAK,CACjC,IACI1e,EADS6e,EAAII,UAAUP,GACR1e,MAAMuf,IACzB,MAAMphB,EAAO0gB,EAAII,UAAUP,EAAGA,EAAI,GAC5BsE,EAAYhjB,EAAQA,EAAM,GAAK,KAGrC,IAAIijB,EAAc,GACdC,EAAc,IAAIhqB,IACtB,IAAK,MAAMuoB,KAAYF,EAAW,CAC9B,MAAMkB,EAAahB,EAASa,OAC5B,IAAKG,GAAmC,GAArBA,EAAWpY,QAAeoY,EAAWzJ,KAAO0F,EAE3D,GAAIsE,EAAW,CACX,MAAMrB,EAAMqB,EAAU3Y,OACtBoX,EAAShoB,IAAI,CAAE4B,MAAOqjB,EAAG1F,IAAK0F,EAAIiD,EAAKtX,OAAQsX,EAAKQ,OAAQa,IAC5DE,EAAYzpB,IAAI,IACpB,MAEIgoB,EAAShoB,IAAI,CAAE4B,MAAOqjB,EAAG1F,IAAK0F,EAAI,EAAGrU,OAAQ,EAAG8X,OAAQhkB,IACxD+kB,EAAYzpB,IAAI,UAGnB,GAAIupB,EAAW,CAChB,IAAIT,EAAQd,EAASc,MAAM7D,EAAG+D,GAC9B,MAAMd,EAAMqB,EAAU3Y,OACtBkY,EAAM9oB,IAAI,CAAE4B,MAAOqjB,EAAG1F,IAAK0F,EAAIiD,EAAKtX,OAAQsX,EAAKQ,OAAQa,IACzDC,EAAYhmB,KAAKslB,EACrB,MAIIW,EAAYzpB,IAAI,IAExB,CAEA,GAAIwpB,EAAY5Y,OAAS,EAAzB,CAEI4Y,EAAcA,EAAYvoB,KAAK,CAACqH,EAAG4R,IACxB5R,EAAEsI,SAAWsJ,EAAEtJ,UAE1B,IAAK,IAAIkY,KAASU,EAEVnB,GAAYS,EAAOhB,IAGvBA,EAAUtkB,KAAKslB,EAGvB,MAKA,GAAI7D,EAAI,GAAyB,GAApBwE,EAAY3oB,OAAc2oB,EAAYje,IAAI,KAAM,CACzDhE,GAAWqgB,GAAmBC,GAAW,GACzC,IAAI4B,EAAU,IAAIf,GAClB,MAAMgB,EAAU7B,EAAU,GACtB6B,GACAD,EAAQ1pB,IAAI2pB,EAAQd,QAExBf,EAAY,CAAC4B,EACjB,CACJ,CAEA,OADAliB,GAAWqgB,GAAmBC,GAAW,GAClCtgB,GC7WEoiB,GAAU,CAACC,EAAKniB,KACzB,GAAKmiB,EAEL,OAAOA,EAAIniB,IAQFoiB,GAAiB,CAACD,EAAKniB,KAChC,GAAKmiB,EAAL,CAGA,IADA,IAAIrB,EAAMuB,EAAQriB,EAAKjB,MAAM,MACrB+hB,EAAOuB,EAAM/hB,WAAa6hB,EAAMA,EAAIrB,MAE5C,OAAOqB,CAJG,GAWDG,GAAa,CAACrmB,EAAOwC,EAAO8jB,KACrC,IAAIC,EAAOC,EACX,OAAKxmB,GAELA,GAAgB,GACG,MAAfwC,EAAMikB,QAGG,KADbD,EAAMxmB,EAAM0mB,OAAOlkB,EAAMikB,QADd,GAIXF,EAAQ/jB,EAAMgc,OAAOvR,OAASjN,EAAMiN,OACxB,IAARuZ,IACAD,GAAS,IACNA,EAAQD,IAVJ,GAgBFK,GAAc,CAACT,EAAKtmB,KAC7B,IAAII,EAAQkmB,EAAItmB,GAChB,GAAoB,mBAATI,EACP,OAAOA,EACPA,IAAU5C,MAAM4T,QAAQhR,KACxBkmB,EAAItmB,GAAO,CAACI,KAaP4mB,GAAU,CAACplB,EAAQkG,KAC5B,GAAItK,MAAM4T,QAAQxP,GACdA,EAAOrD,QAAQuJ,QAGf,IAAK,IAAI9H,KAAO4B,EACRA,EAAOI,eAAehC,IACtB8H,EAASlG,EAAO5B,GAAMA,IAKzBinB,GAAM,CAACliB,EAAG4R,IACF,iBAAN5R,GAA+B,iBAAN4R,EACzB5R,EAAI4R,EAAI,EAAK5R,EAAI4R,GAAK,EAAI,GAErC5R,EAAI+d,GAAU/d,EAAI,IAAIrD,gBACtBiV,EAAImM,GAAUnM,EAAI,IAAIjV,eAEX,EACPiV,EAAI5R,GACI,EACL,ECzEX,MAAMmiB,GACFC,MACAC,SAOA,WAAAxrB,CAAYurB,EAAOC,GACfprB,KAAKmrB,MAAQA,EACbnrB,KAAKorB,SAAWA,GAAY,CAAEC,YAAY,EAC9C,CAOA,QAAAC,CAASC,EAAOC,EAAyBC,GACrC,IAAKF,IAAUA,EAAMla,OACjB,MAAO,GACX,MAAMN,EAAS,GACT2a,EAAQH,EAAMrkB,MAAM,OAC1B,IAAIykB,EA6BJ,OA5BIF,IACAE,EAAc,IAAIzjB,OAAO,KAAOlH,OAAO+C,KAAK0nB,GAAS5oB,IAAI+iB,IAAc1hB,KAAK,KAAO,YAEvFwnB,EAAMnpB,QAASqpB,IACX,IAAIC,EACAC,EAAQ,KACRjB,EAAQ,KAERc,IAAgBE,EAAcD,EAAK5kB,MAAM2kB,MACzCG,EAAQD,EAAY,GACpBD,EAAOC,EAAY,IAEnBD,EAAKva,OAAS,IAEVwZ,EADA7qB,KAAKorB,SAASC,WACNvB,GAAW8B,IAAS,KAGpBhG,GAAagG,GAErBf,GAASW,IACTX,EAAQ,MAAQA,IAExB9Z,EAAO9M,KAAK,CACR2e,OAAQgJ,EACRf,MAAOA,EAAQ,IAAI3iB,OAAO2iB,EAAO,MAAQ,KACzCiB,MAAOA,MAGR/a,CACX,CAUA,gBAAAgb,CAAiBR,EAAOpkB,GACpB,IAAI2jB,EAAS9qB,KAAKgsB,cAAcT,EAAOpkB,GACvC,OAAOnH,KAAKisB,kBAAkBnB,EAClC,CAKA,iBAAAmB,CAAkBnB,GACd,MAAM/Z,EAAS+Z,EAAO/Z,OAAQmb,EAAcnb,EAAOM,OACnD,IAAK6a,EACD,OAAO,WAAc,OAAO,CAAG,EAEnC,MAAMC,EAASrB,EAAO3jB,QAAQglB,OAAQV,EAAUX,EAAOW,QAASW,EAAcD,EAAO9a,OAAQgb,EAAYvB,EAAOuB,UAChH,IAAKD,EACD,OAAO,WAAc,OAAO,CAAG,EAOnC,MAAME,EACkB,IAAhBF,EACO,SAAUxlB,EAAOkN,GACpB,MAAMgY,EAAQK,EAAO,GAAGL,MACxB,OAAOrB,GAAW4B,EAAUvY,EAAMgY,GAAQllB,EAAO6kB,EAAQK,IAAU,EACvE,EAEG,SAAUllB,EAAOkN,GACpB,IAAIyY,EAAM,EAEV,GAAI3lB,EAAMklB,MAAO,CACb,MAAM1nB,EAAQioB,EAAUvY,EAAMlN,EAAMklB,QAC/BllB,EAAMikB,OAASzmB,EAChBmoB,GAAQ,EAAIH,EAGZG,GAAO9B,GAAWrmB,EAAOwC,EAAO,EAExC,MAEIokB,GAAQS,EAAS,CAACf,EAAQoB,KACtBS,GAAO9B,GAAW4B,EAAUvY,EAAMgY,GAAQllB,EAAO8jB,KAGzD,OAAO6B,EAAMH,CACjB,EAEJ,OAAoB,IAAhBF,EACO,SAAUpY,GACb,OAAOwY,EAAYvb,EAAO,GAAI+C,EAClC,EAE+B,QAA/BgX,EAAO3jB,QAAQqlB,YACR,SAAU1Y,GACb,IAAI6W,EAAO4B,EAAM,EACjB,IAAK,IAAI3lB,KAASmK,EAAQ,CAEtB,IADA4Z,EAAQ2B,EAAY1lB,EAAOkN,KACd,EACT,OAAO,EACXyY,GAAO5B,CACX,CACA,OAAO4B,EAAML,CACjB,EAGO,SAAUpY,GACb,IAAIyY,EAAM,EAIV,OAHAvB,GAAQja,EAASnK,IACb2lB,GAAOD,EAAY1lB,EAAOkN,KAEvByY,EAAML,CACjB,CAER,CASA,eAAAO,CAAgBlB,EAAOpkB,GACnB,IAAI2jB,EAAS9qB,KAAKgsB,cAAcT,EAAOpkB,GACvC,OAAOnH,KAAK0sB,iBAAiB5B,EACjC,CACA,gBAAA4B,CAAiB5B,GACb,IAAI6B,EAAgBC,EAAY,GAChC,MAAMpoB,EAAOxE,KAAMmH,EAAU2jB,EAAO3jB,QAASzF,GAASopB,EAAOS,OAASpkB,EAAQ0lB,WAAc1lB,EAAQ0lB,WAAa1lB,EAAQzF,KACzH,GAAmB,mBAARA,EACP,OAAOA,EAAKorB,KAAK9sB,MAOrB,MAAM+sB,EAAY,SAAU5kB,EAAM4b,GAC9B,MAAa,WAAT5b,EACO4b,EAAO4G,MACXG,EAAOuB,UAAU7nB,EAAK2mB,MAAMpH,EAAOiJ,IAAK7kB,EACnD,EAEA,GAAIzG,EACA,IAAK,IAAIurB,KAAKvrB,GACNopB,EAAOS,OAAqB,WAAZ0B,EAAEnB,QAClBc,EAAU3oB,KAAKgpB,GAM3B,GAAInC,EAAOS,MAAO,CACdoB,GAAiB,EACjB,IAAK,IAAIO,KAAON,EACZ,GAAkB,WAAdM,EAAIpB,MAAoB,CACxBa,GAAiB,EACjB,KACJ,CAEAA,GACAC,EAAUxG,QAAQ,CAAE0F,MAAO,SAAUqB,UAAW,QAGxD,MAEIP,EAAYA,EAAU/kB,OAAQqlB,GAAsB,WAAdA,EAAIpB,OAI9C,OADwBc,EAAUvb,OAI3B,SAAUtI,EAAG4R,GAChB,IAAIoJ,EAAQ+H,EACZ,IAAK,IAAIsB,KAAYR,EAAW,CAI5B,GAHAd,EAAQsB,EAAStB,MAEjB/H,GADwC,SAAvBqJ,EAASD,WAAwB,EAAI,GAChClC,GAAI8B,EAAUjB,EAAO/iB,GAAIgkB,EAAUjB,EAAOnR,IAE5D,OAAOoJ,CACf,CACA,OAAO,CACX,EAZW,IAaf,CAQA,aAAAiI,CAAcT,EAAO8B,GACjB,MAAM5B,EAAU,CAAC,EACjB,IAAItkB,EAAUnG,OAAOC,OAAO,CAAC,EAAGosB,GAIhC,GAHAtC,GAAY5jB,EAAS,QACrB4jB,GAAY5jB,EAAS,cAEjBA,EAAQglB,OAAQ,CAChBpB,GAAY5jB,EAAS,UACrB,MAAMglB,EAAS,GACfhlB,EAAQglB,OAAO5pB,QAASupB,IACA,iBAATA,IACPA,EAAQ,CAAEA,MAAOA,EAAOpB,OAAQ,IAEpCyB,EAAOloB,KAAK6nB,GACZL,EAAQK,EAAMA,OAAU,WAAYA,EAASA,EAAMpB,OAAS,IAEhEvjB,EAAQglB,OAASA,CACrB,CACA,MAAO,CACHhlB,QAASA,EACTokB,MAAOA,EAAM7lB,cAAcqB,OAC3BgK,OAAQ/Q,KAAKsrB,SAASC,EAAOpkB,EAAQqkB,wBAAyBC,GAC9D6B,MAAO,EACPnC,MAAO,GACPM,QAASA,EACTY,UAAYllB,EAAe,QAAIojB,GAAiBF,GAExD,CAMA,MAAAS,CAAOS,EAAOpkB,GACV,IAAiBwjB,EAAOG,EAApBtmB,EAAOxE,KACX8qB,EAAS9qB,KAAKgsB,cAAcT,EAAOpkB,GACnCA,EAAU2jB,EAAO3jB,QACjBokB,EAAQT,EAAOS,MAEf,MAAMgC,EAAWpmB,EAAQwjB,OAASnmB,EAAKynB,kBAAkBnB,GAErDS,EAAMla,OACN2Z,GAAQxmB,EAAK2mB,MAAO,CAACqC,EAAMR,KACvBrC,EAAQ4C,EAASC,KACM,IAAnBrmB,EAAQU,QAAoB8iB,EAAQ,IACpCG,EAAOK,MAAMlnB,KAAK,CAAE,MAAS0mB,EAAO,GAAMqC,MAKlDhC,GAAQxmB,EAAK2mB,MAAO,CAACjmB,EAAG8nB,KACpBlC,EAAOK,MAAMlnB,KAAK,CAAE,MAAS,EAAG,GAAM+oB,MAG9C,MAAMS,EAAUjpB,EAAKkoB,iBAAiB5B,GAQtC,OAPI2C,GACA3C,EAAOK,MAAMzpB,KAAK+rB,GAEtB3C,EAAOwC,MAAQxC,EAAOK,MAAM9Z,OACC,iBAAlBlK,EAAQumB,QACf5C,EAAOK,MAAQL,EAAOK,MAAM3lB,MAAM,EAAG2B,EAAQumB,QAE1C5C,CACX,EC5RG,MAAM6C,GAAYvpB,GACjB,MAAOA,EACA,KACJwpB,GAASxpB,GAEPwpB,GAAYxpB,GACA,kBAAVA,EACAA,EAAQ,IAAM,IAClBA,EAAQ,GAMNypB,GAAehI,IAChBA,EAAM,IACT5gB,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UAgBV6oB,GAAe,CAACC,EAAIC,KAC7B,IAAIC,EACJ,OAAO,SAAU7pB,EAAO0H,GACpB,IAAItH,EAAOxE,KACPiuB,IACAzpB,EAAK0pB,QAAU5c,KAAKC,IAAI/M,EAAK0pB,QAAU,EAAG,GAC1CC,aAAaF,IAEjBA,EAAUG,WAAW,WACjBH,EAAU,KACVzpB,EAAK6pB,eAAejqB,IAAS,EAC7B2pB,EAAG5sB,KAAKqD,EAAMJ,EAAO0H,EACzB,EAAGkiB,EACP,GAOSM,GAAkB,CAAC9pB,EAAM+pB,EAAOR,KACzC,IAAIzhB,EACA2Y,EAAUzgB,EAAKygB,QACfuJ,EAAa,CAAC,EAelB,IAAKliB,KAbL9H,EAAKygB,QAAU,WACX,IAAI3Y,EAAOkO,UAAU,GACrB,IAA6B,IAAzB+T,EAAMvJ,QAAQ1Y,GAId,OAAO2Y,EAAQC,MAAM1gB,EAAMgW,WAH3BgU,EAAWliB,GAAQkO,SAK3B,EAEAuT,EAAG7I,MAAM1gB,EAAM,IACfA,EAAKygB,QAAUA,EAEFsJ,GACLjiB,KAAQkiB,GACRvJ,EAAQC,MAAM1gB,EAAMgqB,EAAWliB,KAuB9B/H,GAAiB,CAACkqB,EAAKhsB,GAAO,KACnCgsB,IACAA,EAAIlqB,iBACA9B,GACAgsB,EAAIpqB,oBAQHqqB,GAAW,CAAChqB,EAAQ4H,EAAMR,EAAU3E,KAC7CzC,EAAOtE,iBAAiBkM,EAAMR,EAAU3E,IAQ/BwnB,GAAY,CAACC,EAAUH,MAC3BA,MAGAA,EAAIG,IAIK,KADDH,EAAI5lB,OAAS,EAAI,IAAM4lB,EAAI7lB,QAAU,EAAI,IAAM6lB,EAAI3lB,SAAW,EAAI,IAAM2lB,EAAI9lB,QAAU,EAAI,IAW9FkmB,GAAQ,CAACC,EAAI9B,KACtB,MAAM+B,EAAcD,EAAGzlB,aAAa,MACpC,OAAI0lB,IAGJD,EAAGpT,aAAa,KAAMsR,GACfA,IAKEgC,GAAcnJ,GAChBA,EAAI5gB,QAAQ,UAAW,QAKrBgqB,GAAS,CAACC,EAAQliB,KACvBA,GACAkiB,EAAOD,OAAOjiB,IAYT,GAAU,CAACpH,EAAQkG,KAC5B,GAAItK,MAAM4T,QAAQxP,GACdA,EAAOrD,QAAQuJ,QAGf,IAAK,IAAI9H,KAAO4B,EACRA,EAAOI,eAAehC,IACtB8H,EAASlG,EAAO5B,GAAMA,ICtLzBmrB,GAAU5D,IACnB,GAAIA,EAAM6D,OACN,OAAO7D,EAAM,GAEjB,GAAIA,aAAiB8D,YACjB,OAAO9D,EAEX,GAAI+D,GAAa/D,GAAQ,CACrB,IAAIgE,EAAMxqB,SAASyqB,cAAc,YAEjC,OADAD,EAAIE,UAAYlE,EAAMxkB,OACfwoB,EAAIjoB,QAAQooB,UACvB,CACA,OAAO3qB,SAAS4qB,cAAcpE,IAErB+D,GAAgBM,GACN,iBAARA,GAAoBA,EAAI5K,QAAQ,MAAQ,EAY1C6K,GAAe,CAACC,EAAQC,KACjC,IAAIlvB,EAAQkE,SAASirB,YAAY,cACjCnvB,EAAMovB,UAAUF,GAAY,GAAM,GAClCD,EAAOtM,cAAc3iB,IAMZqvB,GAAW,CAACJ,EAAQK,KAC7BnvB,OAAOC,OAAO6uB,EAAOM,MAAOD,IAMnBE,GAAa,CAACC,KAAUzS,KACjC,IAAI0S,EAAeC,GAAa3S,IAChCyS,EAAQG,GAAYH,IACdztB,IAAIisB,IACNyB,EAAa1tB,IAAI6tB,IACb5B,EAAG6B,UAAUlwB,IAAIiwB,QAQhBE,GAAgB,CAACN,KAAUzS,KACpC,IAAI0S,EAAeC,GAAa3S,IAChCyS,EAAQG,GAAYH,IACdztB,IAAIisB,IACNyB,EAAa1tB,IAAI6tB,IACb5B,EAAG6B,UAAUE,OAAOH,QAQnBF,GAAgBvX,IACzB,IAAI4E,EAAU,GASd,OARA,GAAQ5E,EAAO6X,IACa,iBAAbA,IACPA,EAAWA,EAAS/pB,OAAOG,MAAM,iBAEjC1F,MAAM4T,QAAQ0b,KACdjT,EAAUA,EAAQ/a,OAAOguB,MAG1BjT,EAAQhW,OAAO0a,UAMbkO,GAAeb,IACnBpuB,MAAM4T,QAAQwa,KACfA,EAAM,CAACA,IAEJA,GAOEmB,GAAc,CAACrsB,EAAQoJ,EAAUkjB,KAC1C,IAAIA,GAAYA,EAAQlmB,SAASpG,GAGjC,KAAOA,GAAUA,EAAOoC,SAAS,CAC7B,GAAIpC,EAAOoC,QAAQgH,GACf,OAAOpJ,EAEXA,EAASA,EAAOusB,UACpB,GASSC,GAAU,CAACC,EAAMhE,EAAY,IAClCA,EAAY,EACLgE,EAAKA,EAAK9f,OAAS,GAEvB8f,EAAK,GAaHC,GAAY,CAACtC,EAAIuC,KAC1B,IAAKvC,EACD,OAAQ,EACZuC,EAAUA,GAAWvC,EAAGwC,SAExB,IADA,IAAI5L,EAAI,EACDoJ,EAAKA,EAAGyC,wBACPzC,EAAGhoB,QAAQuqB,IACX3L,IAGR,OAAOA,GAME8L,GAAU,CAAC1C,EAAI2C,KACxB,GAAQA,EAAO,CAACC,EAAKC,KACN,MAAPD,EACA5C,EAAGnT,gBAAgBgW,GAGnB7C,EAAGpT,aAAaiW,EAAM,GAAKD,MAO1BE,GAAc,CAACC,EAAUC,KAC9BD,EAASZ,YACTY,EAASZ,WAAWc,aAAaD,EAAaD,ICjKzCG,GAAY,CAACvtB,EAASomB,KAC/B,GAAc,OAAVA,EACA,OAEJ,GAAqB,iBAAVA,EAAoB,CAC3B,IAAKA,EAAMxZ,OACP,OACJwZ,EAAQ,IAAI3iB,OAAO2iB,EAAO,IAC9B,CAGA,MAuBMoH,EAAsBjlB,GACF,IAAlBA,EAAKM,SAxBS,CAACN,IACnB,IAAIhG,EAAQgG,EAAK8G,KAAK9M,MAAM6jB,GAC5B,GAAI7jB,GAASgG,EAAK8G,KAAKzC,OAAS,EAAG,CAC/B,IAAI6gB,EAAWntB,SAASyqB,cAAc,QACtC0C,EAASC,UAAY,YACrB,IAAIC,EAAYplB,EAAKqlB,UAAUrrB,EAAMlF,OACrCswB,EAAUC,UAAUrrB,EAAM,GAAGqK,QAC7B,IAAIihB,EAAcF,EAAUG,WAAU,GAGtC,OAFAL,EAASM,YAAYF,GACrBV,GAAYQ,EAAWF,GAChB,CACX,CACA,OAAO,GAaIO,CAAczlB,IATH,CAACA,IACD,IAAlBA,EAAKM,WAAkBN,EAAK0lB,YAAe,kBAAkBtrB,KAAK4F,EAAK3G,UAAgC,cAAnB2G,EAAKmlB,WAA8C,SAAjBnlB,EAAK3G,SAC3H7E,MAAMC,KAAKuL,EAAK0lB,YAAYnwB,QAAQkC,IAChCwtB,EAAmBxtB,MAQ3BkuB,CAAkB3lB,GACX,GAEXilB,EAAmBxtB,ICtCVmuB,GAD8B,oBAAdC,WAAoC,MAAMzrB,KAAKyrB,UAAUC,WACjD,UAAY,UCXjD,QACI3rB,QAAS,GACT4rB,UAAW,GACXC,QAAS,GACTC,UAAW,IACXC,QAAS,KACTC,SAAS,EACT9H,YAAY,EACZ5Q,OAAQ,KACR2Y,cAAc,EACdC,aAAc,KACdC,kBAAkB,EAClBtB,WAAW,EACXuB,aAAa,EACbC,WAAY,KACZC,WAAY,GACZC,SAAU,KACVC,aAAc,KACdC,YAAY,EACZC,eAAe,EACfC,aAAa,EACbC,QAAS,KACTC,kBAAkB,EAElBC,gBAAiB,IACjBC,aAAc,IACdC,aAAc,UACdC,SAAU,KACVC,cAAe,WACfC,WAAY,QACZC,WAAY,OACZC,cAAe,WACfC,mBAAoB,QACpBC,mBAAoB,QACpBC,mBAAmB,EACnBC,UAAW,SACXC,YAAa,CAAC,QACdC,kBAAmB,MACnBC,KAAM,KACNC,aAAc,aACdC,aAAc,aACdC,cAAe,cACfC,qBAAsB,sBACtBC,UAAW,OACXC,YAAa,SACbC,eAAgB,KAChBC,aAAc,oDACdC,uBAAuB,EACvBC,YAAa,KACbC,gBAAiB,KACjB1S,WAAY,SAAUuI,GAClB,OAAOA,EAAMla,OAAS,CAC1B,EAoBAskB,OAAQ,CAQR,GC9EW,SAASC,GAAYzsB,EAAO0sB,GACvC,IAAIzK,EAAWpqB,OAAOC,OAAO,CAAC,EAAG60B,GAAUD,GACvCE,EAAY3K,EAASgJ,SACrB4B,EAAc5K,EAASmJ,WACvB0B,EAAc7K,EAASkJ,WACvB4B,EAAiB9K,EAASoJ,cAC1B2B,EAAiB/K,EAASiJ,cAC1B+B,EAAuBhL,EAASqJ,mBAChC4B,EAAuBjL,EAASsJ,mBAChC4B,EAAWntB,EAAM9C,QAAQX,cACzB+vB,EAActsB,EAAME,aAAa,gBAAkBF,EAAME,aAAa,oBAC1E,IAAKosB,IAAgBrK,EAAS4I,iBAAkB,CAC5C,IAAIuC,EAASptB,EAAMwmB,cAAc,oBAC7B4G,IACAd,EAAcc,EAAOC,YAE7B,CACA,IAAIC,EAAmB,CACnBhB,YAAaA,EACbtuB,QAAS,GACT4rB,UAAW,GACX5H,MAAO,GACPuI,SAAU,MAmHd,MANiB,WAAb4C,EAvGc,MACd,IAAIjwB,EACAc,EAAUsvB,EAAiBtvB,QAC3BuvB,EAAa,CAAC,EACdC,EAAc,EAClB,IAAIC,EAAS,EACb,IAAIC,EAAY/H,IACZ,IAAIhb,EAAO9S,OAAOC,OAAO,CAAC,EAAG6tB,EAAGgI,SAC5BC,EAAOhB,GAAajiB,EAAKiiB,GAI7B,MAHoB,iBAATgB,GAAqBA,EAAK1lB,SACjCyC,EAAO9S,OAAOC,OAAO6S,EAAMrK,KAAKC,MAAMqtB,KAEnCjjB,GAEPkjB,EAAY,CAACT,EAAQU,KACrB,IAAI7yB,EAAQupB,GAAS4I,EAAOnyB,OAC5B,GAAa,MAATA,IAECA,GAAUgnB,EAAS4I,kBAAxB,CAMA,GAAI0C,EAAW1wB,eAAe5B,IAC1B,GAAI6yB,EAAO,CACP,IAAIC,EAAMR,EAAWtyB,GAAO+xB,GACvBe,EAGK11B,MAAM4T,QAAQ8hB,GAIpBA,EAAIjzB,KAAKgzB,GAHTP,EAAWtyB,GAAO+xB,GAAkB,CAACe,EAAKD,GAH1CP,EAAWtyB,GAAO+xB,GAAkBc,CAQ5C,MAEC,CACD,IAAIE,EAAcN,EAASN,GAC3BY,EAAYnB,GAAemB,EAAYnB,IAAgBO,EAAOC,YAC9DW,EAAYlB,GAAekB,EAAYlB,IAAgB7xB,EACvD+yB,EAAYjB,GAAkBiB,EAAYjB,IAAmBK,EAAOa,SACpED,EAAYhB,GAAkBgB,EAAYhB,IAAmBc,EAC7DE,EAAYE,QAAUd,EACtBY,EAAYP,OAASO,EAAYP,UAAYA,EAC7CF,EAAWtyB,GAAS+yB,EACpBhwB,EAAQlD,KAAKkzB,EACjB,CACIZ,EAAOe,UACPb,EAAiBtL,MAAMlnB,KAAKG,EA/BtB,GA+CdqyB,EAAiB/C,SAAWvqB,EAAM4E,aAAa,YAAc,KAAO,EACpE,GAAQ5E,EAAMouB,SAAWC,IAdV,IAACC,EACRzK,EAAI0K,EAeQ,cADhBrxB,EAAUmxB,EAAMnxB,QAAQX,iBAbxBgyB,EAAgBb,EAFJY,EAiBCD,IAdCpB,GAAwBsB,EAActB,IAAyBqB,EAASpuB,aAAa,UAAY,GAC/GquB,EAAcrB,GAAwBqB,EAAcrB,IAAyBM,IAC7Ee,EAAcxB,GAAkBwB,EAAcxB,IAAmBuB,EAASL,SAC1EM,EAAcd,OAASc,EAAcd,UAAYA,EACjDH,EAAiB1D,UAAU9uB,KAAKyzB,GAChC1K,EAAK0K,EAAcrB,GACnB,GAAQoB,EAASF,SAAWhB,IACxBS,EAAUT,EAAQvJ,MASD,WAAZ3mB,GACL2wB,EAAUQ,MA+BlBG,GAvBe,MACf,MAAMC,EAAWzuB,EAAME,aAAa0sB,GACpC,GAAK6B,EAcDnB,EAAiBtvB,QAAUsC,KAAKC,MAAMkuB,GACtC,GAAQnB,EAAiBtvB,QAAU0wB,IAC/BpB,EAAiBtL,MAAMlnB,KAAK4zB,EAAI5B,UAhBzB,CACX,IAAI7xB,EAAQ+E,EAAM/E,MAAM2C,QAAU,GAClC,IAAKqkB,EAAS4I,mBAAqB5vB,EAAMiN,OACrC,OACJ,MAAM3O,EAAS0B,EAAM8C,MAAMkkB,EAAS6H,WACpC,GAAQvwB,EAAS0B,IACb,MAAMmyB,EAAS,CAAC,EAChBA,EAAOP,GAAe5xB,EACtBmyB,EAAON,GAAe7xB,EACtBqyB,EAAiBtvB,QAAQlD,KAAKsyB,KAElCE,EAAiBtL,MAAQzoB,CAC7B,GAYAo1B,GAEG92B,OAAOC,OAAO,CAAC,EAAG60B,GAAUW,EAAkBZ,EACzD,CCnIA,IAAIkC,GAAa,EACF,MAAMC,WCKN,SAAqBC,GAEhC,OADAA,EAAUjF,QAAU,CAAC,EACd,cAAciF,EACjB,WAAAr4B,GACIs4B,SAAS1d,WACTxa,KAAKgzB,QAAU,CACXxI,MAAO,GACPY,SAAU,CAAC,EACX+M,UAAW,CAAC,EACZC,OAAQ,CAAC,EAEjB,CAMA,aAAOC,CAAOlwB,EAAM4lB,GAChBkK,EAAUjF,QAAQ7qB,GAAQ,CACtB,KAAQA,EACR,GAAM4lB,EAEd,CAgBA,iBAAAuK,CAAkBtF,GACd,IAAIhvB,EAAKmE,EACT,MAAM3D,EAAOxE,KACPu4B,EAAQ,GACd,GAAI/2B,MAAM4T,QAAQ4d,GACdA,EAAQzwB,QAASi2B,IACS,iBAAXA,EACPD,EAAMt0B,KAAKu0B,IAGXh0B,EAAKwuB,QAAQ5H,SAASoN,EAAOrwB,MAAQqwB,EAAOrxB,QAC5CoxB,EAAMt0B,KAAKu0B,EAAOrwB,cAIzB,GAAI6qB,EACL,IAAKhvB,KAAOgvB,EACJA,EAAQhtB,eAAehC,KACvBQ,EAAKwuB,QAAQ5H,SAASpnB,GAAOgvB,EAAQhvB,GACrCu0B,EAAMt0B,KAAKD,IAIvB,KAAOmE,EAAOowB,EAAM9vB,SAChBjE,EAAKi0B,QAAQtwB,EAErB,CACA,UAAAuwB,CAAWvwB,GACP,IAAI3D,EAAOxE,KACPgzB,EAAUxuB,EAAKwuB,QACfwF,EAASP,EAAUjF,QAAQ7qB,GAC/B,IAAK8vB,EAAUjF,QAAQhtB,eAAemC,GAClC,MAAM,IAAIqB,MAAM,mBAAqBrB,EAAO,YAEhD6qB,EAAQmF,UAAUhwB,IAAQ,EAC1B6qB,EAAQoF,OAAOjwB,GAAQqwB,EAAOzK,GAAG7I,MAAM1gB,EAAM,CAACA,EAAKwuB,QAAQ5H,SAASjjB,IAAS,CAAC,IAC9E6qB,EAAQxI,MAAMvmB,KAAKkE,EACvB,CAKA,OAAAswB,CAAQtwB,GACJ,IAAI3D,EAAOxE,KACPgzB,EAAUxuB,EAAKwuB,QACnB,IAAKxuB,EAAKwuB,QAAQoF,OAAOpyB,eAAemC,GAAO,CAC3C,GAAI6qB,EAAQmF,UAAUhwB,GAClB,MAAM,IAAIqB,MAAM,oCAAsCrB,EAAO,MAEjE3D,EAAKk0B,WAAWvwB,EACpB,CACA,OAAO6qB,EAAQoF,OAAOjwB,EAC1B,EAER,CDjGuCwwB,CAAYlU,KAC/C,WAAA7kB,CAAYg5B,EAAWC,GA2BnB,IAAIC,EA1BJZ,QACAl4B,KAAK+4B,MAAQ,EACb/4B,KAAKg5B,QAAS,EACdh5B,KAAKi5B,YAAa,EAClBj5B,KAAKk5B,YAAa,EAClBl5B,KAAKm5B,WAAY,EACjBn5B,KAAKo5B,SAAU,EACfp5B,KAAKq5B,UAAW,EAChBr5B,KAAKs5B,WAAY,EACjBt5B,KAAKu5B,eAAgB,EACrBv5B,KAAKw5B,SAAU,EACfx5B,KAAKy5B,aAAc,EACnBz5B,KAAK05B,aAAc,EACnB15B,KAAK25B,YAAa,EAClB35B,KAAK45B,UAAY,GACjB55B,KAAK65B,SAAW,EAChB75B,KAAKkuB,QAAU,EACfluB,KAAKquB,eAAiB,CAAC,EACvBruB,KAAK85B,aAAe,KACpB95B,KAAK+5B,YAAc,GACnB/5B,KAAK+yB,UAAY,CAAC,EAClB/yB,KAAKmH,QAAU,CAAC,EAChBnH,KAAKg6B,YAAc,CAAC,EACpBh6B,KAAKmrB,MAAQ,GACbnrB,KAAKi6B,eAAiB,KACtBlC,KAEA,IAAI5uB,EAAQgmB,GAAOyJ,GACnB,GAAIzvB,EAAM+wB,UACN,MAAM,IAAI1wB,MAAM,kDAEpBL,EAAM+wB,UAAYl6B,KAGlB84B,GADoBh0B,OAAOq1B,kBAAoBr1B,OAAOq1B,iBAAiBhxB,EAAO,OAC1DixB,iBAAiB,aAErC,MAAMhP,EAAWwK,GAAYzsB,EAAO0vB,GACpC74B,KAAKorB,SAAWA,EAChBprB,KAAKmJ,MAAQA,EACbnJ,KAAKq6B,SAAWlxB,EAAMkxB,UAAY,EAClCr6B,KAAKs6B,cAAgD,WAAhCnxB,EAAM9C,QAAQX,cACnC1F,KAAKu6B,IAAM,OAAOnzB,KAAK0xB,GACvB94B,KAAKw6B,QAAU3L,GAAM1lB,EAAO,aAAe4uB,IAC3C/3B,KAAKy6B,WAAatxB,EAAMuxB,SAExB16B,KAAK26B,OAAS,IAAIzP,GAAOlrB,KAAKmH,QAAS,CAAEkkB,WAAYD,EAASC,aAE9DD,EAAS2J,KAAO3J,EAAS2J,OAA+B,IAAtB3J,EAASsI,SAAiB,SAAW,SAClC,kBAA1BtI,EAASuI,eAChBvI,EAASuI,aAAiC,UAAlBvI,EAAS2J,MAEG,kBAA7B3J,EAASsK,kBAChBtK,EAASsK,gBAAoC,UAAlBtK,EAAS2J,MAGxC,IAAIltB,EAASujB,EAASiI,aACA,mBAAXxrB,IACe,iBAAXA,IACPA,EAAS,IAAIK,OAAOL,IAEpBA,aAAkBK,OAClBkjB,EAASiI,aAAgBlqB,GAAUtB,EAAOT,KAAK+B,GAG/CiiB,EAASiI,aAAgBjvB,GACdpE,KAAKorB,SAASwI,aAAe5zB,KAAKmH,QAAQ/C,IAI7DpE,KAAKs4B,kBAAkBlN,EAAS4H,SAChChzB,KAAK46B,iBACL56B,KAAK66B,iBAEL,MAAM7J,EAAU7B,GAAO,SACjB2L,EAAU3L,GAAO,SACjB4L,EAAW/6B,KAAKg7B,QAAQ,YACxBC,EAAmB9L,GAAO,sCAC1BtR,EAAU7d,KAAKmJ,MAAME,aAAa,UAAY,GAC9C6xB,EAAY9P,EAAS2J,KAC3B,IAAIoG,EAYJ,GAXA9K,GAAWW,EAAS5F,EAAS4J,aAAcnX,EAASqd,GACpD7K,GAAWyK,EAAS1P,EAAS6J,cAC7BhG,GAAO+B,EAAS8J,GAChBzK,GAAW0K,EAAU3P,EAAS8J,cAAegG,GACzC9P,EAASoK,uBACTnF,GAAW0K,EAAUld,GAEzBwS,GAAW4K,EAAkB7P,EAAS+J,sBACtClG,GAAO8L,EAAUE,GACjB9L,GAAO/D,EAASkK,gBAAkBtE,GAASwB,YAAYuI,GAEnDzL,GAAalE,EAASmK,cAAe,CACrC4F,EAAgBhM,GAAO/D,EAASmK,cAGhC,GADY,CAAC,cAAe,iBAAkB,eAAgB,aAAc,cAC5D5D,IACRxoB,EAAME,aAAasoB,IACnBH,GAAQ2J,EAAe,CAAE,CAACxJ,GAAOxoB,EAAME,aAAasoB,OAG5DwJ,EAAcd,UAAY,EAC1BS,EAAQtI,YAAY2I,GACpBn7B,KAAKo7B,WAAaD,CAEtB,MACS/P,EAASmK,cACd4F,EAAgBhM,GAAO/D,EAASmK,cAChCv1B,KAAKo7B,WAAaD,IAGlBA,EAAgBhM,GAAO,YACvBnvB,KAAKo7B,WAAaN,GAEtB96B,KAAKgxB,QAAUA,EACfhxB,KAAK+6B,SAAWA,EAChB/6B,KAAKi7B,iBAAmBA,EACxBj7B,KAAK86B,QAAUA,EACf96B,KAAKm7B,cAAgBA,EACrBn7B,KAAKq7B,OACT,CAKA,KAAAA,GACI,MAAM72B,EAAOxE,KACPorB,EAAW5mB,EAAK4mB,SAChB+P,EAAgB32B,EAAK22B,cACrBJ,EAAWv2B,EAAKu2B,SAChBE,EAAmBz2B,EAAKy2B,iBACxBjK,EAAUxsB,EAAKwsB,QACf8J,EAAUt2B,EAAKs2B,QACf3xB,EAAQ3E,EAAK2E,MACbiyB,EAAa52B,EAAK42B,WAClBE,EAAgB,CAAEC,SAAS,GAC3BC,EAAYh3B,EAAKg2B,QAAU,eACjChJ,GAAQyJ,EAAkB,CACtBjO,GAAIwO,IAERhK,GAAQ4J,EAAY,CAChBK,KAAM,WACN,gBAAiB,UACjB,gBAAiB,QACjB,gBAAiBD,IAErB,MAAME,EAAa7M,GAAMuM,EAAY52B,EAAKg2B,QAAU,eAC9CjP,EAAQ,cLnIK,CAACA,GACjBA,EAAMtmB,QAAQ,UAAW,QKkIE02B,CAAYn3B,EAAKg2B,SAAW,KACpDoB,EAAQ72B,SAAS4qB,cAAcpE,GAC/BsQ,EAAcr3B,EAAKs3B,MAAMhP,KAAKtoB,GACpC,GAAIo3B,EAAO,CACPlN,GAASkN,EAAO,QAASC,GACzBrK,GAAQoK,EAAO,CAAEG,IAAKL,IACtB,MAAMM,EAAWnN,GAAM+M,EAAOp3B,EAAKg2B,QAAU,aAC7ChJ,GAAQ4J,EAAY,CAAE,kBAAmBY,IACzCxK,GAAQyJ,EAAkB,CAAE,kBAAmBe,GACnD,CAIA,GAHAhL,EAAQZ,MAAM6L,MAAQ9yB,EAAMinB,MAAM6L,MAClCjL,EAAQZ,MAAM8L,SAAW/yB,EAAMinB,MAAM8L,SACrClL,EAAQZ,MAAM+L,SAAWhzB,EAAMinB,MAAM+L,SACjC33B,EAAKwuB,QAAQxI,MAAMnZ,OAAQ,CAC3B,MAAM+qB,EAAkB,UAAY53B,EAAKwuB,QAAQxI,MAAMtmB,KAAK,YAC5DmsB,GAAW,CAACW,EAAS+J,GAAWqB,EACpC,EAC2B,OAAtBhR,EAASsI,UAAqBtI,EAASsI,SAAW,IAAMlvB,EAAK81B,eAC9D9I,GAAQroB,EAAO,CAAEkzB,SAAU,aAE3BjR,EAASqK,aACTjE,GAAQ2J,EAAe,CAAE1F,YAAarK,EAASqK,eAG9CrK,EAAS8H,SAAW9H,EAAS6H,YAC9B7H,EAAS8H,QAAU,IAAIhrB,OAAO,OAAS0d,GAAawF,EAAS6H,WAAa,UAI1E7H,EAASkR,MAAQlR,EAAS8I,eAC1B9I,EAASkR,KAAOxO,GAAa1C,EAASkR,KAAMlR,EAAS8I,eAEzDxF,GAASqM,EAAU,YAAa,KAC5Bv2B,EAAKk1B,aAAc,IAEvBhL,GAASqM,EAAU,aAAe3xB,IAC9B,IAAImzB,EAAexL,GAAY3nB,EAAE1E,OAAQ,oBAAqBq2B,GAC1DwB,GACA/3B,EAAKg4B,cAAcpzB,EAAGmzB,IAC3B,CAAEE,SAAS,IAEd/N,GAASqM,EAAU,QAAUtM,IACzB,MAAM8H,EAASxF,GAAYtC,EAAI/pB,OAAQ,qBACnC6xB,IACA/xB,EAAKk4B,eAAejO,EAAK8H,GACzBhyB,GAAekqB,GAAK,MAG5BC,GAASoM,EAAS,QAAUrM,IACxB,IAAI8N,EAAexL,GAAYtC,EAAI/pB,OAAQ,iBAAkBo2B,GACzDyB,GAAgB/3B,EAAKm4B,aAAalO,EAAK8N,GACvCh4B,GAAekqB,GAAK,GAIG,IAAvB0M,EAAc/2B,QAGlBI,EAAKo4B,UACLr4B,GAAekqB,GAAK,MAGxBC,GAAS0M,EAAY,UAAYhyB,GAAM5E,EAAKq4B,UAAUzzB,IAEtDslB,GAASyM,EAAe,WAAa/xB,GAAM5E,EAAKs4B,WAAW1zB,IAC3DslB,GAASyM,EAAe,QAAU/xB,GAAM5E,EAAKu4B,QAAQ3zB,IACrDslB,GAAS0M,EAAY,OAAShyB,GAAM5E,EAAKw4B,OAAO5zB,IAChDslB,GAAS0M,EAAY,QAAUhyB,GAAM5E,EAAKy4B,QAAQ7zB,IAClDslB,GAASyM,EAAe,QAAU/xB,GAAM5E,EAAK04B,QAAQ9zB,IACrD,MAAM+zB,EAAiB1O,IAGnB,MAAM/pB,EAAS+pB,EAAI2O,eAAe,GAClC,IAAKpM,EAAQlmB,SAASpG,KAAYq2B,EAASjwB,SAASpG,GAKhD,OAJIF,EAAK80B,WACL90B,EAAK64B,YAET74B,EAAK84B,aAOL54B,GAAUy2B,GAAiB32B,EAAKw0B,OAChCvK,EAAIpqB,kBAIJE,GAAekqB,GAAK,IAGtB8O,EAAa,KACX/4B,EAAKw0B,QACLx0B,EAAKg5B,oBAGPC,EAAgB,KACdj5B,EAAK40B,UACL50B,EAAK40B,SAAU,EACf50B,EAAK20B,WAAY,EACjB30B,EAAKk5B,iBAGbhP,GAASvlB,EAAO,UAAWs0B,GAC3B/O,GAAS3pB,SAAU,YAAao4B,GAChCzO,GAAS5pB,OAAQ,SAAUy4B,EAAYjC,GACvC5M,GAAS5pB,OAAQ,SAAUy4B,EAAYjC,GACvCt7B,KAAK29B,SAAW,KACZx0B,EAAM7I,oBAAoB,UAAWm9B,GACrC14B,SAASzE,oBAAoB,YAAa68B,GAC1Cr4B,OAAOxE,oBAAoB,SAAUi9B,GACrCz4B,OAAOxE,oBAAoB,SAAUi9B,GACjC3B,GACAA,EAAMt7B,oBAAoB,QAASu7B,IAI3C77B,KAAK49B,eAAiB,CAClBnO,UAAWtmB,EAAMsmB,UACjB4K,SAAUlxB,EAAMkxB,UAEpBlxB,EAAMkxB,UAAY,EAClBlxB,EAAM00B,sBAAsB,WAAYr5B,EAAKwsB,SAC7CxsB,EAAKs5B,MAAK,GACV1S,EAASD,MAAQ,UACVC,EAAS2H,iBACT3H,EAASjkB,QAChB3C,EAAKu5B,eACLv5B,EAAKw5B,OAAM,GACXx5B,EAAK84B,aACL94B,EAAKg1B,SAAU,EACXrwB,EAAMiuB,SACN5yB,EAAKy5B,UAEA90B,EAAM+0B,SACX15B,EAAK25B,aAAY,GAGjB35B,EAAK45B,SAET55B,EAAKmgB,GAAG,SAAU3kB,KAAKq+B,UACvBhO,GAAWlnB,EAAO,cAAe,wBACjC3E,EAAKygB,QAAQ,eAEY,IAArBmG,EAAS2I,SACTvvB,EAAKuvB,SAEb,CAKA,YAAAuK,CAAan3B,EAAU,GAAI4rB,EAAY,IAEnC/yB,KAAKu+B,WAAWp3B,GAEhB,GAAQ4rB,EAAY0E,IAChBz3B,KAAKw+B,oBAAoB/G,IAEjC,CAIA,cAAAoD,GACI,IAAIr2B,EAAOxE,KACPg2B,EAAcxxB,EAAK4mB,SAASmJ,WAC5B4B,EAAiB3xB,EAAK4mB,SAASqJ,mBAC/BgK,EAAY,CACZ,SAAa3qB,IACT,IAAI2jB,EAAW1yB,SAASyqB,cAAc,OAGtC,OAFAiI,EAAStF,UAAY,WACrBsF,EAASjF,YAAY1e,EAAK3M,SACnBswB,GAEX,gBAAmB,CAAC3jB,EAAM4qB,IACf,gCAAkCA,EAAO5qB,EAAKqiB,IAAmB,SAE5E,OAAU,CAACriB,EAAM4qB,IACN,QAAUA,EAAO5qB,EAAKkiB,IAAgB,SAEjD,KAAQ,CAACliB,EAAM4qB,IACJ,QAAUA,EAAO5qB,EAAKkiB,IAAgB,SAEjD,cAAiB,CAACliB,EAAM4qB,IACb,mCAAqCA,EAAO5qB,EAAK3K,OAAS,0BAErE,WAAc,IACH,iDAEX,QAAW,IACA,8BAEX,YAAe,OACf,SAAY,IACD,eAGf3E,EAAK4mB,SAASuK,OAAS30B,OAAOC,OAAO,CAAC,EAAGw9B,EAAWj6B,EAAK4mB,SAASuK,OACtE,CAKA,cAAAiF,GACI,IAAI52B,EAAK+pB,EACL4Q,EAAY,CACZ,WAAc,eACd,OAAU,WACV,SAAY,YACZ,YAAe,eACf,YAAe,eACf,MAAS,UACT,WAAc,cACd,cAAiB,iBACjB,aAAgB,gBAChB,aAAgB,mBAChB,gBAAmB,sBACnB,eAAkB,qBAClB,cAAiB,iBACjB,eAAkB,kBAClB,KAAQ,SACR,KAAQ,SACR,MAAS,UACT,KAAQ,UAEZ,IAAK36B,KAAO26B,GACR5Q,EAAK/tB,KAAKorB,SAASuT,EAAU36B,MAEzBhE,KAAK2kB,GAAG3gB,EAAK+pB,EAEzB,CAKA,IAAA+P,CAAKc,GAAe,GAChB,MAAMp6B,EAAOxE,KACPorB,EAAWwT,EAAehJ,GAAYpxB,EAAK2E,MAAO,CAAE8pB,UAAWzuB,EAAK4mB,SAAS6H,UAAWe,iBAAkBxvB,EAAK4mB,SAAS4I,mBAAsBxvB,EAAK4mB,SACzJ5mB,EAAK85B,aAAalT,EAASjkB,QAASikB,EAAS2H,WAC7CvuB,EAAKq6B,SAASzT,EAASD,OAAS,IAAI,GACpC3mB,EAAKs6B,UAAY,IACrB,CAMA,OAAAlC,GACI,IAAIp4B,EAAOxE,KACX,GAAIwE,EAAKu1B,YAAY1oB,OAAS,EAG1B,OAFA7M,EAAKu6B,wBACLv6B,EAAKs3B,QAGLt3B,EAAK80B,WAAa90B,EAAKw0B,OACvBx0B,EAAK64B,OAGL74B,EAAKs3B,OAEb,CAKA,WAAAkD,GAAgB,CAMhB,QAAAX,GACIxO,GAAa7vB,KAAKmJ,MAAO,SACzB0mB,GAAa7vB,KAAKmJ,MAAO,SAC7B,CAKA,OAAA+zB,CAAQ9zB,GACJ,IAAI5E,EAAOxE,KACPwE,EAAK+0B,eAAiB/0B,EAAK60B,SAC3B90B,GAAe6E,GAKd5E,EAAK4mB,SAAS8H,SAInB9E,WAAW,KACP,IAAI6Q,EAAaz6B,EAAK06B,aACtB,GAAKD,EAAWj4B,MAAMxC,EAAK4mB,SAAS8H,SAApC,CAGA,IAAIiM,EAAaF,EAAWl4B,OAAOG,MAAM1C,EAAK4mB,SAAS8H,SACvD,GAAQiM,EAAaC,IACJzR,GAASyR,KAEdp/B,KAAKmH,QAAQi4B,GACb56B,EAAK66B,QAAQD,GAGb56B,EAAK86B,WAAWF,KAT5B,GAaD,EACP,CAKA,UAAAtC,CAAW1zB,GACP,IAAI5E,EAAOxE,KACX,IAAIwE,EAAK60B,SAAT,CAIA,IAAIkG,EAAY9c,OAAOiF,aAAate,EAAEo2B,SAAWp2B,EAAEq2B,OACnD,OAAIj7B,EAAK4mB,SAAS3Q,QAAiC,UAAvBjW,EAAK4mB,SAAS2J,MAAoBwK,IAAc/6B,EAAK4mB,SAAS6H,WACtFzuB,EAAK86B,kBACL/6B,GAAe6E,SAFnB,CAFA,CAFI7E,GAAe6E,EASvB,CAKA,SAAAyzB,CAAUzzB,GACN,IAAI5E,EAAOxE,KAEX,GADAwE,EAAKk1B,aAAc,EACfl1B,EAAK60B,SHpeM,IGqePjwB,EAAEo2B,SACFj7B,GAAe6E,OAFvB,CAMA,OAAQA,EAAEo2B,SAEN,KHrfS,GGsfL,GAAI7Q,GAAU,GAAwBvlB,IACF,IAA5B5E,EAAK22B,cAAc/2B,MAGnB,OAFAG,GAAe6E,QACf5E,EAAKk7B,YAIb,MAEJ,KH7fW,GGmgBP,OALIl7B,EAAKw0B,SACLz0B,GAAe6E,GAAG,GAClB5E,EAAKw5B,cAETx5B,EAAKu6B,mBAGT,KHjgBY,GGkgBR,IAAKv6B,EAAKw0B,QAAUx0B,EAAKm1B,WACrBn1B,EAAKm7B,YAEJ,GAAIn7B,EAAKs1B,aAAc,CACxB,IAAI8F,EAAOp7B,EAAKq7B,YAAYr7B,EAAKs1B,aAAc,GAC3C8F,GACAp7B,EAAKs7B,gBAAgBF,EAC7B,CAEA,YADAr7B,GAAe6E,GAGnB,KH/gBU,GGghBN,GAAI5E,EAAKs1B,aAAc,CACnB,IAAIiG,EAAOv7B,EAAKq7B,YAAYr7B,EAAKs1B,cAAe,GAC5CiG,GACAv7B,EAAKs7B,gBAAgBC,EAC7B,CAEA,YADAx7B,GAAe6E,GAGnB,KH3hBc,GGwiBV,YAZI5E,EAAKw7B,UAAUx7B,EAAKs1B,eACpBt1B,EAAKk4B,eAAetzB,EAAG5E,EAAKs1B,cAC5Bv1B,GAAe6E,KAGV5E,EAAK4mB,SAAS3Q,QAAUjW,EAAK86B,cAI7Bv6B,SAASk7B,eAAiBz7B,EAAK22B,eAAiB32B,EAAKw0B,SAH1Dz0B,GAAe6E,IAQvB,KHxiBY,GG0iBR,YADA5E,EAAK07B,kBAAkB,EAAG92B,GAG9B,KH1iBa,GG4iBT,YADA5E,EAAK07B,iBAAiB,EAAG92B,GAG7B,KH1iBW,EGsjBP,YAXI5E,EAAK4mB,SAAS0I,cACVtvB,EAAKw7B,UAAUx7B,EAAKs1B,eACpBt1B,EAAKk4B,eAAetzB,EAAG5E,EAAKs1B,cAG5Bv1B,GAAe6E,IAEV5E,EAAK4mB,SAAS3Q,QAAUjW,EAAK86B,cAClC/6B,GAAe6E,KAK3B,KH1jBiB,EG2jBjB,KH1jBc,GG4jBV,YADA5E,EAAK27B,gBAAgB/2B,GAIzB5E,EAAK+0B,gBAAkB5K,GAAU,GAAwBvlB,IACzD7E,GAAe6E,EAtFnB,CAwFJ,CAKA,OAAA2zB,CAAQ3zB,GACJ,GAAIpJ,KAAKq5B,SACL,OAEJ,MAAMj1B,EAAQpE,KAAKk/B,aACfl/B,KAAK45B,YAAcx1B,IAEvBpE,KAAK45B,UAAYx1B,EACJ,IAATA,GAIApE,KAAKi6B,gBACLn1B,OAAOqpB,aAAanuB,KAAKi6B,gBAE7Bj6B,KAAKi6B,eNxjBU,EAAClM,EAAIE,IACpBA,EAAU,EACHnpB,OAAOspB,WAAWL,EAAIE,IAEjCF,EAAG5sB,KAAK,MACD,MMmjBmB8sB,CAAQ,KAC1BjuB,KAAKi6B,eAAiB,KACtBj6B,KAAKogC,YACNpgC,KAAKorB,SAAS6I,kBATbj0B,KAAKogC,WAUb,CACA,QAAAA,GACI,MAAMh8B,EAAQpE,KAAK45B,UACf55B,KAAKorB,SAASpI,WAAW7hB,KAAKnB,KAAMoE,IACpCpE,KAAKs8B,KAAKl4B,GAEdpE,KAAKqgC,iBACLrgC,KAAKilB,QAAQ,OAAQ7gB,EACzB,CAMA,aAAAo4B,CAAc/N,EAAK8H,GACXv2B,KAAK05B,aAET15B,KAAK8/B,gBAAgBvJ,GAAQ,EACjC,CAKA,OAAA0G,CAAQ7zB,GACJ,IAAI5E,EAAOxE,KACPsgC,EAAa97B,EAAK80B,UACtB,GAAI90B,EAAKy0B,YAAcz0B,EAAK00B,WAGxB,OAFA10B,EAAK64B,YACL94B,GAAe6E,GAGf5E,EAAKi1B,cAETj1B,EAAK80B,WAAY,EACa,UAA1B90B,EAAK4mB,SAAS2I,SACdvvB,EAAKuvB,UACJuM,GACD97B,EAAKygB,QAAQ,SACZzgB,EAAKu1B,YAAY1oB,SAClB7M,EAAK84B,aACL94B,EAAK67B,iBAAiB77B,EAAK4mB,SAASmI,cAExC/uB,EAAKk5B,eACT,CAKA,MAAAV,CAAO5zB,GACH,IAA4B,IAAxBrE,SAASw7B,WAAb,CAEA,IAAI/7B,EAAOxE,KACX,GAAKwE,EAAK80B,UAAV,CAEA90B,EAAK80B,WAAY,EACjB90B,EAAKi1B,aAAc,EACnB,IAAI+G,EAAa,KACbh8B,EAAKw5B,QACLx5B,EAAKi8B,gBACLj8B,EAAKk8B,SAASl8B,EAAK2mB,MAAM9Z,QACzB7M,EAAKygB,QAAQ,SAEbzgB,EAAK4mB,SAAS3Q,QAAUjW,EAAK4mB,SAASgI,aACtC5uB,EAAK86B,WAAW,KAAMkB,GAGtBA,GAbM,CAHA,CAkBd,CAMA,cAAA9D,CAAejO,EAAK8H,GAChB,IAAInyB,EAAOI,EAAOxE,KAEdu2B,EAAOxd,eAAiBwd,EAAOxd,cAAcjS,QAAQ,qBAGrDyvB,EAAO5F,UAAU7lB,SAAS,UAC1BtG,EAAK86B,WAAW,KAAM,KACd96B,EAAK4mB,SAASuV,iBACdn8B,EAAKw5B,QAEAx5B,EAAK4mB,SAASkI,kBACnB9uB,EAAKo8B,yBAMQ,KADrBx8B,EAAQmyB,EAAOO,QAAQ1yB,SAEnBI,EAAKs6B,UAAY,KACjBt6B,EAAK66B,QAAQj7B,GACTI,EAAK4mB,SAASuV,iBACdn8B,EAAKw5B,QAEAx5B,EAAK4mB,SAASkI,kBACnB9uB,EAAKo8B,mBAEJp8B,EAAK4mB,SAASuI,cAAgBlF,EAAIniB,MAAQ,QAAQlF,KAAKqnB,EAAIniB,OAC5D9H,EAAKs7B,gBAAgBvJ,IAIrC,CAKA,SAAAyJ,CAAUzJ,GACN,SAAIv2B,KAAKg5B,QAAUzC,GAAUv2B,KAAKi7B,iBAAiBnwB,SAASyrB,GAIhE,CAMA,YAAAoG,CAAalO,EAAKjB,GACd,IAAIhpB,EAAOxE,KACX,OAAKwE,EAAK60B,UAAmC,UAAvB70B,EAAK4mB,SAAS2J,OAChCxwB,GAAekqB,GACfjqB,EAAKi8B,cAAcjT,EAAMiB,IAClB,EAGf,CAiBA,OAAAoS,CAAQz8B,GACJ,QAAKpE,KAAKorB,SAASkR,OAEft8B,KAAKquB,eAAeroB,eAAe5B,EAG3C,CAKA,IAAAk4B,CAAKl4B,GACD,MAAMI,EAAOxE,KACb,IAAKwE,EAAKq8B,QAAQz8B,GACd,OACJisB,GAAW7rB,EAAKwsB,QAASxsB,EAAK4mB,SAAS+I,cACvC3vB,EAAK0pB,UACL,MAAMpiB,EAAWtH,EAAKs8B,aAAahU,KAAKtoB,GACxCA,EAAK4mB,SAASkR,KAAKn7B,KAAKqD,EAAMJ,EAAO0H,EACzC,CAKA,YAAAg1B,CAAa35B,EAAS4rB,GAClB,MAAMvuB,EAAOxE,KACbwE,EAAK0pB,QAAU5c,KAAKC,IAAI/M,EAAK0pB,QAAU,EAAG,GAC1C1pB,EAAKs6B,UAAY,KACjBt6B,EAAKu8B,oBACLv8B,EAAK85B,aAAan3B,EAAS4rB,GAC3BvuB,EAAK67B,eAAe77B,EAAK80B,YAAc90B,EAAK+0B,eACvC/0B,EAAK0pB,SACN0C,GAAcpsB,EAAKwsB,QAASxsB,EAAK4mB,SAAS+I,cAE9C3vB,EAAKygB,QAAQ,OAAQ9d,EAAS4rB,EAClC,CACA,OAAAgB,GACI,IAAIpD,EAAY3wB,KAAKgxB,QAAQL,UACzBA,EAAU7lB,SAAS,eAEvB6lB,EAAUlwB,IAAI,aACdT,KAAKs8B,KAAK,IACd,CAKA,eAAAsE,CAAgBx8B,EAAQ,IACpB,IAAI+E,EAAQnJ,KAAKm7B,cACHhyB,EAAM/E,QAAUA,IAE1B+E,EAAM/E,MAAQA,EACdyrB,GAAa1mB,EAAO,UACpBnJ,KAAK45B,UAAYx1B,EAEzB,CAQA,QAAA48B,GACI,OAAIhhC,KAAKs6B,eAAiBt6B,KAAKmJ,MAAM4E,aAAa,YACvC/N,KAAKmrB,MAETnrB,KAAKmrB,MAAMjnB,KAAKlE,KAAKorB,SAAS6H,UACzC,CAKA,QAAA4L,CAASz6B,EAAO68B,GAEZ3S,GAAgBtuB,KADHihC,EAAS,GAAK,CAAC,UACE,KAC1BjhC,KAAKkT,MAAM+tB,GACXjhC,KAAKkhC,SAAS98B,EAAO68B,IAE7B,CAKA,WAAAE,CAAY/8B,GACM,IAAVA,IACAA,EAAQ,MACZpE,KAAKorB,SAASsI,SAAWtvB,EACzBpE,KAAK09B,cACT,CAKA,aAAA+C,CAAcjT,EAAMpkB,GAChB,IACItJ,EACA4lB,EAAG0b,EAAOphB,EAAKqhB,EACf/X,EAHA9kB,EAAOxE,KAIX,GAA2B,WAAvBwE,EAAK4mB,SAAS2J,KAAlB,CAGA,IAAKvH,EAKD,OAJAhpB,EAAKu6B,wBACDv6B,EAAK80B,WACL90B,EAAK84B,cAMb,GAAkB,WADlBx9B,EAAYsJ,GAAKA,EAAEkD,KAAK5G,gBACKipB,GAAU,WAAYvlB,IAAM5E,EAAKu1B,YAAY1oB,OAAQ,CAS9E,IARAiY,EAAO9kB,EAAK88B,iBACZF,EAAQ5/B,MAAMuE,UAAUif,QAAQ7jB,KAAKqD,EAAKs2B,QAAQvD,SAAUjO,KAC5DtJ,EAAMxe,MAAMuE,UAAUif,QAAQ7jB,KAAKqD,EAAKs2B,QAAQvD,SAAU/J,MAEtD6T,EAAOD,EACPA,EAAQphB,EACRA,EAAMqhB,GAEL3b,EAAI0b,EAAO1b,GAAK1F,EAAK0F,IACtB8H,EAAOhpB,EAAKs2B,QAAQvD,SAAS7R,IACW,IAApClhB,EAAKu1B,YAAY/U,QAAQwI,IACzBhpB,EAAK+8B,mBAAmB/T,GAGhCjpB,GAAe6E,EACnB,KACwB,UAAdtJ,GAAyB6uB,GAAU,GAAwBvlB,IAAsB,YAAdtJ,GAA2B6uB,GAAU,WAAYvlB,GACtHokB,EAAKmD,UAAU7lB,SAAS,UACxBtG,EAAKg9B,iBAAiBhU,GAGtBhpB,EAAK+8B,mBAAmB/T,IAI5BhpB,EAAKu6B,mBACLv6B,EAAK+8B,mBAAmB/T,IAG5BhpB,EAAK84B,aACA94B,EAAK80B,WACN90B,EAAKs3B,OA3CC,CA6Cd,CAKA,kBAAAyF,CAAmB/T,GACf,MAAMhpB,EAAOxE,KACPyhC,EAAcj9B,EAAKs2B,QAAQnL,cAAc,gBAC3C8R,GACA7Q,GAAc6Q,EAAa,eAC/BpR,GAAW7C,EAAM,sBACjBhpB,EAAKygB,QAAQ,cAAeuI,IACW,GAAnChpB,EAAKu1B,YAAY/U,QAAQwI,IACzBhpB,EAAKu1B,YAAY91B,KAAKupB,EAE9B,CAKA,gBAAAgU,CAAiBhU,GACb,IAAIkU,EAAM1hC,KAAK+5B,YAAY/U,QAAQwI,GACnCxtB,KAAK+5B,YAAYhV,OAAO2c,EAAK,GAC7B9Q,GAAcpD,EAAM,SACxB,CAKA,gBAAAuR,GACInO,GAAc5wB,KAAK+5B,YAAa,UAChC/5B,KAAK+5B,YAAc,EACvB,CAMA,eAAA+F,CAAgBvJ,EAAQoL,GAAS,GACzBpL,IAAWv2B,KAAK85B,eAGpB95B,KAAK+gC,oBACAxK,IAELv2B,KAAK85B,aAAevD,EACpB/E,GAAQxxB,KAAKo7B,WAAY,CAAE,wBAAyB7E,EAAOltB,aAAa,QACxEmoB,GAAQ+E,EAAQ,CAAE,gBAAiB,SACnClG,GAAWkG,EAAQ,UACfoL,GACA3hC,KAAK4hC,eAAerL,IAC5B,CAKA,cAAAqL,CAAerL,EAAQsL,GACnB,IAAKtL,EACD,OACJ,MAAMjvB,EAAUtH,KAAKi7B,iBACf6G,EAAcx6B,EAAQy6B,aACtBC,EAAY16B,EAAQ06B,WAAa,EACjCC,EAAc1L,EAAO2L,aACrBC,EAAI5L,EAAO6L,wBAAwBC,IAAM/6B,EAAQ86B,wBAAwBC,IAAML,EACjFG,EAAIF,EAAcH,EAAcE,EAChChiC,KAAK2hC,OAAOQ,EAAIL,EAAcG,EAAaJ,GAEtCM,EAAIH,GACThiC,KAAK2hC,OAAOQ,EAAGN,EAEvB,CAKA,MAAAF,CAAOK,EAAWH,GACd,MAAMv6B,EAAUtH,KAAKi7B,iBACjB4G,IACAv6B,EAAQ8oB,MAAMkS,eAAiBT,GAEnCv6B,EAAQ06B,UAAYA,EACpB16B,EAAQ8oB,MAAMkS,eAAiB,EACnC,CAKA,iBAAAvB,GACQ/gC,KAAK85B,eACLlJ,GAAc5wB,KAAK85B,aAAc,UACjCtI,GAAQxxB,KAAK85B,aAAc,CAAE,gBAAiB,QAElD95B,KAAK85B,aAAe,KACpBtI,GAAQxxB,KAAKo7B,WAAY,CAAE,wBAAyB,MACxD,CAIA,SAAAsE,GACI,MAAMl7B,EAAOxE,KACb,GAA2B,WAAvBwE,EAAK4mB,SAAS2J,KACd,OACJ,MAAMgF,EAAcv1B,EAAK+9B,kBACpBxI,EAAY1oB,SAEjB7M,EAAK84B,aACL94B,EAAKw5B,QACLx5B,EAAKu1B,YAAcA,EACnB,GAAQA,EAAcvM,IAClBhpB,EAAK+8B,mBAAmB/T,KAEhC,CAKA,UAAA8P,GACI,IAAI94B,EAAOxE,KACNwE,EAAKs2B,QAAQhwB,SAAStG,EAAK22B,iBAEhC3J,GAAQhtB,EAAK22B,cAAe,CAAE1F,YAAajxB,EAAK4mB,SAASqK,cACrDjxB,EAAKu1B,YAAY1oB,OAAS,IAAO7M,EAAK80B,WAAa90B,EAAK4mB,SAASsK,iBAAmBlxB,EAAK2mB,MAAM9Z,OAAS,GACxG7M,EAAKo8B,kBACLp8B,EAAK+0B,eAAgB,IAGjB/0B,EAAK4mB,SAASsK,iBAAmBlxB,EAAK2mB,MAAM9Z,OAAS,GACrDmgB,GAAQhtB,EAAK22B,cAAe,CAAE1F,YAAa,KAE/CjxB,EAAK+0B,eAAgB,GAEzB/0B,EAAKwsB,QAAQL,UAAU6R,OAAO,eAAgBh+B,EAAK+0B,eACvD,CAIA,UAAA2F,GACI,OAAOl/B,KAAKm7B,cAAc/2B,MAAM2C,MACpC,CAIA,KAAA+0B,GACI,IAAIt3B,EAAOxE,KACPwE,EAAKy0B,YAAcz0B,EAAK00B,aAE5B10B,EAAKi1B,aAAc,EACfj1B,EAAK22B,cAAcsH,YACnBj+B,EAAK22B,cAAcW,QAGnBt3B,EAAK42B,WAAWU,QAEpB1N,WAAW,KACP5pB,EAAKi1B,aAAc,EACnBj1B,EAAKy4B,WACN,GACP,CAKA,IAAAI,GACIr9B,KAAKo7B,WAAWiC,OAChBr9B,KAAKg9B,QACT,CAQA,gBAAAjR,CAAiBR,GACb,OAAOvrB,KAAK26B,OAAO5O,iBAAiBR,EAAOvrB,KAAK0iC,mBACpD,CAQA,gBAAAA,GACI,IAAItX,EAAWprB,KAAKorB,SAChB1pB,EAAO0pB,EAASwJ,UAIpB,MAHkC,iBAAvBxJ,EAASwJ,YAChBlzB,EAAO,CAAC,CAAEoqB,MAAOV,EAASwJ,aAEvB,CACHzI,OAAQf,EAASyJ,YACjBrI,YAAapB,EAAS0J,kBACtBpzB,KAAMA,EACNihC,QAASvX,EAASuX,QAE1B,CAMA,MAAA7X,CAAOS,GACH,IAAIxH,EAAQ6e,EACRp+B,EAAOxE,KACPmH,EAAUnH,KAAK0iC,mBAEnB,GAAIl+B,EAAK4mB,SAAST,OAEgB,mBAD9BiY,EAAiBp+B,EAAK4mB,SAAST,MAAMxpB,KAAKqD,EAAM+mB,IAE5C,MAAM,IAAI/hB,MAAM,yEAwBxB,OApBI+hB,IAAU/mB,EAAKs6B,WACft6B,EAAKs6B,UAAYvT,EAGb,aAAankB,KAAKmkB,KAClBA,EAAQ,IAEZxH,EAASvf,EAAKm2B,OAAO7P,OAAOS,EAAOvqB,OAAOC,OAAOkG,EAAS,CAAEwjB,MAAOiY,KACnEp+B,EAAKq+B,eAAiB9e,GAGtBA,EAAS/iB,OAAOC,OAAO,CAAC,EAAGuD,EAAKq+B,gBAGhCr+B,EAAK4mB,SAASuI,eACd5P,EAAOoH,MAAQpH,EAAOoH,MAAMtjB,OAAQ2lB,IAChC,IAAIsV,EAASnV,GAASH,EAAKR,IAC3B,QAAoB,OAAX8V,IAAmD,IAAhCt+B,EAAK2mB,MAAMnG,QAAQ8d,OAGhD/e,CACX,CAMA,cAAAsc,CAAe0C,GAAkB,GAC7B,IAAIrd,EAAGkD,EAAGpI,EAAGH,EAAGoX,EAAU1E,EAAWiQ,EAAMC,EAAmBC,EAC1DzoB,EACJ,MAAM0oB,EAAS,CAAC,EACVC,EAAe,GACrB,IAAI5+B,EAAOxE,KACPurB,EAAQ/mB,EAAK06B,aACjB,MAAMmE,EAAa9X,IAAU/mB,EAAKs6B,WAAuB,IAATvT,GAAiC,MAAlB/mB,EAAKs6B,UACpE,IAAIwE,EAAU9+B,EAAKsmB,OAAOS,GACtBgY,EAAgB,KAChBC,EAAgBh/B,EAAK4mB,SAASoI,aAAc,EAC5CyH,EAAmBz2B,EAAKy2B,iBACxBoI,IACAE,EAAgB/+B,EAAKs1B,gBAEjBoJ,EAAeK,EAAczlB,QAAQ,iBAI7CuC,EAAIijB,EAAQnY,MAAM9Z,OACsB,iBAA7B7M,EAAK4mB,SAASqI,aACrBpT,EAAI/O,KAAK+X,IAAIhJ,EAAG7b,EAAK4mB,SAASqI,aAE9BpT,EAAI,IACJmjB,GAAgB,GAGpB,MAAMC,EAAmB,CAAChM,EAAUsB,KAChC,IAAI2K,EAAgBP,EAAO1L,GAC3B,QAAsB5jB,IAAlB6vB,EAA6B,CAC7B,IAAIC,EAAcP,EAAaM,GAC/B,QAAoB7vB,IAAhB8vB,EACA,MAAO,CAACD,EAAeC,EAAYC,SAE3C,CACA,IAAIC,EAAiB9+B,SAAS++B,yBAG9B,OAFAJ,EAAgBN,EAAa/xB,OAC7B+xB,EAAan/B,KAAK,CAAE2/B,SAAUC,EAAgB9K,QAAOtB,aAC9C,CAACiM,EAAeG,IAG3B,IAAKne,EAAI,EAAGA,EAAIrF,EAAGqF,IAAK,CAEpB,IAAI8H,EAAO8V,EAAQnY,MAAMzF,GACzB,IAAK8H,EACD,SACJ,IAAIuW,EAAYvW,EAAKR,GACjBuJ,EAAS/xB,EAAK2C,QAAQ48B,GAC1B,QAAelwB,IAAX0iB,EACA,SACJ,IAAIyN,EAAWpW,GAASmW,GACpBE,EAAYz/B,EAAK0/B,UAAUF,GAAU,GAOzC,IALKx/B,EAAK4mB,SAASuI,cACfsQ,EAAUtT,UAAU6R,OAAO,WAAYh+B,EAAK2mB,MAAMlkB,SAAS+8B,IAE/DvM,EAAWlB,EAAO/xB,EAAK4mB,SAASiJ,gBAAkB,GAE7CzL,EAAI,EAAGpI,GADZuS,EAAYvxB,MAAM4T,QAAQqiB,GAAYA,EAAW,CAACA,KACrB1E,EAAU1hB,OAAQuX,EAAIpI,EAAGoI,IAAK,CACvD6O,EAAW1E,EAAUnK,GACrB,IAAImQ,EAAQxC,EAAOK,OACfuN,EAAgB3/B,EAAKuuB,UAAU0E,GAE/B,IAAI2M,EADR,QAAsBvwB,IAAlBswB,GAA4E,mBAAtC3/B,EAAK4mB,SAASiZ,qBAEhDD,EAAW5/B,EAAK4mB,SAASiZ,oBAAoBnf,MAAM1gB,EAAM,CAACizB,MAC1DjzB,EAAKg6B,oBAAoB4F,GAGjCD,EAAgB3/B,EAAKuuB,UAAU0E,QACT5jB,IAAlBswB,EACA1M,EAAW,GAGXsB,EAAQoL,EAAcvN,OAE1B,MAAO8M,EAAeG,GAAkBJ,EAAiBhM,EAAUsB,GAE/DnQ,EAAI,IACJqb,EAAYA,EAAU1R,WAAU,GAChCf,GAAQyS,EAAW,CAAEjX,GAAIuJ,EAAO+N,IAAM,UAAY1b,EAAG,gBAAiB,OACtEqb,EAAUtT,UAAUlwB,IAAI,aACxBmwB,GAAcqT,EAAW,UAErBz/B,EAAKs1B,cAAgBt1B,EAAKs1B,aAAahD,QAAQ1yB,OAAS2/B,GACpDb,GAAgBA,EAAapM,QAAQG,QAAUQ,EAASlwB,aACxDg8B,EAAgBU,IAI5BJ,EAAerR,YAAYyR,GACX,IAAZxM,IACA0L,EAAO1L,GAAYiM,EAE3B,CACJ,CJ7pCuB,IACvBp4B,EI8pCI9G,EAAK4mB,SAASuJ,mBACdyO,EAAa1hC,KAAK,CAACqH,EAAG4R,IACX5R,EAAEgwB,MAAQpe,EAAEoe,OAI3BiK,EAAOj+B,SAAS++B,yBAChB,GAAQV,EAAemB,IACnB,IAAIV,EAAiBU,EAAYX,SAC7BnM,EAAW8M,EAAY9M,SAC3B,IAAKoM,IAAmBA,EAAetM,SAASlmB,OAC5C,OACJ,IAAImzB,EAAgBhgC,EAAKuuB,UAAU0E,GACnC,QAAsB5jB,IAAlB2wB,EAA6B,CAC7B,IAAIC,EAAgB1/B,SAAS++B,yBACzBY,EAASlgC,EAAKmxB,OAAO,kBAAmB6O,GAC5CvV,GAAOwV,EAAeC,GACtBzV,GAAOwV,EAAeZ,GACtB,IAAIc,EAAangC,EAAKmxB,OAAO,WAAY,CAAEsB,MAAOuN,EAAer9B,QAASs9B,IAC1ExV,GAAO+T,EAAM2B,EACjB,MAEI1V,GAAO+T,EAAMa,KAGrB5I,EAAiBxL,UAAY,GAC7BR,GAAOgM,EAAkB+H,GAErBx+B,EAAK4mB,SAAS4G,YJ1rClB1mB,EI2rCoB2vB,EJ3rCNjtB,iBAAiB,kBACnCxM,MAAMuE,UAAUxD,QAAQpB,KAAKmK,EAAU,SAAUwjB,GAC7C,IAAII,EAASJ,EAAGmC,WAChB/B,EAAO6C,aAAajD,EAAGY,WAAYZ,GACnCI,EAAOrI,WACX,GIurCYyc,EAAQ/X,MAAMla,QAAUiyB,EAAQvyB,OAAOM,QACvC,GAAQiyB,EAAQvyB,OAAS6zB,IACrB5S,GAAUiJ,EAAkB2J,EAAI/Z,UAK5C,IAAIga,EAAgBC,IAChB,IAAIx9B,EAAU9C,EAAKmxB,OAAOmP,EAAU,CAAE37B,MAAOoiB,IAK7C,OAJIjkB,IACAk8B,GAAgB,EAChBvI,EAAiB8J,aAAaz9B,EAAS2zB,EAAiBvL,aAErDpoB,GAqBX,GAlBI9C,EAAK0pB,QACL2W,EAAa,WAGPrgC,EAAK4mB,SAASpI,WAAW7hB,KAAKqD,EAAM+mB,GAIZ,IAAzB+X,EAAQnY,MAAM9Z,QACnBwzB,EAAa,cAJbA,EAAa,gBAOjB5B,EAAoBz+B,EAAKwgC,UAAUzZ,MAE/B9Q,EAASoqB,EAAa,kBAG1BrgC,EAAKm1B,WAAa2J,EAAQnY,MAAM9Z,OAAS,GAAK4xB,EAC1CO,EAAe,CACf,GAAIF,EAAQnY,MAAM9Z,OAAS,GAIvB,GAHKkyB,GAAwC,WAAvB/+B,EAAK4mB,SAAS2J,MAAsClhB,MAAjBrP,EAAK2mB,MAAM,KAChEoY,EAAgB/+B,EAAK0/B,UAAU1/B,EAAK2mB,MAAM,MAEzC8P,EAAiBnwB,SAASy4B,GAAgB,CAC3C,IAAI0B,EAAe,EACfxqB,IAAWjW,EAAK4mB,SAASyI,gBACzBoR,EAAe,GAEnB1B,EAAgB/+B,EAAK0gC,aAAaD,EACtC,OAEKxqB,IACL8oB,EAAgB9oB,GAEhBsoB,IAAoBv+B,EAAKw0B,SACzBx0B,EAAKm7B,OACLn7B,EAAKo9B,eAAe2B,EAAe,SAEvC/+B,EAAKs7B,gBAAgByD,EACzB,MAEI/+B,EAAKu8B,oBACDgC,GAAmBv+B,EAAKw0B,QACxBx0B,EAAKw5B,OAAM,EAGvB,CAKA,UAAAkH,GACI,OAAOllC,KAAKi7B,iBAAiBjtB,iBAAiB,oBAClD,CAYA,SAAAgpB,CAAUljB,EAAMqxB,GAAe,GAC3B,MAAM3gC,EAAOxE,KAGb,GAAIwB,MAAM4T,QAAQtB,GAEd,OADAtP,EAAK+5B,WAAWzqB,EAAMqxB,IACf,EAEX,MAAMnhC,EAAM2pB,GAAS7Z,EAAKtP,EAAK4mB,SAASkJ,aACxC,OAAY,OAARtwB,IAAgBQ,EAAK2C,QAAQnB,eAAehC,KAGhD8P,EAAK8iB,OAAS9iB,EAAK8iB,UAAYpyB,EAAKu0B,MACpCjlB,EAAKwwB,IAAM9/B,EAAKg2B,QAAU,QAAU1mB,EAAK8iB,OACzCpyB,EAAK2C,QAAQnD,GAAO8P,EACpBtP,EAAKs6B,UAAY,KACbqG,IACA3gC,EAAKw1B,YAAYh2B,GAAOmhC,EACxB3gC,EAAKygB,QAAQ,aAAcjhB,EAAK8P,IAE7B9P,EACX,CAKA,UAAAu6B,CAAWzqB,EAAMqxB,GAAe,GAC5B,GAAQrxB,EAAOsxB,IACXplC,KAAKg3B,UAAUoO,EAAKD,IAE5B,CAIA,cAAAE,CAAevxB,GACX,OAAO9T,KAAKg3B,UAAUljB,EAC1B,CAMA,mBAAA0qB,CAAoB1qB,GAChB,IAAI9P,EAAM2pB,GAAS7Z,EAAK9T,KAAKorB,SAASsJ,qBACtC,OAAY,OAAR1wB,IAEJ8P,EAAK8iB,OAAS9iB,EAAK8iB,UAAY52B,KAAK+4B,MACpC/4B,KAAK+yB,UAAU/uB,GAAO8P,EACf9P,EACX,CAMA,cAAAshC,CAAetY,EAAIlZ,GACf,IAAIyxB,EACJzxB,EAAK9T,KAAKorB,SAASsJ,oBAAsB1H,GACrCuY,EAAYvlC,KAAKw+B,oBAAoB1qB,KACrC9T,KAAKilB,QAAQ,eAAgBsgB,EAAWzxB,EAEhD,CAKA,iBAAA0xB,CAAkBxY,GACVhtB,KAAK+yB,UAAU/sB,eAAegnB,YACvBhtB,KAAK+yB,UAAU/F,GACtBhtB,KAAKylC,aACLzlC,KAAKilB,QAAQ,kBAAmB+H,GAExC,CAIA,iBAAA0Y,GACI1lC,KAAK+yB,UAAY,CAAC,EAClB/yB,KAAKylC,aACLzlC,KAAKilB,QAAQ,iBACjB,CAOA,YAAA0gB,CAAavhC,EAAO0P,GAChB,MAAMtP,EAAOxE,KACb,IAAI4lC,EACAC,EACJ,MAAMC,EAAYnY,GAASvpB,GACrB2hC,EAAYpY,GAAS7Z,EAAKtP,EAAK4mB,SAASkJ,aAE9C,GAAkB,OAAdwR,EACA,OACJ,MAAME,EAAWxhC,EAAK2C,QAAQ2+B,GAC9B,GAAgBjyB,MAAZmyB,EACA,OACJ,GAAyB,iBAAdD,EACP,MAAM,IAAIv8B,MAAM,oCACpB,MAAM+sB,EAAS/xB,EAAK0/B,UAAU4B,GACxBtY,EAAOhpB,EAAKyhC,QAAQH,GAQ1B,GAPAhyB,EAAK8iB,OAAS9iB,EAAK8iB,QAAUoP,EAASpP,cAC/BpyB,EAAK2C,QAAQ2+B,GAGpBthC,EAAK0hC,aAAaH,GAClBvhC,EAAK2C,QAAQ4+B,GAAajyB,EAEtByiB,EAAQ,CACR,GAAI/xB,EAAKy2B,iBAAiBnwB,SAASyrB,GAAS,CACxC,MAAM4P,EAAa3hC,EAAKw2B,QAAQ,SAAUlnB,GAC1C8d,GAAY2E,EAAQ4P,GAChB3hC,EAAKs1B,eAAiBvD,GACtB/xB,EAAKs7B,gBAAgBqG,EAE7B,CACA5P,EAAO1F,QACX,CAEIrD,KAEoB,KADpBqY,EAAarhC,EAAK2mB,MAAMnG,QAAQ8gB,KAE5BthC,EAAK2mB,MAAMpG,OAAO8gB,EAAY,EAAGE,GAErCH,EAAWphC,EAAKw2B,QAAQ,OAAQlnB,GAC5B0Z,EAAKmD,UAAU7lB,SAAS,WACxBulB,GAAWuV,EAAU,UACzBhU,GAAYpE,EAAMoY,IAGtBphC,EAAKs6B,UAAY,IACrB,CAKA,YAAAsH,CAAahiC,EAAO68B,GAChB,MAAMz8B,EAAOxE,KACboE,EAAQwpB,GAASxpB,GACjBI,EAAK0hC,aAAa9hC,UACXI,EAAKw1B,YAAY51B,UACjBI,EAAK2C,QAAQ/C,GACpBI,EAAKs6B,UAAY,KACjBt6B,EAAKygB,QAAQ,gBAAiB7gB,GAC9BI,EAAK6hC,WAAWjiC,EAAO68B,EAC3B,CAIA,YAAAqF,CAAaz+B,GACT,MAAM0+B,GAAe1+B,GAAU7H,KAAKwmC,aAAa1Z,KAAK9sB,MACtDA,KAAKquB,eAAiB,CAAC,EACvBruB,KAAKg6B,YAAc,CAAC,EACpBh6B,KAAKylC,aACL,MAAMnO,EAAW,CAAC,EAClB,GAAQt3B,KAAKmH,QAAS,CAACovB,EAAQvyB,KACvBuiC,EAAYhQ,EAAQvyB,KACpBszB,EAAStzB,GAAOuyB,KAGxBv2B,KAAKmH,QAAUnH,KAAK26B,OAAOxP,MAAQmM,EACnCt3B,KAAK8+B,UAAY,KACjB9+B,KAAKilB,QAAQ,eACjB,CAMA,WAAAuhB,CAAYjQ,EAAQnyB,GAChB,OAAIpE,KAAKmrB,MAAMnG,QAAQ5gB,IAAU,CAIrC,CAMA,SAAA8/B,CAAU9/B,EAAOqW,GAAS,GACtB,MAAMqoB,EAASnV,GAASvpB,GACxB,GAAe,OAAX0+B,EACA,OAAO,KACX,MAAMvM,EAASv2B,KAAKmH,QAAQ27B,GAC5B,GAAcjvB,MAAV0iB,EAAqB,CACrB,GAAIA,EAAOkQ,KACP,OAAOlQ,EAAOkQ,KAElB,GAAIhsB,EACA,OAAOza,KAAKg7B,QAAQ,SAAUzE,EAEtC,CACA,OAAO,IACX,CAMA,WAAAsJ,CAAYtJ,EAAQpJ,EAAW7gB,EAAO,UAClC,IAAiBkc,EACjB,IAAK+N,EACD,OAAO,KAGP/N,EADQ,QAARlc,EAJOtM,KAKIuiC,kBALJviC,KAQIi7B,iBAAiBjtB,iBAAiB,qBAEjD,IAAK,IAAI0X,EAAI,EAAGA,EAAI8C,EAAInX,OAAQqU,IAC5B,GAAI8C,EAAI9C,IAAM6Q,EAGd,OAAIpJ,EAAY,EACL3E,EAAI9C,EAAI,GAEZ8C,EAAI9C,EAAI,GAEnB,OAAO,IACX,CAMA,OAAAugB,CAAQzY,GACJ,GAAmB,iBAARA,EACP,OAAOA,EAEX,IAAIppB,EAAQupB,GAASH,GACrB,OAAiB,OAAVppB,EACDpE,KAAK86B,QAAQnL,cAAc,gBAAgBX,GAAW5qB,QACtD,IACV,CAMA,QAAA88B,CAASx+B,EAAQu+B,GACb,IAAIz8B,EAAOxE,KACPmrB,EAAQ3pB,MAAM4T,QAAQ1S,GAAUA,EAAS,CAACA,GAE9C,MAAMgkC,GADNvb,EAAQA,EAAMtjB,OAAO8+B,IAAgC,IAA3BniC,EAAK2mB,MAAMnG,QAAQ2hB,KACrBxb,EAAM9Z,OAAS,GACvC8Z,EAAM5oB,QAAQirB,IACVhpB,EAAKoiC,UAAapZ,IAASkZ,EAC3BliC,EAAK66B,QAAQ7R,EAAMyT,IAE3B,CAMA,OAAA5B,CAAQj7B,EAAO68B,GAEX3S,GAAgBtuB,KADHihC,EAAS,GAAK,CAAC,SAAU,kBACR,KAC1B,IAAIzT,EAAMqZ,EACV,MAAMriC,EAAOxE,KACPk7B,EAAY12B,EAAK4mB,SAAS2J,KAC1B+N,EAASnV,GAASvpB,GACxB,KAAI0+B,IAA0C,IAAhCt+B,EAAK2mB,MAAMnG,QAAQ8d,KACX,WAAd5H,GACA12B,EAAKw5B,QAES,WAAd9C,GAA2B12B,EAAK4mB,SAASwI,cAIlC,OAAXkP,GAAoBt+B,EAAK2C,QAAQnB,eAAe88B,KAElC,WAAd5H,GACA12B,EAAK0O,MAAM+tB,GACG,UAAd/F,IAAyB12B,EAAKsiC,UAAlC,CASA,GAPAtZ,EAAOhpB,EAAKw2B,QAAQ,OAAQx2B,EAAK2C,QAAQ27B,IACrCt+B,EAAKs2B,QAAQhwB,SAAS0iB,KACtBA,EAAOA,EAAK+E,WAAU,IAE1BsU,EAAUriC,EAAKsiC,SACftiC,EAAK2mB,MAAMpG,OAAOvgB,EAAKq1B,SAAU,EAAGiJ,GACpCt+B,EAAKuiC,cAAcvZ,GACfhpB,EAAKg1B,QAAS,CAEd,IAAKh1B,EAAKoiC,WAAapiC,EAAK4mB,SAASuI,aAAc,CAC/C,IAAI4C,EAAS/xB,EAAK0/B,UAAUpB,GACxBlD,EAAOp7B,EAAKq7B,YAAYtJ,EAAQ,GAChCqJ,GACAp7B,EAAKs7B,gBAAgBF,EAE7B,CAEIp7B,EAAK4mB,SAASkI,kBACd9uB,EAAKo8B,kBAIJp8B,EAAKoiC,WAAcpiC,EAAK4mB,SAASuV,kBAClCn8B,EAAK67B,eAAe77B,EAAK80B,WAA2B,WAAd4B,GAGJ,GAAlC12B,EAAK4mB,SAASuV,kBAA6Bn8B,EAAKsiC,SAChDtiC,EAAKw5B,QAECx5B,EAAKoiC,WACXpiC,EAAKg5B,mBAETh5B,EAAKygB,QAAQ,WAAY6d,EAAQtV,GAC5BhpB,EAAKoiC,WACNpiC,EAAKwiC,oBAAoB,CAAE/F,OAAQA,GAE3C,GACKz8B,EAAKoiC,YAAeC,GAAWriC,EAAKsiC,YACrCtiC,EAAK84B,aACL94B,EAAKk5B,eAxCC,GA2ClB,CAMA,UAAA2I,CAAW7Y,EAAO,KAAMyT,GACpB,MAAMz8B,EAAOxE,KAEb,KADAwtB,EAAOhpB,EAAKyhC,QAAQzY,IAEhB,OACJ,IAAI9H,EAAGgc,EACP,MAAMt9B,EAAQopB,EAAKsJ,QAAQ1yB,MAC3BshB,EAAI0L,GAAU5D,GACdA,EAAKqD,SACDrD,EAAKmD,UAAU7lB,SAAS,YACxB42B,EAAMl9B,EAAKu1B,YAAY/U,QAAQwI,GAC/BhpB,EAAKu1B,YAAYhV,OAAO2c,EAAK,GAC7B9Q,GAAcpD,EAAM,WAExBhpB,EAAK2mB,MAAMpG,OAAOW,EAAG,GACrBlhB,EAAKs6B,UAAY,MACZt6B,EAAK4mB,SAAS+H,SAAW3uB,EAAKw1B,YAAYh0B,eAAe5B,IAC1DI,EAAK4hC,aAAahiC,EAAO68B,GAEzBvb,EAAIlhB,EAAKq1B,UACTr1B,EAAKk8B,SAASl8B,EAAKq1B,SAAW,GAElCr1B,EAAKwiC,oBAAoB,CAAE/F,OAAQA,IACnCz8B,EAAKk5B,eACLl5B,EAAKg5B,mBACLh5B,EAAKygB,QAAQ,cAAe7gB,EAAOopB,EACvC,CAUA,UAAA8R,CAAWn2B,EAAQ,KAAM2C,EAAW,QAEP,IAArB0O,UAAUnJ,SACVvF,EAAW0O,UAAU,IAEF,mBAAZ1O,IACPA,EAAW,QAEf,IAEIm7B,EAFAziC,EAAOxE,KACPknC,EAAQ1iC,EAAKq1B,SAGjB,GADA1wB,EAAQA,GAAS3E,EAAK06B,cACjB16B,EAAKwgC,UAAU77B,GAAQ,CAQxB,OAPawkB,GAASxkB,IAEdnJ,KAAKmH,QAAQgC,IACb3E,EAAK66B,QAAQl2B,GAGrB2C,KACO,CACX,CACAtH,EAAK2iC,OACL,IAAIC,GAAU,EACV3sB,EAAU3G,IAEV,GADAtP,EAAK6iC,UACAvzB,GAAwB,iBAATA,EAChB,OAAOhI,IACX,IAAI1H,EAAQupB,GAAS7Z,EAAKtP,EAAK4mB,SAASkJ,aACxC,GAAqB,iBAAVlwB,EACP,OAAO0H,IAEXtH,EAAKo8B,kBACLp8B,EAAKwyB,UAAUljB,GAAM,GACrBtP,EAAKk8B,SAASwG,GACd1iC,EAAK66B,QAAQj7B,GACb0H,EAASgI,GACTszB,GAAU,GAcd,OAXIH,EADgC,mBAAzBziC,EAAK4mB,SAAS3Q,OACZjW,EAAK4mB,SAAS3Q,OAAOtZ,KAAKnB,KAAMmJ,EAAOsR,GAGvC,CACL,CAACjW,EAAK4mB,SAASmJ,YAAaprB,EAC5B,CAAC3E,EAAK4mB,SAASkJ,YAAanrB,GAG/Bi+B,GACD3sB,EAAOwsB,IAEJ,CACX,CAIA,YAAAlJ,GACI,IAAIv5B,EAAOxE,KACXwE,EAAKs6B,UAAY,KACbt6B,EAAKg1B,SACLh1B,EAAK08B,SAAS18B,EAAK2mB,OAEvB3mB,EAAKwiC,sBACLxiC,EAAKk5B,cACT,CAKA,YAAAA,GACI,MAAMl5B,EAAOxE,KACbwE,EAAK8iC,uBACL,MAAMR,EAAStiC,EAAKsiC,SACdzN,EAAW70B,EAAK60B,SACtB70B,EAAKwsB,QAAQL,UAAU6R,OAAO,MAAOh+B,EAAK+1B,KAC1C,MAAMgN,EAAiB/iC,EAAKwsB,QAAQL,ULxnDf,IAACrG,EKynDtBid,EAAe/E,OAAO,QAASh+B,EAAK80B,WACpCiO,EAAe/E,OAAO,WAAYh+B,EAAKy0B,YACvCsO,EAAe/E,OAAO,WAAYh+B,EAAK00B,YACvCqO,EAAe/E,OAAO,WAAYh+B,EAAKi2B,YACvC8M,EAAe/E,OAAO,WAAYh+B,EAAK40B,SACvCmO,EAAe/E,OAAO,SAAUnJ,GAChCkO,EAAe/E,OAAO,OAAQsE,GAC9BS,EAAe/E,OAAO,eAAgBh+B,EAAK80B,YAAc90B,EAAK+0B,eAC9DgO,EAAe/E,OAAO,kBAAmBh+B,EAAKw0B,QAC9CuO,EAAe/E,OAAO,eLloDAlY,EKkoD6B9lB,EAAK2C,QLjoDxB,IAA5BnG,OAAO+C,KAAKumB,GAAKjZ,SKkoDrBk2B,EAAe/E,OAAO,YAAah+B,EAAK2mB,MAAM9Z,OAAS,EAC3D,CASA,oBAAAi2B,GACI,IAAI9iC,EAAOxE,KACNwE,EAAK2E,MAAMq+B,WAGhBhjC,EAAK40B,QAAU50B,EAAK2E,MAAMq+B,SAASC,MACnCjjC,EAAK20B,WAAa30B,EAAK40B,QAC3B,CAOA,MAAA0N,GACI,OAAkC,OAA3B9mC,KAAKorB,SAASsI,UAAqB1zB,KAAKmrB,MAAM9Z,QAAUrR,KAAKorB,SAASsI,QACjF,CAMA,mBAAAsT,CAAoBU,EAAO,CAAC,GACxB,MAAMljC,EAAOxE,KACb,IAAIu2B,EAAQqF,EACZ,MAAM+L,EAAenjC,EAAK2E,MAAMwmB,cAAc,oBAC9C,GAAInrB,EAAK81B,cAAe,CACpB,MAAMhD,EAAW,GACXsQ,EAAepjC,EAAK2E,MAAM6E,iBAAiB,kBAAkBqD,OACnE,SAASw2B,EAAY5D,EAAW7/B,EAAOw3B,GAenC,OAdKqI,IACDA,EAAY9U,GAAO,kBAAoBtB,GAAYzpB,GAAS,KAAOypB,GAAY+N,GAAS,cAIxFqI,GAAa0D,GACbnjC,EAAK2E,MAAM8lB,OAAOgV,GAEtB3M,EAASrzB,KAAKggC,IAGVA,GAAa0D,GAAgBC,EAAe,KAC5C3D,EAAU3M,UAAW,GAElB2M,CACX,CAEAz/B,EAAK2E,MAAM6E,iBAAiB,kBAAkBzL,QAAS0hC,IACnDA,EAAU3M,UAAW,IAGA,GAArB9yB,EAAK2mB,MAAM9Z,QAAqC,UAAtB7M,EAAK4mB,SAAS2J,KACxC8S,EAAYF,EAAc,GAAI,IAI9BnjC,EAAK2mB,MAAM5oB,QAAS6B,IAGhB,GAFAmyB,EAAS/xB,EAAK2C,QAAQ/C,GACtBw3B,EAAQrF,EAAO/xB,EAAK4mB,SAASmJ,aAAe,GACxC+C,EAASrwB,SAASsvB,EAAOc,SAAU,CAEnCwQ,EADkBrjC,EAAK2E,MAAMwmB,cAAc,iBAAiBX,GAAW5qB,sBAChDA,EAAOw3B,EAClC,MAEIrF,EAAOc,QAAUwQ,EAAYtR,EAAOc,QAASjzB,EAAOw3B,IAIpE,MAEIp3B,EAAK2E,MAAM/E,MAAQI,EAAKw8B,WAExBx8B,EAAKg1B,UACAkO,EAAKzG,QACNz8B,EAAKygB,QAAQ,SAAUzgB,EAAKw8B,YAGxC,CAKA,IAAArB,GACI,IAAIn7B,EAAOxE,KACPwE,EAAK60B,UAAY70B,EAAKw0B,QAAkC,UAAvBx0B,EAAK4mB,SAAS2J,MAAoBvwB,EAAKsiC,WAE5EtiC,EAAKw0B,QAAS,EACdxH,GAAQhtB,EAAK42B,WAAY,CAAE,gBAAiB,SAC5C52B,EAAKk5B,eACLxN,GAAS1rB,EAAKu2B,SAAU,CAAE+M,WAAY,SAAUC,QAAS,UACzDvjC,EAAKg5B,mBACLtN,GAAS1rB,EAAKu2B,SAAU,CAAE+M,WAAY,UAAWC,QAAS,UAC1DvjC,EAAKs3B,QACLt3B,EAAKygB,QAAQ,gBAAiBzgB,EAAKu2B,UACvC,CAIA,KAAAiD,CAAM4C,GAAkB,GACpB,IAAIp8B,EAAOxE,KACPilB,EAAUzgB,EAAKw0B,OACf4H,IAEAp8B,EAAKo8B,kBACsB,WAAvBp8B,EAAK4mB,SAAS2J,MAAqBvwB,EAAK2mB,MAAM9Z,QAC9C7M,EAAK84B,cAGb94B,EAAKw0B,QAAS,EACdxH,GAAQhtB,EAAK42B,WAAY,CAAE,gBAAiB,UAC5ClL,GAAS1rB,EAAKu2B,SAAU,CAAEgN,QAAS,SAC/BvjC,EAAK4mB,SAASuI,cACdnvB,EAAKu8B,oBAETv8B,EAAKk5B,eACDzY,GACAzgB,EAAKygB,QAAQ,iBAAkBzgB,EAAKu2B,SAC5C,CAMA,gBAAAyC,GACI,GAAqC,SAAjCx9B,KAAKorB,SAASkK,eAAlB,CAGA,IAAIzrB,EAAU7J,KAAK86B,QACfkN,EAAOn+B,EAAQu4B,wBACfC,EAAMx4B,EAAQq4B,aAAe8F,EAAK3F,IAAMv9B,OAAOmjC,QAC/CtmC,EAAOqmC,EAAKrmC,KAAOmD,OAAOojC,QAC9BhY,GAASlwB,KAAK+6B,SAAU,CACpBkB,MAAO+L,EAAK/L,MAAQ,KACpBoG,IAAKA,EAAM,KACX1gC,KAAMA,EAAO,MARjB,CAUJ,CAMA,KAAAuR,CAAM+tB,GACF,IAAIz8B,EAAOxE,KACX,GAAKwE,EAAK2mB,MAAM9Z,OAAhB,CAEA,IAAI8Z,EAAQ3mB,EAAK+9B,kBACjB,GAAQpX,EAAQqC,IACZhpB,EAAK6hC,WAAW7Y,GAAM,KAE1BhpB,EAAK84B,aACA2D,GACDz8B,EAAKwiC,sBACTxiC,EAAKygB,QAAQ,QARH,CASd,CAMA,aAAA8hB,CAAcjY,GACV,MAAMtqB,EAAOxE,KACPknC,EAAQ1iC,EAAKq1B,SACbn1B,EAASF,EAAKs2B,QACpBp2B,EAAOqgC,aAAajW,EAAIpqB,EAAO6yB,SAAS2P,IAAU,MAClD1iC,EAAKk8B,SAASwG,EAAQ,EAC1B,CAKA,eAAA/G,CAAgB/2B,GACZ,IAAI+jB,EAAWgb,EAAWjB,EAAOkB,ENt1DZj/B,EMu1DjB3E,EAAOxE,KACXmtB,EAAa/jB,GHv7DQ,IGu7DHA,EAAEo2B,SAAwC,EAAI,EAChE2I,ENx1DG,CACH9lC,OAFqB8G,EMy1DI3E,EAAK22B,eNv1DjBkN,gBAAkB,EAC/Bh3B,QAASlI,EAAMm/B,cAAgB,IAAMn/B,EAAMk/B,gBAAkB,IMw1D7D,MAAME,EAAW,GACjB,GAAI/jC,EAAKu1B,YAAY1oB,OACjB+2B,EAAOlX,GAAQ1sB,EAAKu1B,YAAa5M,GACjC+Z,EAAQ9V,GAAUgX,GACdjb,EAAY,GACZ+Z,IAEJ,GAAQ1iC,EAAKu1B,YAAcvM,GAAS+a,EAAStkC,KAAKupB,SAEjD,IAAKhpB,EAAK80B,WAAoC,WAAvB90B,EAAK4mB,SAAS2J,OAAsBvwB,EAAK2mB,MAAM9Z,OAAQ,CAC/E,MAAM8Z,EAAQ3mB,EAAK+9B,kBACnB,IAAIiG,EACArb,EAAY,GAAyB,IAApBgb,EAAU9lC,OAAoC,IAArB8lC,EAAU92B,OACpDm3B,EAAUrd,EAAM3mB,EAAKq1B,SAAW,GAE3B1M,EAAY,GAAKgb,EAAU9lC,QAAUmC,EAAK06B,aAAa7tB,SAC5Dm3B,EAAUrd,EAAM3mB,EAAKq1B,gBAEThmB,IAAZ20B,GACAD,EAAStkC,KAAKukC,EAEtB,CACA,IAAKhkC,EAAKikC,aAAaF,EAAUn/B,GAC7B,OAAO,EAOX,IALA7E,GAAe6E,GAAG,QAEG,IAAV89B,GACP1iC,EAAKk8B,SAASwG,GAEXqB,EAASl3B,QACZ7M,EAAK6hC,WAAWkC,EAAS5e,OAK7B,OAHAnlB,EAAK84B,aACL94B,EAAKg5B,mBACLh5B,EAAK67B,gBAAe,IACb,CACX,CAIA,YAAAoI,CAAatd,EAAOsD,GAChB,MAAM/rB,EAASyoB,EAAMtoB,IAAI2qB,GAAQA,EAAKsJ,QAAQ1yB,OAE9C,SAAK1B,EAAO2O,QAA6C,mBAA3BrR,KAAKorB,SAASsd,WAA8E,IAAnD1oC,KAAKorB,SAASsd,SAASvnC,KAAKnB,KAAM0C,EAAQ+rB,GAIrH,CAQA,gBAAAyR,CAAiB/S,EAAW/jB,GACxB,IAAIq4B,EAAakH,EAAUnkC,EAAOxE,KAC9BwE,EAAK+1B,MACLpN,IAAc,GACd3oB,EAAK06B,aAAa7tB,SAGlBsd,GAAU,GAAwBvlB,IAAMulB,GAAU,WAAYvlB,IAOtDu/B,GANRlH,EAAcj9B,EAAK88B,cAAcnU,IAExBsU,EAAY9Q,UAAU7lB,SAAS,UAIrBtG,EAAKq7B,YAAY4B,EAAatU,EAAW,QAHzCsU,EAOVtU,EAAY,EACN3oB,EAAK22B,cAAcyN,mBAGnBpkC,EAAK22B,cAAc5J,0BAG1BoX,EAAShY,UAAU7lB,SAAS,WAC5BtG,EAAKg9B,iBAAiBC,GAE1Bj9B,EAAK+8B,mBAAmBoH,IAK5BnkC,EAAKqkC,UAAU1b,GAEvB,CACA,SAAA0b,CAAU1b,GAAa,CAKvB,aAAAmU,CAAcnU,GACV,IAAIsU,EAAczhC,KAAK86B,QAAQnL,cAAc,gBAC7C,GAAI8R,EACA,OAAOA,EAEX,IAAI1d,EAAS/jB,KAAK86B,QAAQ9sB,iBAAiB,WAC3C,OAAI+V,EACOmN,GAAQnN,EAAQoJ,QAD3B,CAGJ,CASA,QAAAuT,CAASoI,GACL9oC,KAAK65B,SAAW75B,KAAKmrB,MAAM9Z,MAC/B,CAKA,eAAAkxB,GACI,OAAO/gC,MAAMC,KAAKzB,KAAK86B,QAAQ9sB,iBAAiB,kBACpD,CAKA,IAAAm5B,GACInnC,KAAK+oC,WAAU,EACnB,CAIA,MAAA1B,GACIrnC,KAAK+oC,WAAU,EACnB,CAIA,SAAAA,CAAU5B,EAAOnnC,KAAKk5B,YAAcl5B,KAAKi5B,YACrCj5B,KAAKq5B,SAAW8N,EAChBnnC,KAAK09B,cACT,CAKA,OAAAO,GACIj+B,KAAKgpC,aAAY,GACjBhpC,KAAKg+B,OACT,CAKA,MAAAI,GACIp+B,KAAKgpC,aAAY,EACrB,CACA,WAAAA,CAAY5R,GACRp3B,KAAKo7B,WAAWf,SAAWjD,GAAY,EAAIp3B,KAAKq6B,SAChDr6B,KAAKi5B,WAAa7B,EAClBp3B,KAAKmJ,MAAMiuB,SAAWA,EACtBp3B,KAAKm7B,cAAc/D,SAAWA,EAC9Bp3B,KAAK+oC,WACT,CACA,WAAA5K,CAAYjF,GACRl5B,KAAKk5B,WAAaA,EAClBl5B,KAAKmJ,MAAM+0B,SAAWhF,EACtBl5B,KAAKm7B,cAAc+C,SAAWhF,EAC9Bl5B,KAAK+oC,WACT,CAMA,OAAAE,GACI,IAAIzkC,EAAOxE,KACP49B,EAAiBp5B,EAAKo5B,eAC1Bp5B,EAAKygB,QAAQ,WACbzgB,EAAKsgB,MACLtgB,EAAKwsB,QAAQH,SACbrsB,EAAKu2B,SAASlK,SACdrsB,EAAK2E,MAAMsmB,UAAYmO,EAAenO,UACtCjrB,EAAK2E,MAAMkxB,SAAWuD,EAAevD,SACrCzJ,GAAcpsB,EAAK2E,MAAO,cAAe,wBACzC3E,EAAKm5B,kBACEn5B,EAAK2E,MAAM+wB,SACtB,CAMA,MAAAvE,CAAOuT,EAAcp1B,GACjB,IAAIkZ,EAAIgW,EACR,MAAMx+B,EAAOxE,KACb,GAAkD,mBAAvCA,KAAKorB,SAASuK,OAAOuT,GAC5B,OAAO,KAIX,KADAlG,EAAOx+B,EAAK4mB,SAASuK,OAAOuT,GAAc/nC,KAAKnB,KAAM8T,EAAM+Z,KAEvD,OAAO,KAmBX,GAjBAmV,EAAO7T,GAAO6T,GAEO,WAAjBkG,GAA8C,kBAAjBA,EACzBp1B,EAAKtP,EAAK4mB,SAASoJ,eACnBhD,GAAQwR,EAAM,CAAE,gBAAiB,SAGjCxR,GAAQwR,EAAM,CAAE,kBAAmB,KAGjB,aAAjBkG,IACLlc,EAAKlZ,EAAKmjB,MAAMzyB,EAAK4mB,SAASsJ,oBAC9BlD,GAAQwR,EAAM,CAAE,aAAchW,IAC1BlZ,EAAKmjB,MAAMzyB,EAAK4mB,SAASoJ,gBACzBhD,GAAQwR,EAAM,CAAE,gBAAiB,MAGpB,WAAjBkG,GAA8C,SAAjBA,EAAyB,CACtD,MAAM9kC,EAAQwpB,GAAS9Z,EAAKtP,EAAK4mB,SAASkJ,aAC1C9C,GAAQwR,EAAM,CAAE,aAAc5+B,IAET,SAAjB8kC,GACA7Y,GAAW2S,EAAMx+B,EAAK4mB,SAASgK,WAC/B5D,GAAQwR,EAAM,CAAE,eAAgB,OAGhC3S,GAAW2S,EAAMx+B,EAAK4mB,SAASiK,aAC/B7D,GAAQwR,EAAM,CACVvH,KAAM,SACNzO,GAAIlZ,EAAKwwB,MAGbxwB,EAAK2yB,KAAOzD,EACZx+B,EAAK2C,QAAQ/C,GAAS0P,EAE9B,CACA,OAAOkvB,CACX,CAKA,OAAAhI,CAAQkO,EAAcp1B,GAClB,MAAMkvB,EAAOhjC,KAAK21B,OAAOuT,EAAcp1B,GACvC,GAAY,MAARkvB,EACA,KAAM,uBAEV,OAAOA,CACX,CAOA,UAAAyC,GACI,GAAQzlC,KAAKmH,QAAUovB,IACfA,EAAOkQ,OACPlQ,EAAOkQ,KAAK5V,gBACL0F,EAAOkQ,OAG1B,CAKA,YAAAP,CAAa9hC,GACT,MAAM6/B,EAAYjkC,KAAKkkC,UAAU9/B,GAC7B6/B,GACAA,EAAUpT,QAClB,CAMA,SAAAmU,CAAU77B,GACN,OAAOnJ,KAAKorB,SAAS3Q,QAAWtR,EAAMkI,OAAS,GAAMrR,KAAKorB,SAASiI,aAAalyB,KAAKnB,KAAMmJ,EAC/F,CAQA,IAAAggC,CAAKC,EAAMh/B,EAAQi/B,GACf,IAAI7kC,EAAOxE,KACPspC,EAAc9kC,EAAK4F,GACvB5F,EAAK4F,GAAU,WACX,IAAI2Z,EAAQwlB,EAKZ,MAJa,UAATH,IACArlB,EAASulB,EAAYpkB,MAAM1gB,EAAMgW,YAErC+uB,EAAaF,EAAOnkB,MAAM1gB,EAAMgW,WACnB,YAAT4uB,EACOG,GAEE,WAATH,IACArlB,EAASulB,EAAYpkB,MAAM1gB,EAAMgW,YAE9BuJ,EACX,CACJ,EEruEJ,MAIM,GAAW3f,GACM,kBAAVA,EAA4BA,EAAQ,IAAM,IAC9CA,EAAQ,GAOX,GAAiB,CAACqqB,EAAKhsB,GAAO,KAC9BgsB,IACFA,EAAIlqB,iBACA9B,GACFgsB,EAAIpqB,oBAyBJ,GAAeurB,GACA,iBAARA,GAAoBA,EAAI5K,QAAQ,MAAQ,ECnDrD,MAcM,GAAe4K,GACA,iBAARA,GAAoBA,EAAI5K,QAAQ,MAAQ,ECFrD,MAaM,GAAW,CAACtgB,EAAQ4H,EAAMR,EAAU3E,KACxCzC,EAAOtE,iBAAiBkM,EAAMR,EAAU3E,IA6CpC,GAAeyoB,GACA,iBAARA,GAAoBA,EAAI5K,QAAQ,MAAQ,EAU/C,GAAU,CAAC8J,EAAI2C,KA3CL,EAAC7rB,EAAQkG,KACvB,GAAItK,MAAM4T,QAAQxP,GAChBA,EAAOrD,QAAQuJ,QAEf,IAAK,IAAI9H,KAAO4B,EACVA,EAAOI,eAAehC,IACxB8H,EAASlG,EAAO5B,GAAMA,IAsC5B,CAAQytB,EAAO,CAACC,EAAKC,KACR,MAAPD,EACF5C,EAAGnT,gBAAgBgW,GAEnB7C,EAAGpT,aAAaiW,EAAM,GAAKD,MC3EjC,MA6BM,GAAe9B,GACA,iBAARA,GAAoBA,EAAI5K,QAAQ,MAAQ,ECxBrD,MA8BM,GAAe/L,IACnB,IAAI4E,EAAU,GASd,MAxCc,EAACjY,EAAQkG,KACvB,GAAItK,MAAM4T,QAAQxP,GAChBA,EAAOrD,QAAQuJ,QAEf,IAAK,IAAI9H,KAAO4B,EACVA,EAAOI,eAAehC,IACxB8H,EAASlG,EAAO5B,GAAMA,IA0B5B,CAAQiV,EAAM6X,IACY,iBAAbA,IACTA,EAAWA,EAAS/pB,OAAOG,MAAM,iBAE/B1F,MAAM4T,QAAQ0b,KAChBjT,EAAUA,EAAQ/a,OAAOguB,MAGtBjT,EAAQhW,OAAO0a,UAOlB,GAAcqN,IACbpuB,MAAM4T,QAAQwa,KACjBA,EAAM,CAACA,IAEFA,GC5ET,MAoEM,GAASrE,IACb,GAAIA,EAAM6D,OACR,OAAO7D,EAAM,GAEf,GAAIA,aAAiB8D,YACnB,OAAO9D,EAET,GAAI,GAAaA,GAAQ,CACvB,IAAIgE,EAAMxqB,SAASyqB,cAAc,YAEjC,OADAD,EAAIE,UAAYlE,EAAMxkB,OACfwoB,EAAIjoB,QAAQooB,UACrB,CACA,OAAO3qB,SAAS4qB,cAAcpE,IAE1B,GAAeqE,GACA,iBAARA,GAAoBA,EAAI5K,QAAQ,MAAQ,EAwB/C,GAAe/L,IACnB,IAAI4E,EAAU,GASd,MAnEc,EAACjY,EAAQkG,KACvB,GAAItK,MAAM4T,QAAQxP,GAChBA,EAAOrD,QAAQuJ,QAEf,IAAK,IAAI9H,KAAO4B,EACVA,EAAOI,eAAehC,IACxB8H,EAASlG,EAAO5B,GAAMA,IAqD5B,CAAQiV,EAAM6X,IACY,iBAAbA,IACTA,EAAWA,EAAS/pB,OAAOG,MAAM,iBAE/B1F,MAAM4T,QAAQ0b,KAChBjT,EAAUA,EAAQ/a,OAAOguB,MAGtBjT,EAAQhW,OAAO0a,UAOlB,GAAcqN,IACbpuB,MAAM4T,QAAQwa,KACjBA,EAAM,CAACA,IAEFA,GC7GT,MAAM,GAAW,CAAClrB,EAAQ4H,EAAMR,EAAU3E,KACxCzC,EAAOtE,iBAAiBkM,EAAMR,EAAU3E,ICD1C,MAQM,GAAiB,CAACsnB,EAAKhsB,GAAO,KAC9BgsB,IACFA,EAAIlqB,iBACA9B,GACFgsB,EAAIpqB,oBASJ,GAAW,CAACK,EAAQ4H,EAAMR,EAAU3E,KACxCzC,EAAOtE,iBAAiBkM,EAAMR,EAAU3E,IASpC,GAASokB,IACb,GAAIA,EAAM6D,OACR,OAAO7D,EAAM,GAEf,GAAIA,aAAiB8D,YACnB,OAAO9D,EAET,GAAI,GAAaA,GAAQ,CACvB,IAAIgE,EAAMxqB,SAASyqB,cAAc,YAEjC,OADAD,EAAIE,UAAYlE,EAAMxkB,OACfwoB,EAAIjoB,QAAQooB,UACrB,CACA,OAAO3qB,SAAS4qB,cAAcpE,IAE1B,GAAeqE,GACA,iBAARA,GAAoBA,EAAI5K,QAAQ,MAAQ,ECxCrD,MA8BM,GAAe/L,IACnB,IAAI4E,EAAU,GASd,MAxCc,EAACjY,EAAQkG,KACvB,GAAItK,MAAM4T,QAAQxP,GAChBA,EAAOrD,QAAQuJ,QAEf,IAAK,IAAI9H,KAAO4B,EACVA,EAAOI,eAAehC,IACxB8H,EAASlG,EAAO5B,GAAMA,IA0B5B,CAAQiV,EAAM6X,IACY,iBAAbA,IACTA,EAAWA,EAAS/pB,OAAOG,MAAM,iBAE/B1F,MAAM4T,QAAQ0b,KAChBjT,EAAUA,EAAQ/a,OAAOguB,MAGtBjT,EAAQhW,OAAO0a,UAOlB,GAAcqN,IACbpuB,MAAM4T,QAAQwa,KACjBA,EAAM,CAACA,IAEFA,GClEToI,GAAUK,OAAO,kBC4BjB,WAnBiB,IAAC3zB,EAAQ4H,EAAMR,EAAU3E,EAAxBzC,EAoBP1E,KAAKmJ,MApBUmD,EAoBH,SApBSR,EAoBC,KAC7B9L,KAAK89B,QApBPp5B,EAAOtE,iBAAiBkM,EAAMR,EAAU3E,EAsB1C,GD/BA6wB,GAAUK,OAAO,mBTmEjB,SAAiB2B,GACf,IAAIx1B,EAAOxE,KACPwpC,EAAsBhlC,EAAKk4B,eAC/Bl4B,EAAK4mB,SAASuI,cAAe,EAC7B,MAAM8V,EAAYzoC,OAAOC,OAAO,CAE9BkxB,UAAW,qBAEXuX,uBAAmB71B,EACnB81B,yBAAqB91B,GACpBmmB,GACH,IAAI4P,EAAgB,SAAuBC,EAAUC,GAC/CA,GACFD,EAASE,SAAU,EACfN,EAAUE,qBACZE,EAASlZ,UAAUE,UAAU4Y,EAAUE,qBAErCF,EAAUC,mBACZG,EAASlZ,UAAUlwB,OAAOgpC,EAAUC,qBAGtCG,EAASE,SAAU,EACfN,EAAUC,mBACZG,EAASlZ,UAAUE,UAAU4Y,EAAUC,mBAErCD,EAAUE,qBACZE,EAASlZ,UAAUlwB,OAAOgpC,EAAUE,qBAG1C,EAGIK,EAAiB,SAAwBzT,GAC3CnI,WAAW,KACT,IAAIyb,EAAWtT,EAAO5G,cAAc,SAAW8Z,EAAUtX,WACrD0X,aAAoBI,kBACtBL,EAAcC,EAAUtT,EAAO5F,UAAU7lB,SAAS,cAEnD,EACL,EAGAtG,EAAK2kC,KAAK,QAAS,iBAAkB,KACnC,IAAIe,EAAqB1lC,EAAK4mB,SAASuK,OAAOY,OAC9C/xB,EAAK4mB,SAASuK,OAAOY,OAAS,CAACziB,EAAM+Z,KACnC,IAAIsc,EAjFK5e,KACb,GAAIA,EAAM6D,OACR,OAAO7D,EAAM,GAEf,GAAIA,aAAiB8D,YACnB,OAAO9D,EAET,GAAI,GAAaA,GAAQ,CACvB,IAAIgE,EAAMxqB,SAASyqB,cAAc,YAEjC,OADAD,EAAIE,UAAYlE,EAAMxkB,OACfwoB,EAAIjoB,QAAQooB,UACrB,CACA,OAAO3qB,SAAS4qB,cAAcpE,IAqEX,CAAO2e,EAAmB/oC,KAAKqD,EAAMsP,EAAM+Z,IACtDgc,EAAW9kC,SAASyqB,cAAc,SAClCia,EAAUtX,WACZ0X,EAASlZ,UAAUlwB,IAAIgpC,EAAUtX,WAEnC0X,EAASzpC,iBAAiB,QAAS,SAAUquB,GAC3C,GAAeA,EACjB,GACAob,EAASv9B,KAAO,WAChB,MAAMw2B,EArHN,OADW1+B,EAsHa0P,EAAKtP,EAAK4mB,SAASkJ,aArHY,KACpD,GAASlwB,GAFDA,MAyHX,OAFAwlC,EAAcC,KAAa/G,GAAUt+B,EAAK2mB,MAAMnG,QAAQ8d,IAAW,IACnEqH,EAASC,QAAQP,GACVM,KAKX3lC,EAAKmgB,GAAG,cAAevgB,IACrB,IAAImyB,EAAS/xB,EAAK0/B,UAAU9/B,GACxBmyB,IAEFA,EAAO5F,UAAUE,OAAO,YACxBmZ,EAAezT,MAKnB/xB,EAAKmgB,GAAG,WAAYvgB,IAClB,IAAImyB,EAAS/xB,EAAK0/B,UAAU9/B,GACxBmyB,GAEFyT,EAAezT,KAKnB/xB,EAAK2kC,KAAK,UAAW,iBAAkB,CAAC1a,EAAK8H,KAC3C,GAAIA,EAAO5F,UAAU7lB,SAAS,YAK5B,OAJAyrB,EAAO5F,UAAUE,OAAO,YACxBrsB,EAAK6hC,WAAW9P,EAAOO,QAAQ1yB,OAC/BI,EAAK67B,sBACL,GAAe5R,GAAK,GAGtB+a,EAAoBroC,KAAKqD,EAAMiqB,EAAK8H,GACpCyT,EAAezT,IAEnB,GS9JAyB,GAAUK,OAAO,eR8BjB,SAAiB2B,GACf,MAAMx1B,EAAOxE,KACPmH,EAAUnG,OAAOC,OAAO,CAC5BkxB,UAAW,eACXkY,MAAO,YACP5O,KAAM,SACN6O,SAAU,EACVtH,KAAMlvB,GACG,eAAeA,EAAKqe,qBAAqBre,EAAKu2B,gBAAgBv2B,EAAK2nB,mBAAmB3nB,EAAKw2B,2BAEnGtQ,GACHx1B,EAAKmgB,GAAG,aAAc,KACpB,IAAI3b,EAhDOuiB,KACb,GAAIA,EAAM6D,OACR,OAAO7D,EAAM,GAEf,GAAIA,aAAiB8D,YACnB,OAAO9D,EAET,GAAI,GAAaA,GAAQ,CACvB,IAAIgE,EAAMxqB,SAASyqB,cAAc,YAEjC,OADAD,EAAIE,UAAYlE,EAAMxkB,OACfwoB,EAAIjoB,QAAQooB,UACrB,CACA,OAAO3qB,SAAS4qB,cAAcpE,IAoCf,CAAOpkB,EAAQ67B,KAAK77B,IACjC6B,EAAO5I,iBAAiB,QAASquB,IAC3BjqB,EAAK60B,WACT70B,EAAK0O,QACsB,WAAvB1O,EAAK4mB,SAAS2J,MAAqBvwB,EAAK4mB,SAAS4I,kBACnDxvB,EAAK66B,QAAQ,IAEf76B,EAAK67B,gBAAe,GACpB5R,EAAIlqB,iBACJkqB,EAAIpqB,qBAENG,EAAKs2B,QAAQtI,YAAYxpB,IAE7B,GQtDAgvB,GAAUK,OAAO,YPuHjB,WACE,IAAI7zB,EAAOxE,KACX,GAA2B,UAAvBwE,EAAK4mB,SAAS2J,KAAkB,OACpC,IAAIwV,EAAY/lC,EAAK2iC,KACjBqD,EAAchmC,EAAK6iC,OACvB,IACIoD,EADAC,GAAW,EAMflmC,EAAK2kC,KAAK,QAAS,iBAAkB,KACnC,IAAIwB,EAAmBnmC,EAAK4mB,SAASuK,OAAOnI,KAC5ChpB,EAAK4mB,SAASuK,OAAOnI,KAAO,CAAC1Z,EAAM4qB,KACjC,MAAMlR,EAlFGjC,KACb,GAAIA,EAAM6D,OACR,OAAO7D,EAAM,GAEf,GAAIA,aAAiB8D,YACnB,OAAO9D,EAET,GAAI,GAAaA,GAAQ,CACvB,IAAIgE,EAAMxqB,SAASyqB,cAAc,YAEjC,OADAD,EAAIE,UAAYlE,EAAMxkB,OACfwoB,EAAIjoB,QAAQooB,UACrB,CACA,OAAO3qB,SAAS4qB,cAAcpE,IAsEb,CAAOof,EAAiBxpC,KAAKqD,EAAMsP,EAAM4qB,IACtD,GAAQlR,EAAM,CACZ,UAAa,SAIf,MAUMod,EAAWnc,IACfA,EAAIlqB,iBACJipB,EAAKmD,UAAUlwB,IAAI,gBACnBoqC,EAASrd,EAAMid,IAKXI,EAAW,CAACC,EAAYC,KAxDhB,IAACC,EAAeC,EAC9BC,OAwDmBr3B,IAAbk3B,IAjDK,EAACC,EAAeC,KAC/B,EAAG,CACD,IAAIE,EAEJ,GAAIH,IADJC,EAAkC,OAAvBE,EAAWF,QAAwB,EAAIE,EAAS5Z,wBAEzD,OAAO,CAEX,OAAS0Z,GAAWA,EAAQ1Z,wBAC5B,OAAO,GA0CG6Z,CAASL,EAAUvd,IA1DKyd,EA2DFF,EAzDsB,OAArDG,GAFkBF,EA2DCF,GAzDmB7Z,aAAuBia,EAAsBnG,aAAakG,EAASD,EAAcK,cAErG,EAACL,EAAeC,KACnC,IAAIK,EACmD,OAAtDA,EAAyBN,EAAc/Z,aAAuBqa,EAAuBvG,aAAakG,EAASD,IAuDpGjG,CAAa+F,EAAYC,KAyB7B,OANA,GAASvd,EAAM,YA1CGiB,IACXic,GAtIU,EAACjc,EAAKhsB,GAAO,KAC9BgsB,IACFA,EAAIlqB,iBACA9B,GACFgsB,EAAIpqB,oBAkIa,CAAeoqB,GAC9BA,EAAIpqB,oBAyCN,GAASmpB,EAAM,YAvCGiB,IAChBgc,EAAYjd,EACZY,WAAW,KACTZ,EAAKmD,UAAUlwB,IAAI,gBAClB,KAoCL,GAAS+sB,EAAM,YAAaod,GAC5B,GAASpd,EAAM,WAAYod,GAC3B,GAASpd,EAAM,YA/BG,KAChBA,EAAKmD,UAAUE,OAAO,kBA+BxB,GAASrD,EAAM,UArBC,KACd,IAAI+d,EACJxmC,SAASiJ,iBAAiB,iBAAiBzL,QAAQusB,GAAMA,EAAG6B,UAAUE,OAAO,iBACjD,OAA3B0a,EAAad,IAAsBc,EAAW5a,UAAUE,OAAO,eAChE4Z,OAAY52B,EACZ,IAAInR,EAAS,GACb8B,EAAKs2B,QAAQ9sB,iBAAiB,gBAAgBzL,QAAQusB,IACpD,GAAIA,EAAGgI,QAAQ1yB,MAAO,CACpB,IAAIA,EAAQ0qB,EAAGgI,QAAQ1yB,MACnBA,GACF1B,EAAOuB,KAAKG,EAEhB,IAEFI,EAAKq6B,SAASn8B,KAQT8qB,KAGXhpB,EAAK2kC,KAAK,UAAW,OAAQ,KAC3BuB,GAAW,EACJH,EAAUppC,KAAKqD,KAExBA,EAAK2kC,KAAK,UAAW,SAAU,KAC7BuB,GAAW,EACJF,EAAYrpC,KAAKqD,IAE5B,GOrMAwzB,GAAUK,OAAO,kBNwDjB,SAAiB2B,GACf,MAAMx1B,EAAOxE,KACPmH,EAAUnG,OAAOC,OAAO,CAC5BopC,MAAO,WACPmB,YAAa,kBACbC,cAAe,wBACfC,WAAY,wBACZC,WAAY,wBACZ3I,KAAMlvB,GACG,eAAiBA,EAAK03B,YAAtB,iBAA4D13B,EAAK23B,cAAjE,kBAA0G33B,EAAK43B,WAAa,KAAO53B,EAAKu2B,MAAxI,oBAA2Kv2B,EAAK63B,WAAhL,6BAER3R,GACHx1B,EAAKmgB,GAAG,aAAc,KACpB,IAAI+f,EAjDOnZ,KACb,GAAIA,EAAM6D,OACR,OAAO7D,EAAM,GAEf,GAAIA,aAAiB8D,YACnB,OAAO9D,EAET,GAAI,GAAaA,GAAQ,CACvB,IAAIgE,EAAMxqB,SAASyqB,cAAc,YAEjC,OADAD,EAAIE,UAAYlE,EAAMxkB,OACfwoB,EAAIjoB,QAAQooB,UACrB,CACA,OAAO3qB,SAAS4qB,cAAcpE,IAqCf,CAAOpkB,EAAQ67B,KAAK77B,IAC7BykC,EAAalH,EAAO/U,cAAc,IAAMxoB,EAAQwkC,YAChDC,GACFA,EAAWxrC,iBAAiB,QAASquB,IAnEpB,EAACA,EAAKhsB,GAAO,KAC9BgsB,IACFA,EAAIlqB,iBACA9B,GACFgsB,EAAIpqB,oBAgEF,CAAeoqB,GAAK,GACpBjqB,EAAKw5B,UAGTx5B,EAAKu2B,SAASgK,aAAaL,EAAQlgC,EAAKu2B,SAASrL,aAErD,GM9EAsI,GAAUK,OAAO,iBL+FjB,WACE,IAAI7zB,EAAOxE,KAUXwE,EAAK2kC,KAAK,UAAW,WAAYL,IACJ,WAAvBtkC,EAAK4mB,SAAS2J,MAAsBvwB,EAAKs2B,QAAQhwB,SAAStG,EAAK22B,gBAGjE2N,EAAUx3B,KAAKC,IAAI,EAAGD,KAAK+X,IAAI7kB,EAAK2mB,MAAM9Z,OAAQy3B,MACnCtkC,EAAKq1B,UAAar1B,EAAKoiC,WACpCpiC,EAAK+9B,kBAAkBhgC,QAAQ,CAACi1B,EAAO5O,KACjCA,EAAIkgB,EACNtkC,EAAK22B,cAAc0C,sBAAsB,cAAerG,GAExDhzB,EAAKs2B,QAAQtI,YAAYgF,KAR/BsR,EAAUtkC,EAAK2mB,MAAM9Z,OAavB7M,EAAKq1B,SAAWiP,IAElBtkC,EAAK2kC,KAAK,UAAW,YAAahc,IAChC,IAAK3oB,EAAK80B,UAAW,OAGrB,MAAMmI,EAAcj9B,EAAK88B,cAAcnU,GACvC,GAAIsU,EAAa,CACf,MAAMC,EA7DM,EAAC5S,EAAIuC,KACrB,IAAKvC,EAAI,OAAQ,EACjBuC,EAAUA,GAAWvC,EAAGwC,SAExB,IADA,IAAI5L,EAAI,EACDoJ,EAAKA,EAAGyC,wBACTzC,EAAGhoB,QAAQuqB,IACb3L,IAGJ,OAAOA,GAoDS,CAAU+b,GACtBj9B,EAAKk8B,SAASvT,EAAY,EAAIuU,EAAM,EAAIA,GACxCl9B,EAAKi8B,gBAzGW,EAACnQ,KAAUzS,KAC/B,IAAI0S,EAAe,GAAa1S,IAChCyS,EAAQ,GAAYA,IACdztB,IAAIisB,IACRyB,EAAa1tB,IAAI6tB,IACf5B,EAAG6B,UAAUE,OAAOH,QAqGpB,CAAc+Q,EAAa,cAG7B,MACEj9B,EAAKk8B,SAASl8B,EAAKq1B,SAAW1M,IAGpC,GK1IA6K,GAAUK,OAAO,iBJkIjB,WACE,MAAM7zB,EAAOxE,KACbwE,EAAK4mB,SAASoI,YAAa,EAE3BhvB,EAAK2kC,KAAK,SAAU,QAAS,KAC3B,IAAI0C,EACJrnC,EAAK42B,WAAa52B,EAAKs2B,QA3DR,EAACxK,KAAUzS,KAC5B,IAAI0S,EAAe,GAAa1S,IAChCyS,EAAQ,GAAYA,IACdztB,IAAIisB,IACRyB,EAAa1tB,IAAI6tB,IACf5B,EAAG6B,UAAUlwB,IAAIiwB,QAuDnB,CAAWlsB,EAAK22B,cAAe,kBAC/B,MAAM2Q,EAAM,GAAO,qCACnBA,EAAI7c,OAAOzqB,EAAK22B,eAChB32B,EAAKu2B,SAASgK,aAAa+G,EAAKtnC,EAAKu2B,SAASrL,YAG9C,MAAM+F,EAAc,GAAO,qDAC3BA,EAAYA,YAAcjxB,EAAK4mB,SAASqK,aAAe,GACvDjxB,EAAKs2B,QAAQ7L,OAAOwG,GAOpB,MAAMmG,EAAsC,OAA7BiQ,EAAcrnC,EAAK2E,YAAsB,EAAI0iC,EAAYxiC,aAAa,cAChFuyB,GACLnG,EAAY/Z,aAAa,aAAckgB,KAEzCp3B,EAAKmgB,GAAG,aAAc,KAEpBngB,EAAK22B,cAAc/6B,iBAAiB,UAAWquB,IAE7C,OAAQA,EAAI+Q,SACV,KAjLQ,GAuLN,OALIh7B,EAAKw0B,SA3JI,EAACvK,EAAKhsB,GAAO,KAC9BgsB,IACFA,EAAIlqB,iBACA9B,GACFgsB,EAAIpqB,oBAwJE,CAAeoqB,GAAK,GACpBjqB,EAAKw5B,cAEPx5B,EAAKu6B,mBAEP,KAvLQ,EAwLNv6B,EAAK42B,WAAWf,UAAY,EAGhC,OAAO71B,EAAKq4B,UAAU17B,KAAKqD,EAAMiqB,KAEnCjqB,EAAKmgB,GAAG,OAAQ,KACdngB,EAAK42B,WAAWf,SAAW71B,EAAKy0B,YAAc,EAAIz0B,EAAK61B,WAIzD71B,EAAKmgB,GAAG,gBAAiB,KACvBngB,EAAK22B,cAAcW,UAIrB,MAAMiQ,EAAcvnC,EAAKw4B,OApKZ,IAACt4B,EAAQ4H,EAAMR,EAAU3E,EAqKtC3C,EAAK2kC,KAAK,UAAW,SAAU1a,IAC7B,IAAIA,GAAOA,EAAIud,eAAiBxnC,EAAK22B,cACrC,OAAO4Q,EAAY5qC,KAAKqD,KAvKZE,EAyKLF,EAAK22B,cAzKQ7uB,EAyKO,OAzKDR,EAyKS,IAAMtH,EAAKw4B,SAxKlDt4B,EAAOtE,iBAAiBkM,EAAMR,EAAU3E,GA2KtC3C,EAAK2kC,KAAK,SAAU,QAAS,KACtB3kC,EAAKw0B,QACVx0B,EAAK42B,WAAWU,MAAM,CACpBmQ,eAAe,OAIvB,GItMAjU,GAAUK,OAAO,iBHoBjB,WACE,IAAI7zB,EAAOxE,KACXwE,EAAKmgB,GAAG,aAAc,KACpB,IAAIunB,EAAannC,SAASyqB,cAAc,QACpCsL,EAAUt2B,EAAK22B,cACnB+Q,EAAW9b,MAAM+b,QAAU,2FAC3B3nC,EAAKwsB,QAAQwB,YAAY0Z,GAEzB,IAAK,MAAME,IADW,CAAC,gBAAiB,WAAY,aAAc,aAAc,iBAG9EF,EAAW9b,MAAMgc,GAActR,EAAQ1K,MAAMgc,GAO/C,IAAIC,EAAS,KACXH,EAAW1V,YAAcsE,EAAQ12B,MACjC02B,EAAQ1K,MAAM6L,MAAQiQ,EAAWI,YAAc,MAEjDD,IACA7nC,EAAKmgB,GAAG,8BAA+B0nB,GACvC,GAASvR,EAAS,QAASuR,GAC3B,GAASvR,EAAS,QAASuR,GAC3B,GAASvR,EAAS,OAAQuR,GAC1B,GAASvR,EAAS,SAAUuR,IAEhC,GG/CArU,GAAUK,OAAO,sBEJjB,WACE,IAAI7zB,EAAOxE,KACPusC,EAAuB/nC,EAAK27B,gBAChCngC,KAAKmpC,KAAK,UAAW,kBAAmB1a,KAClCjqB,EAAKu1B,YAAY1oB,QACZk7B,EAAqBprC,KAAKqD,EAAMiqB,GAI7C,GFJAuJ,GAAUK,OAAO,kBGLjB,WACEr4B,KAAKmpC,KAAK,UAAW,gBAAiB,QACtCnpC,KAAKmpC,KAAK,UAAW,YAAa,OACpC,GHGAnR,GAAUK,OAAO,mBI6BjB,WACE,IAAI7zB,EAAOxE,KACPwsC,EAAehoC,EAAKq4B,UACxBr4B,EAAK2kC,KAAK,UAAW,YAAa1a,IAChC,IAAI3sB,EAAOy0B,EAAQpvB,EAASswB,EAC5B,IAAKjzB,EAAKw0B,QAtDG,KAsDSvK,EAAI+Q,SArDZ,KAqDoC/Q,EAAI+Q,QACpD,OAAOgN,EAAarrC,KAAKqD,EAAMiqB,GAEjCjqB,EAAKk1B,aAAc,EACnBjC,EAjDgB,EAAC/yB,EAAQoJ,KAC3B,KAAOpJ,GAAUA,EAAOoC,SAAS,CAC/B,GAAIpC,EAAOoC,QAAQgH,GACjB,OAAOpJ,EAETA,EAASA,EAAOusB,UAClB,GA2Ca,CAAYzsB,EAAKs1B,aAAc,gBAC1Ch4B,EArCc,EAACgtB,EAAIuC,KACrB,IAAKvC,EAAI,OAAQ,EACjBuC,EAAUA,GAAWvC,EAAGwC,SAExB,IADA,IAAI5L,EAAI,EACDoJ,EAAKA,EAAGyC,wBACTzC,EAAGhoB,QAAQuqB,IACb3L,IAGJ,OAAOA,GA4BG,CAAUlhB,EAAKs1B,aAAc,qBAChCrC,IAIHA,EAhEW,KA+DThJ,EAAI+Q,QACK/H,EAASgV,gBAEThV,EAAS4T,eAMtB9U,GADApvB,EAAUswB,EAASzpB,iBAAiB,sBACnBsD,KAAK+X,IAAIliB,EAAQkK,OAAS,EAAGvP,MAE5C0C,EAAKs7B,gBAAgBvJ,IAG3B,GJxDAyB,GAAUK,OAAO,gBFiEjB,SAAiB2B,GACf,MAAM7yB,EAAUnG,OAAOC,OAAO,CAC5B26B,MAAO,UACPyO,MAAO,SACPlY,UAAW,SACXlD,QAAQ,GACP+K,GAGH,IAAIx1B,EAAOxE,KAGX,GAAKmH,EAAQ8nB,OAAb,CAGA,IAAI+T,EAAO,uCAAyC77B,EAAQgrB,UAAY,4BAAwChrB,EAAQkjC,MAjF1G,IAAIplC,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,UAiF8B,MAAOkC,EAAQy0B,MAAQ,OACxJp3B,EAAK2kC,KAAK,QAAS,iBAAkB,KACnC,IAAIwB,EAAmBnmC,EAAK4mB,SAASuK,OAAOnI,KAC5ChpB,EAAK4mB,SAASuK,OAAOnI,KAAO,CAAC1Z,EAAM4qB,KACjC,IAAIlR,EAAO,GAAOmd,EAAiBxpC,KAAKqD,EAAMsP,EAAM4qB,IAChDgO,EAAe,GAAO1J,GAgB1B,OAfAxV,EAAKgF,YAAYka,GACjB,GAASA,EAAc,YAAaje,IAClC,GAAeA,GAAK,KAEtB,GAASie,EAAc,QAASje,IAC1BjqB,EAAK60B,WAGT,GAAe5K,GAAK,GAChBjqB,EAAK60B,UACJ70B,EAAKikC,aAAa,CAACjb,GAAOiB,KAC/BjqB,EAAK6hC,WAAW7Y,GAChBhpB,EAAK67B,gBAAe,GACpB77B,EAAK84B,iBAEA9P,IAtBX,CAyBF,GEvGAwK,GAAUK,OAAO,uBKPjB,SAAiB2B,GACf,MAAMx1B,EAAOxE,KACPmH,EAAUnG,OAAOC,OAAO,CAC5B0rC,KAAMpW,GACGA,EAAO/xB,EAAK4mB,SAASmJ,aAE7ByF,GACHx1B,EAAKmgB,GAAG,cAAe,SAAUvgB,GAC/B,GAAKI,EAAK80B,WAG8B,KAApC90B,EAAK22B,cAAc/2B,MAAM2C,OAAe,CAC1C,IAAIwvB,EAAS/xB,EAAK2C,QAAQ/C,GACtBmyB,GACF/xB,EAAKo8B,gBAAgBz5B,EAAQwlC,KAAKxrC,KAAKqD,EAAM+xB,GAEjD,CACF,EACF,GLVAyB,GAAUK,OAAO,iBDuEjB,WACE,MAAM7zB,EAAOxE,KACP4sC,EAAepoC,EAAKq8B,QACpBgM,EAAyBroC,EAAKu8B,kBAC9B+L,EAAoBtoC,EAAKs8B,aAC/B,IACI7F,EAEA8R,EAHAC,EAAa,CAAC,EAEdC,GAAe,EAEfC,EAAiB,GAkBrB,GAjBK1oC,EAAK4mB,SAAS+hB,iBAEjB3oC,EAAK4mB,SAAS+hB,eAAiB,KAE7B,GADuBlS,EAAiB8G,cAAgB9G,EAAiBmS,aAAenS,EAAiB+G,WACpF,GACnB,OAAO,EAET,GAAIx9B,EAAKs1B,aAAc,CACrB,IAAIoL,EAAa1gC,EAAK0gC,aAEtB,GADY1jC,MAAMC,KAAKyjC,GAAYlgB,QAAQxgB,EAAKs1B,eACnCoL,EAAW7zB,OAAS,EAC/B,OAAO,CAEX,CACA,OAAO,KAGN7M,EAAK4mB,SAASiiB,SACjB,KAAM,qDAKR7oC,EAAK4mB,SAASwJ,UAAY,CAAC,CACzB9I,MAAO,UACN,CACDA,MAAO,WAIT,MAAMwhB,EAAc/hB,KACsB,iBAA7B/mB,EAAK4mB,SAASqI,YAA2BwH,EAAiB1D,SAASlmB,QAAU7M,EAAK4mB,SAASqI,iBAGlGlI,KAASyhB,KAAcA,EAAWzhB,IAKlCib,EAAc,CAACjQ,EAAQnyB,IACvBI,EAAK2mB,MAAMnG,QAAQ5gB,IAAU,GAAK8oC,EAAeloB,QAAQ5gB,IAAU,EAOzEI,EAAK+oC,WAAa,CAACnpC,EAAOopC,KACxBR,EAAW5oC,GAASopC,GAItBhpC,EAAKipC,OAASliB,IACZ,GAAIA,KAASyhB,EAAY,CACvB,MAAMQ,EAAWR,EAAWzhB,GAE5B,OADAyhB,EAAWzhB,IAAS,EACbiiB,CACT,CAKA,OADAhpC,EAAKkpC,kBACElpC,EAAK4mB,SAASiiB,SAASlsC,KAAKqD,EAAM+mB,IAI3C/mB,EAAKkpC,gBAAkB,KACrBV,EAAa,CAAC,GAKhBxoC,EAAK2kC,KAAK,UAAW,oBAAqB,KACxC,IAAI8D,EAGJ,OAAOJ,EAAuB1rC,KAAKqD,KAIrCA,EAAK2kC,KAAK,UAAW,UAAW5d,GAExBA,KAASyhB,EAGRM,EAAY/hB,GAFVqhB,EAAazrC,KAAKqD,EAAM+mB,IAMnC/mB,EAAK2kC,KAAK,UAAW,eAAgB,CAAChiC,EAAS4rB,KAC7C,GAAKka,GAEE,GAAIF,EAAe,CACxB,MAAMY,EAAexmC,EAAQ,QACR0M,IAAjB85B,IACFZ,EAAcjW,QAAQ1yB,MAAQupC,EAAanpC,EAAK4mB,SAASkJ,YAE7D,OANE9vB,EAAK8hC,aAAaE,GAOpBsG,EAAkB3rC,KAAKqD,EAAM2C,EAAS4rB,GACtCka,GAAe,IAMjBzoC,EAAK2kC,KAAK,QAAS,iBAAkB,KACnC,MAAM5d,EAAQ/mB,EAAKo1B,UACnB,IAAIrD,EACA+W,EAAY/hB,IACdgL,EAAS/xB,EAAKmxB,OAAO,eAAgB,CACnCpK,MAAOA,OAGPgL,EAAO7a,aAAa,kBAAmB,IACvCqxB,EAAgBxW,GAEThL,KAASyhB,IAAe/R,EAAiBtL,cAAc,iBAChE4G,EAAS/xB,EAAKmxB,OAAO,kBAAmB,CACtCpK,MAAOA,KAGPgL,IAxLW,EAACjG,KAAUzS,KAC5B,IAAI0S,EAAe,GAAa1S,IAChCyS,EAAQ,GAAYA,IACdztB,IAAIisB,IACRyB,EAAa1tB,IAAI6tB,IACf5B,EAAG6B,UAAUlwB,IAAIiwB,QAoLjB,CAAW6F,EAAQ/xB,EAAK4mB,SAASiK,aACjC4F,EAAiBhM,OAAOsH,MAK5B/xB,EAAKmgB,GAAG,aAAc,KACpBuoB,EAAiBlsC,OAAO+C,KAAKS,EAAK2C,SAClC8zB,EAAmBz2B,EAAKy2B,iBAGxBz2B,EAAK4mB,SAASuK,OAAS30B,OAAOC,OAAO,CAAC,EAAG,CACvCgsC,aAAc,IACL,oEAETW,gBAAiB,IACR,sDAERppC,EAAK4mB,SAASuK,QAGjBsF,EAAiB76B,iBAAiB,SAAU,KACrCoE,EAAK4mB,SAAS+hB,eAAehsC,KAAKqD,IAKlC8oC,EAAY9oC,EAAKo1B,aAKlBqT,IACJA,GAAe,EACfzoC,EAAK83B,KAAKn7B,KAAKqD,EAAMA,EAAKo1B,gBAGhC,GC/OA,UMxBA,MAAM33B,G9BkiEN,MACI,WAAArC,CAAY6E,EAAUM,SAASmZ,gBAAiB9X,EAASoZ,GACrDxf,KAAK6b,OAAS0D,QACdvf,KAAK6tC,OAAQ,EACb7tC,KAAK0K,iBAAmB,CAAClE,EAAYgS,EAAcnV,EAAS,CAAC,KACrDrD,KAAK6tC,OACL7tC,KAAK8tC,oBAAoBtnC,EAAYgS,EAAcnV,IAG3DrD,KAAKyE,QAAUA,EACfzE,KAAKoG,OAASA,EACdpG,KAAK0Y,WAAa,IAAI1W,EAAWhC,MACjCA,KAAK+X,OAAS,IAAI8G,EAAO7e,MACzBA,KAAKsK,wBAA0BtJ,OAAOC,OAAO,CAAC,EAAGkD,EACrD,CACA,YAAO9B,CAAMoC,EAAS2B,GAClB,MAAMnE,EAAc,IAAIjC,KAAKyE,EAAS2B,GAEtC,OADAnE,EAAYI,QACLJ,CACX,CACA,WAAMI,SAmDC,IAAI0rC,QAASC,IACW,WAAvBjpC,SAASkpC,WACTlpC,SAAS3E,iBAAiB,mBAAoB,IAAM4tC,KAGpDA,MAtDJhuC,KAAK0K,iBAAiB,cAAe,YACrC1K,KAAK0Y,WAAWrW,QAChBrC,KAAK+X,OAAO1V,QACZrC,KAAK0K,iBAAiB,cAAe,QACzC,CACA,IAAAjI,GACIzC,KAAK0K,iBAAiB,cAAe,YACrC1K,KAAK0Y,WAAWjW,OAChBzC,KAAK+X,OAAOtV,OACZzC,KAAK0K,iBAAiB,cAAe,OACzC,CACA,QAAAwjC,CAAS1nC,EAAY0R,GACjBlY,KAAKs8B,KAAK,CAAE91B,aAAY0R,yBAC5B,CACA,oBAAAi2B,CAAqBhmC,EAAMN,GACvB7H,KAAKsK,wBAAwBnC,GAAQN,CACzC,CACA,IAAAy0B,CAAK8R,KAASC,IACU7sC,MAAM4T,QAAQg5B,GAAQA,EAAO,CAACA,KAASC,IAC/C9rC,QAAS4S,IACbA,EAAW+C,sBAAsB8K,YACjChjB,KAAK+X,OAAOiH,eAAe7J,IAGvC,CACA,MAAAm5B,CAAOF,KAASC,IACQ7sC,MAAM4T,QAAQg5B,GAAQA,EAAO,CAACA,KAASC,IAC/C9rC,QAASiE,GAAexG,KAAK+X,OAAOkH,iBAAiBzY,GACrE,CACA,eAAI+nC,GACA,OAAOvuC,KAAK+X,OAAOM,SAASxV,IAAKgH,GAAYA,EAAQQ,WACzD,CACA,oCAAAiO,CAAqC7T,EAAS+B,GAC1C,MAAMqD,EAAU7J,KAAK+X,OAAOsH,kCAAkC5a,EAAS+B,GACvE,OAAOqD,EAAUA,EAAQQ,WAAa,IAC1C,CACA,WAAAnH,CAAYC,EAAOC,EAASC,GACxB,IAAIuR,EACJ5U,KAAK6b,OAAO1Y,MAAM,iBAAkBC,EAASD,EAAOE,GAC1B,QAAzBuR,EAAK9P,OAAO0pC,eAAiC,IAAZ55B,GAAyBA,EAAGzT,KAAK2D,OAAQ1B,EAAS,GAAI,EAAG,EAAGD,EAClG,CACA,mBAAA2qC,CAAoBtnC,EAAYgS,EAAcnV,EAAS,CAAC,GACpDA,EAASrC,OAAOC,OAAO,CAAEgB,YAAajC,MAAQqD,GAC9CrD,KAAK6b,OAAO4yB,eAAe,GAAGjoC,MAAegS,KAC7CxY,KAAK6b,OAAO6yB,IAAI,WAAY1tC,OAAOC,OAAO,CAAC,EAAGoC,IAC9CrD,KAAK6b,OAAO8yB,UAChB,G8BtmE4BtsC,QAChCJ,GAAY4rC,OAAQe,EACpB3sC,GAAYisC,SACR,uBACA,cAAcnrB,GACV8rB,eAAiB,CAAC,SAElBA,cAAgB,CACZC,OAAQ,CACJxiC,KAAMtL,OACNogB,QAAS,CAAC,IAIlBjhB,OAAAA,GACIH,KAAK+uC,UAAY,IAAI/W,GAAUh4B,KAAKgvC,YAAahvC,MAAK,IAC1D,CAEAK,UAAAA,GACIL,KAAK+uC,UAAU9F,SACnB,CAEAxoC,GAAAA,CAAII,GACAb,KAAK+uC,UAAU1P,QAAQx+B,EAAM6D,OAAON,MACxC,CAEAysB,MAAAA,CAAOhwB,GACHb,KAAK+uC,UAAU1I,WAAWxlC,EAAM6D,OAAON,MAC3C,CAEA,KACI,MAAM0qC,EAAS9uC,KAAKivC,YAEd9nC,EAAU,CACZ8rB,UAAW,IACX9rB,QAAS2nC,EAAOI,QAChB/jB,MAAO2jB,EAAOK,UACdhc,SAAS,EACTwC,OAAQ,CAEJyZ,cAAeA,CAACt7B,EAAM4qB,IAAW,uBAAuBoQ,EAAOO,oBAAoB3Q,EAAO5qB,EAAK3K,gCAE/FqkB,KAAMA,CAAC1Z,EAAM4qB,IAAW,QAAQA,EAAO5qB,EAAK64B,qEAAqE74B,EAAK1P,sBAAsB0qC,EAAOQ,eAAe5Q,EAAO5qB,EAAK64B,mEAAmEmC,EAAOQ,6BACxPC,WAAYA,IAAM,2BAA2BT,EAAOU,yBAgB5D,OAZIV,EAAOW,cACPtoC,EAAQsT,OAAUtR,IAAK,CAAQ/E,MAAO+E,EAAOwjC,KAAMxjC,KAGnD2lC,EAAOpb,WACPvsB,EAAQusB,SAAWob,EAAOpb,UAG1Bob,EAAOpE,WACPvjC,EAAQ6rB,QAAU,CAAC,cAGhB7rB,CACX,G","sources":["webpack://@codefog/contao-tags-bundle/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/contrib/microevent.js","webpack://@codefog/contao-tags-bundle/./node_modules/@orchidjs/unicode-variants/dist/esm/regex.js","webpack://@codefog/contao-tags-bundle/./node_modules/@orchidjs/unicode-variants/dist/esm/strings.js","webpack://@codefog/contao-tags-bundle/./node_modules/@orchidjs/unicode-variants/dist/esm/index.js","webpack://@codefog/contao-tags-bundle/./node_modules/@orchidjs/sifter/dist/esm/utils.js","webpack://@codefog/contao-tags-bundle/./node_modules/@orchidjs/sifter/dist/esm/sifter.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/utils.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/vanilla.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/contrib/highlight.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/constants.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/defaults.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/getSettings.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/tom-select.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/contrib/microplugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/checkbox_options/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/clear_button/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/drag_drop/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/dropdown_header/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/caret_position/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/dropdown_input/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/input_autogrow/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/remove_button/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/virtual_scroll/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/tom-select.complete.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/change_listener/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/no_backspace_delete/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/no_active_items/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/optgroup_columns/plugin.js","webpack://@codefog/contao-tags-bundle/./node_modules/tom-select/dist/esm/plugins/restore_on_backspace/plugin.js","webpack://@codefog/contao-tags-bundle/./assets/tags-widget.js"],"sourcesContent":["/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events, callback) {\n events.split(/\\s+/).forEach((event) => {\n callback(event);\n });\n}\nexport default class MicroEvent {\n constructor() {\n this._events = {};\n }\n on(events, fct) {\n forEvents(events, (event) => {\n const event_array = this._events[event] || [];\n event_array.push(fct);\n this._events[event] = event_array;\n });\n }\n off(events, fct) {\n var n = arguments.length;\n if (n === 0) {\n this._events = {};\n return;\n }\n forEvents(events, (event) => {\n if (n === 1) {\n delete this._events[event];\n return;\n }\n const event_array = this._events[event];\n if (event_array === undefined)\n return;\n event_array.splice(event_array.indexOf(fct), 1);\n this._events[event] = event_array;\n });\n }\n trigger(events, ...args) {\n var self = this;\n forEvents(events, (event) => {\n const event_array = self._events[event];\n if (event_array === undefined)\n return;\n event_array.forEach(fct => {\n fct.apply(self, args);\n });\n });\n }\n}\n;\n//# sourceMappingURL=microevent.js.map","/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n */\nexport const arrayToPattern = (chars) => {\n chars = chars.filter(Boolean);\n if (chars.length < 2) {\n return chars[0] || '';\n }\n return (maxValueLength(chars) == 1) ? '[' + chars.join('') + ']' : '(?:' + chars.join('|') + ')';\n};\nexport const sequencePattern = (array) => {\n if (!hasDuplicates(array)) {\n return array.join('');\n }\n let pattern = '';\n let prev_char_count = 0;\n const prev_pattern = () => {\n if (prev_char_count > 1) {\n pattern += '{' + prev_char_count + '}';\n }\n };\n array.forEach((char, i) => {\n if (char === array[i - 1]) {\n prev_char_count++;\n return;\n }\n prev_pattern();\n pattern += char;\n prev_char_count = 1;\n });\n prev_pattern();\n return pattern;\n};\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n */\nexport const setToPattern = (chars) => {\n let array = Array.from(chars);\n return arrayToPattern(array);\n};\n/**\n * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n */\nexport const hasDuplicates = (array) => {\n return (new Set(array)).size !== array.length;\n};\n/**\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n */\nexport const escape_regex = (str) => {\n return (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n/**\n * Return the max length of array values\n */\nexport const maxValueLength = (array) => {\n return array.reduce((longest, value) => Math.max(longest, unicodeLength(value)), 0);\n};\nexport const unicodeLength = (str) => {\n return Array.from(str).length;\n};\n//# sourceMappingURL=regex.js.map","/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n */\nexport const allSubstrings = (input) => {\n if (input.length === 1)\n return [[input]];\n let result = [];\n const start = input.substring(1);\n const suba = allSubstrings(start);\n suba.forEach(function (subresult) {\n let tmp = subresult.slice(0);\n tmp[0] = input.charAt(0) + tmp[0];\n result.push(tmp);\n tmp = subresult.slice(0);\n tmp.unshift(input.charAt(0));\n result.push(tmp);\n });\n return result;\n};\n//# sourceMappingURL=strings.js.map","import { setToPattern, arrayToPattern, escape_regex, sequencePattern } from \"./regex.js\";\nimport { allSubstrings } from \"./strings.js\";\nexport const code_points = [[0, 65535]];\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}\\u{2bc}]';\nexport let unicode_map;\nlet multi_char_reg;\nconst max_char_length = 3;\nconst latin_convert = {};\nconst latin_condensed = {\n '/': '⁄∕',\n '0': '߀',\n \"a\": \"ⱥɐɑ\",\n \"aa\": \"ꜳ\",\n \"ae\": \"æǽǣ\",\n \"ao\": \"ꜵ\",\n \"au\": \"ꜷ\",\n \"av\": \"ꜹꜻ\",\n \"ay\": \"ꜽ\",\n \"b\": \"ƀɓƃ\",\n \"c\": \"ꜿƈȼↄ\",\n \"d\": \"đɗɖᴅƌꮷԁɦ\",\n \"e\": \"ɛǝᴇɇ\",\n \"f\": \"ꝼƒ\",\n \"g\": \"ǥɠꞡᵹꝿɢ\",\n \"h\": \"ħⱨⱶɥ\",\n \"i\": \"ɨı\",\n \"j\": \"ɉȷ\",\n \"k\": \"ƙⱪꝁꝃꝅꞣ\",\n \"l\": \"łƚɫⱡꝉꝇꞁɭ\",\n \"m\": \"ɱɯϻ\",\n \"n\": \"ꞥƞɲꞑᴎлԉ\",\n \"o\": \"øǿɔɵꝋꝍᴑ\",\n \"oe\": \"œ\",\n \"oi\": \"ƣ\",\n \"oo\": \"ꝏ\",\n \"ou\": \"ȣ\",\n \"p\": \"ƥᵽꝑꝓꝕρ\",\n \"q\": \"ꝗꝙɋ\",\n \"r\": \"ɍɽꝛꞧꞃ\",\n \"s\": \"ßȿꞩꞅʂ\",\n \"t\": \"ŧƭʈⱦꞇ\",\n \"th\": \"þ\",\n \"tz\": \"ꜩ\",\n \"u\": \"ʉ\",\n \"v\": \"ʋꝟʌ\",\n \"vy\": \"ꝡ\",\n \"w\": \"ⱳ\",\n \"y\": \"ƴɏỿ\",\n \"z\": \"ƶȥɀⱬꝣ\",\n \"hv\": \"ƕ\"\n};\nfor (let latin in latin_condensed) {\n let unicode = latin_condensed[latin] || '';\n for (let i = 0; i < unicode.length; i++) {\n let char = unicode.substring(i, i + 1);\n latin_convert[char] = latin;\n }\n}\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|') + '|' + accent_pat, 'gu');\n/**\n * Initialize the unicode_map from the give code point ranges\n */\nexport const initialize = (_code_points) => {\n if (unicode_map !== undefined)\n return;\n unicode_map = generateMap(_code_points || code_points);\n};\n/**\n * Helper method for normalize a string\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nexport const normalize = (str, form = 'NFKD') => str.normalize(form);\n/**\n * Remove accents without reordering string\n * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n */\nexport const asciifold = (str) => {\n return Array.from(str).reduce(\n /**\n * @param {string} result\n * @param {string} char\n */\n (result, char) => {\n return result + _asciifold(char);\n }, '');\n};\nexport const _asciifold = (str) => {\n str = normalize(str)\n .toLowerCase()\n .replace(convert_pat, (/** @type {string} */ char) => {\n return latin_convert[char] || '';\n });\n //return str;\n return normalize(str, 'NFC');\n};\n/**\n * Generate a list of unicode variants from the list of code points\n */\nexport function* generator(code_points) {\n for (const [code_point_min, code_point_max] of code_points) {\n for (let i = code_point_min; i <= code_point_max; i++) {\n let composed = String.fromCharCode(i);\n let folded = asciifold(composed);\n if (folded == composed.toLowerCase()) {\n continue;\n }\n // skip when folded is a string longer than 3 characters long\n // bc the resulting regex patterns will be long\n // eg:\n // folded صلى الله عليه وسلم length 18 code point 65018\n // folded جل جلاله length 8 code point 65019\n if (folded.length > max_char_length) {\n continue;\n }\n if (folded.length == 0) {\n continue;\n }\n yield { folded: folded, composed: composed, code_point: i };\n }\n }\n}\n/**\n * Generate a unicode map from the list of code points\n */\nexport const generateSets = (code_points) => {\n const unicode_sets = {};\n const addMatching = (folded, to_add) => {\n /** @type {Set
} */\n const folded_set = unicode_sets[folded] || new Set();\n const patt = new RegExp('^' + setToPattern(folded_set) + '$', 'iu');\n if (to_add.match(patt)) {\n return;\n }\n folded_set.add(escape_regex(to_add));\n unicode_sets[folded] = folded_set;\n };\n for (let value of generator(code_points)) {\n addMatching(value.folded, value.folded);\n addMatching(value.folded, value.composed);\n }\n return unicode_sets;\n};\n/**\n * Generate a unicode map from the list of code points\n * ae => (?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|A...)(?:E|ɛ|Ⓔ...))\n */\nexport const generateMap = (code_points) => {\n const unicode_sets = generateSets(code_points);\n const unicode_map = {};\n let multi_char = [];\n for (let folded in unicode_sets) {\n let set = unicode_sets[folded];\n if (set) {\n unicode_map[folded] = setToPattern(set);\n }\n if (folded.length > 1) {\n multi_char.push(escape_regex(folded));\n }\n }\n multi_char.sort((a, b) => b.length - a.length);\n const multi_char_patt = arrayToPattern(multi_char);\n multi_char_reg = new RegExp('^' + multi_char_patt, 'u');\n return unicode_map;\n};\n/**\n * Map each element of an array from its folded value to all possible unicode matches\n */\nexport const mapSequence = (strings, min_replacement = 1) => {\n let chars_replaced = 0;\n strings = strings.map((str) => {\n if (unicode_map[str]) {\n chars_replaced += str.length;\n }\n return unicode_map[str] || str;\n });\n if (chars_replaced >= min_replacement) {\n return sequencePattern(strings);\n }\n return '';\n};\n/**\n * Convert a short string and split it into all possible patterns\n * Keep a pattern only if min_replacement is met\n *\n * 'abc'\n * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n *\t\t=> ['abc-pattern','ab-c-pattern'...]\n */\nexport const substringsToPattern = (str, min_replacement = 1) => {\n min_replacement = Math.max(min_replacement, str.length - 1);\n return arrayToPattern(allSubstrings(str).map((sub_pat) => {\n return mapSequence(sub_pat, min_replacement);\n }));\n};\n/**\n * Convert an array of sequences into a pattern\n * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n */\nconst sequencesToPattern = (sequences, all = true) => {\n let min_replacement = sequences.length > 1 ? 1 : 0;\n return arrayToPattern(sequences.map((sequence) => {\n let seq = [];\n const len = all ? sequence.length() : sequence.length() - 1;\n for (let j = 0; j < len; j++) {\n seq.push(substringsToPattern(sequence.substrs[j] || '', min_replacement));\n }\n return sequencePattern(seq);\n }));\n};\n/**\n * Return true if the sequence is already in the sequences\n */\nconst inSequences = (needle_seq, sequences) => {\n for (const seq of sequences) {\n if (seq.start != needle_seq.start || seq.end != needle_seq.end) {\n continue;\n }\n if (seq.substrs.join('') !== needle_seq.substrs.join('')) {\n continue;\n }\n let needle_parts = needle_seq.parts;\n const filter = (part) => {\n for (const needle_part of needle_parts) {\n if (needle_part.start === part.start && needle_part.substr === part.substr) {\n return false;\n }\n if (part.length == 1 || needle_part.length == 1) {\n continue;\n }\n // check for overlapping parts\n // a = ['::=','==']\n // b = ['::','===']\n // a = ['r','sm']\n // b = ['rs','m']\n if (part.start < needle_part.start && part.end > needle_part.start) {\n return true;\n }\n if (needle_part.start < part.start && needle_part.end > part.start) {\n return true;\n }\n }\n return false;\n };\n let filtered = seq.parts.filter(filter);\n if (filtered.length > 0) {\n continue;\n }\n return true;\n }\n return false;\n};\nclass Sequence {\n parts;\n substrs;\n start;\n end;\n constructor() {\n this.parts = [];\n this.substrs = [];\n this.start = 0;\n this.end = 0;\n }\n add(part) {\n if (part) {\n this.parts.push(part);\n this.substrs.push(part.substr);\n this.start = Math.min(part.start, this.start);\n this.end = Math.max(part.end, this.end);\n }\n }\n last() {\n return this.parts[this.parts.length - 1];\n }\n length() {\n return this.parts.length;\n }\n clone(position, last_piece) {\n let clone = new Sequence();\n let parts = JSON.parse(JSON.stringify(this.parts));\n let last_part = parts.pop();\n for (const part of parts) {\n clone.add(part);\n }\n let last_substr = last_piece.substr.substring(0, position - last_part.start);\n let clone_last_len = last_substr.length;\n clone.add({ start: last_part.start, end: last_part.start + clone_last_len, length: clone_last_len, substr: last_substr });\n return clone;\n }\n}\n/**\n * Expand a regular expression pattern to include unicode variants\n * \teg /a/ becomes /aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n *\n * Issue:\n * ﺊﺋ [ 'ﺊ = \\\\u{fe8a}', 'ﺋ = \\\\u{fe8b}' ]\n *\tbecomes:\tئئ [ 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}', 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}' ]\n *\n *\tİIJ = IIJ = ⅡJ\n *\n * \t1/2/4\n */\nexport const getPattern = (str) => {\n initialize();\n str = asciifold(str);\n let pattern = '';\n let sequences = [new Sequence()];\n for (let i = 0; i < str.length; i++) {\n let substr = str.substring(i);\n let match = substr.match(multi_char_reg);\n const char = str.substring(i, i + 1);\n const match_str = match ? match[0] : null;\n // loop through sequences\n // add either the char or multi_match\n let overlapping = [];\n let added_types = new Set();\n for (const sequence of sequences) {\n const last_piece = sequence.last();\n if (!last_piece || last_piece.length == 1 || last_piece.end <= i) {\n // if we have a multi match\n if (match_str) {\n const len = match_str.length;\n sequence.add({ start: i, end: i + len, length: len, substr: match_str });\n added_types.add('1');\n }\n else {\n sequence.add({ start: i, end: i + 1, length: 1, substr: char });\n added_types.add('2');\n }\n }\n else if (match_str) {\n let clone = sequence.clone(i, last_piece);\n const len = match_str.length;\n clone.add({ start: i, end: i + len, length: len, substr: match_str });\n overlapping.push(clone);\n }\n else {\n // don't add char\n // adding would create invalid patterns: 234 => [2,34,4]\n added_types.add('3');\n }\n }\n // if we have overlapping\n if (overlapping.length > 0) {\n // ['ii','iii'] before ['i','i','iii']\n overlapping = overlapping.sort((a, b) => {\n return a.length() - b.length();\n });\n for (let clone of overlapping) {\n // don't add if we already have an equivalent sequence\n if (inSequences(clone, sequences)) {\n continue;\n }\n sequences.push(clone);\n }\n continue;\n }\n // if we haven't done anything unique\n // clean up the patterns\n // helps keep patterns smaller\n // if str = 'r₨㎧aarss', pattern will be 446 instead of 655\n if (i > 0 && added_types.size == 1 && !added_types.has('3')) {\n pattern += sequencesToPattern(sequences, false);\n let new_seq = new Sequence();\n const old_seq = sequences[0];\n if (old_seq) {\n new_seq.add(old_seq.last());\n }\n sequences = [new_seq];\n }\n }\n pattern += sequencesToPattern(sequences, true);\n return pattern;\n};\nexport { escape_regex };\n//# sourceMappingURL=index.js.map","import { asciifold } from '@orchidjs/unicode-variants';\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttr = (obj, name) => {\n if (!obj)\n return;\n return obj[name];\n};\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttrNesting = (obj, name) => {\n if (!obj)\n return;\n var part, names = name.split(\".\");\n while ((part = names.shift()) && (obj = obj[part]))\n ;\n return obj;\n};\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value, token, weight) => {\n var score, pos;\n if (!value)\n return 0;\n value = value + '';\n if (token.regex == null)\n return 0;\n pos = value.search(token.regex);\n if (pos === -1)\n return 0;\n score = token.string.length / value.length;\n if (pos === 0)\n score += 0.5;\n return score * weight;\n};\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj, key) => {\n var value = obj[key];\n if (typeof value == 'function')\n return value;\n if (value && !Array.isArray(value)) {\n obj[key] = [value];\n }\n};\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object, callback) => {\n if (Array.isArray(object)) {\n object.forEach(callback);\n }\n else {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n callback(object[key], key);\n }\n }\n }\n};\nexport const cmp = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a > b ? 1 : (a < b ? -1 : 0);\n }\n a = asciifold(a + '').toLowerCase();\n b = asciifold(b + '').toLowerCase();\n if (a > b)\n return 1;\n if (b > a)\n return -1;\n return 0;\n};\n//# sourceMappingURL=utils.js.map","/**\n * sifter.js\n * Copyright (c) 2013–2020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis \n */\nimport { scoreValue, getAttr, getAttrNesting, propToArray, iterate, cmp } from \"./utils.js\";\nimport { getPattern, escape_regex } from '@orchidjs/unicode-variants';\nclass Sifter {\n items; // []|{};\n settings;\n /**\n * Textually searches arrays and hashes of objects\n * by property (or multiple properties). Designed\n * specifically for autocomplete.\n *\n */\n constructor(items, settings) {\n this.items = items;\n this.settings = settings || { diacritics: true };\n }\n ;\n /**\n * Splits a search string into an array of individual\n * regexps to be used to match results.\n *\n */\n tokenize(query, respect_word_boundaries, weights) {\n if (!query || !query.length)\n return [];\n const tokens = [];\n const words = query.split(/\\s+/);\n var field_regex;\n if (weights) {\n field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n }\n words.forEach((word) => {\n let field_match;\n let field = null;\n let regex = null;\n // look for \"field:query\" tokens\n if (field_regex && (field_match = word.match(field_regex))) {\n field = field_match[1];\n word = field_match[2];\n }\n if (word.length > 0) {\n if (this.settings.diacritics) {\n regex = getPattern(word) || null;\n }\n else {\n regex = escape_regex(word);\n }\n if (regex && respect_word_boundaries)\n regex = \"\\\\b\" + regex;\n }\n tokens.push({\n string: word,\n regex: regex ? new RegExp(regex, 'iu') : null,\n field: field,\n });\n });\n return tokens;\n }\n ;\n /**\n * Returns a function to be used to score individual results.\n *\n * Good matches will have a higher score than poor matches.\n * If an item is not a match, 0 will be returned by the function.\n *\n * @returns {T.ScoreFn}\n */\n getScoreFunction(query, options) {\n var search = this.prepareSearch(query, options);\n return this._getScoreFunction(search);\n }\n /**\n * @returns {T.ScoreFn}\n *\n */\n _getScoreFunction(search) {\n const tokens = search.tokens, token_count = tokens.length;\n if (!token_count) {\n return function () { return 0; };\n }\n const fields = search.options.fields, weights = search.weights, field_count = fields.length, getAttrFn = search.getAttrFn;\n if (!field_count) {\n return function () { return 1; };\n }\n /**\n * Calculates the score of an object\n * against the search query.\n *\n */\n const scoreObject = (function () {\n if (field_count === 1) {\n return function (token, data) {\n const field = fields[0].field;\n return scoreValue(getAttrFn(data, field), token, weights[field] || 1);\n };\n }\n return function (token, data) {\n var sum = 0;\n // is the token specific to a field?\n if (token.field) {\n const value = getAttrFn(data, token.field);\n if (!token.regex && value) {\n sum += (1 / field_count);\n }\n else {\n sum += scoreValue(value, token, 1);\n }\n }\n else {\n iterate(weights, (weight, field) => {\n sum += scoreValue(getAttrFn(data, field), token, weight);\n });\n }\n return sum / field_count;\n };\n })();\n if (token_count === 1) {\n return function (data) {\n return scoreObject(tokens[0], data);\n };\n }\n if (search.options.conjunction === 'and') {\n return function (data) {\n var score, sum = 0;\n for (let token of tokens) {\n score = scoreObject(token, data);\n if (score <= 0)\n return 0;\n sum += score;\n }\n return sum / token_count;\n };\n }\n else {\n return function (data) {\n var sum = 0;\n iterate(tokens, (token) => {\n sum += scoreObject(token, data);\n });\n return sum / token_count;\n };\n }\n }\n ;\n /**\n * Returns a function that can be used to compare two\n * results, for sorting purposes. If no sorting should\n * be performed, `null` will be returned.\n *\n * @return function(a,b)\n */\n getSortFunction(query, options) {\n var search = this.prepareSearch(query, options);\n return this._getSortFunction(search);\n }\n _getSortFunction(search) {\n var implicit_score, sort_flds = [];\n const self = this, options = search.options, sort = (!search.query && options.sort_empty) ? options.sort_empty : options.sort;\n if (typeof sort == 'function') {\n return sort.bind(this);\n }\n /**\n * Fetches the specified sort field value\n * from a search result item.\n *\n */\n const get_field = function (name, result) {\n if (name === '$score')\n return result.score;\n return search.getAttrFn(self.items[result.id], name);\n };\n // parse options\n if (sort) {\n for (let s of sort) {\n if (search.query || s.field !== '$score') {\n sort_flds.push(s);\n }\n }\n }\n // the \"$score\" field is implied to be the primary\n // sort field, unless it's manually specified\n if (search.query) {\n implicit_score = true;\n for (let fld of sort_flds) {\n if (fld.field === '$score') {\n implicit_score = false;\n break;\n }\n }\n if (implicit_score) {\n sort_flds.unshift({ field: '$score', direction: 'desc' });\n }\n // without a search.query, all items will have the same score\n }\n else {\n sort_flds = sort_flds.filter((fld) => fld.field !== '$score');\n }\n // build function\n const sort_flds_count = sort_flds.length;\n if (!sort_flds_count) {\n return null;\n }\n return function (a, b) {\n var result, field;\n for (let sort_fld of sort_flds) {\n field = sort_fld.field;\n let multiplier = sort_fld.direction === 'desc' ? -1 : 1;\n result = multiplier * cmp(get_field(field, a), get_field(field, b));\n if (result)\n return result;\n }\n return 0;\n };\n }\n ;\n /**\n * Parses a search query and returns an object\n * with tokens and fields ready to be populated\n * with results.\n *\n */\n prepareSearch(query, optsUser) {\n const weights = {};\n var options = Object.assign({}, optsUser);\n propToArray(options, 'sort');\n propToArray(options, 'sort_empty');\n // convert fields to new format\n if (options.fields) {\n propToArray(options, 'fields');\n const fields = [];\n options.fields.forEach((field) => {\n if (typeof field == 'string') {\n field = { field: field, weight: 1 };\n }\n fields.push(field);\n weights[field.field] = ('weight' in field) ? field.weight : 1;\n });\n options.fields = fields;\n }\n return {\n options: options,\n query: query.toLowerCase().trim(),\n tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n total: 0,\n items: [],\n weights: weights,\n getAttrFn: (options.nesting) ? getAttrNesting : getAttr,\n };\n }\n ;\n /**\n * Searches through all items and returns a sorted array of matches.\n *\n */\n search(query, options) {\n var self = this, score, search;\n search = this.prepareSearch(query, options);\n options = search.options;\n query = search.query;\n // generate result scoring function\n const fn_score = options.score || self._getScoreFunction(search);\n // perform search and sort\n if (query.length) {\n iterate(self.items, (item, id) => {\n score = fn_score(item);\n if (options.filter === false || score > 0) {\n search.items.push({ 'score': score, 'id': id });\n }\n });\n }\n else {\n iterate(self.items, (_, id) => {\n search.items.push({ 'score': 1, 'id': id });\n });\n }\n const fn_sort = self._getSortFunction(search);\n if (fn_sort)\n search.items.sort(fn_sort);\n // apply limits\n search.total = search.items.length;\n if (typeof options.limit === 'number') {\n search.items = search.items.slice(0, options.limit);\n }\n return search;\n }\n ;\n}\nexport { Sifter, scoreValue, getAttr, getAttrNesting, propToArray, iterate, cmp, getPattern };\nexport * from \"./types.js\";\n//# sourceMappingURL=sifter.js.map","/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value) => {\n if (typeof value === 'undefined' || value === null)\n return null;\n return get_hash(value);\n};\nexport const get_hash = (value) => {\n if (typeof value === 'boolean')\n return value ? '1' : '0';\n return value + '';\n};\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str) => {\n return (str + '')\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"');\n};\n/**\n * use setTimeout if timeout > 0\n */\nexport const timeout = (fn, timeout) => {\n if (timeout > 0) {\n return window.setTimeout(fn, timeout);\n }\n fn.call(null);\n return null;\n};\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn, delay) => {\n var timeout;\n return function (value, callback) {\n var self = this;\n if (timeout) {\n self.loading = Math.max(self.loading - 1, 0);\n clearTimeout(timeout);\n }\n timeout = setTimeout(function () {\n timeout = null;\n self.loadedSearches[value] = true;\n fn.call(self, value, callback);\n }, delay);\n };\n};\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = (self, types, fn) => {\n var type;\n var trigger = self.trigger;\n var event_args = {};\n // override trigger method\n self.trigger = function () {\n var type = arguments[0];\n if (types.indexOf(type) !== -1) {\n event_args[type] = arguments;\n }\n else {\n return trigger.apply(self, arguments);\n }\n };\n // invoke provided function\n fn.apply(self, []);\n self.trigger = trigger;\n // trigger queued events\n for (type of types) {\n if (type in event_args) {\n trigger.apply(self, event_args[type]);\n }\n }\n};\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input) => {\n return {\n start: input.selectionStart || 0,\n length: (input.selectionEnd || 0) - (input.selectionStart || 0),\n };\n};\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt, stop = false) => {\n if (evt) {\n evt.preventDefault();\n if (stop) {\n evt.stopPropagation();\n }\n }\n};\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target, type, callback, options) => {\n target.addEventListener(type, callback, options);\n};\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = (key_name, evt) => {\n if (!evt) {\n return false;\n }\n if (!evt[key_name]) {\n return false;\n }\n var count = (evt.altKey ? 1 : 0) + (evt.ctrlKey ? 1 : 0) + (evt.shiftKey ? 1 : 0) + (evt.metaKey ? 1 : 0);\n if (count === 1) {\n return true;\n }\n return false;\n};\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el, id) => {\n const existing_id = el.getAttribute('id');\n if (existing_id) {\n return existing_id;\n }\n el.setAttribute('id', id);\n return id;\n};\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str) => {\n return str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n/**\n *\n */\nexport const append = (parent, node) => {\n if (node)\n parent.append(node);\n};\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object, callback) => {\n if (Array.isArray(object)) {\n object.forEach(callback);\n }\n else {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n callback(object[key], key);\n }\n }\n }\n};\n//# sourceMappingURL=utils.js.map","import { iterate } from \"./utils.js\";\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = (query) => {\n if (query.jquery) {\n return query[0];\n }\n if (query instanceof HTMLElement) {\n return query;\n }\n if (isHtmlString(query)) {\n var tpl = document.createElement('template');\n tpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n return tpl.content.firstChild;\n }\n return document.querySelector(query);\n};\nexport const isHtmlString = (arg) => {\n if (typeof arg === 'string' && arg.indexOf('<') > -1) {\n return true;\n }\n return false;\n};\nexport const escapeQuery = (query) => {\n return query.replace(/['\"\\\\]/g, '\\\\$&');\n};\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = (dom_el, event_name) => {\n var event = document.createEvent('HTMLEvents');\n event.initEvent(event_name, true, false);\n dom_el.dispatchEvent(event);\n};\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = (dom_el, css) => {\n Object.assign(dom_el.style, css);\n};\n/**\n * Add css classes\n *\n */\nexport const addClasses = (elmts, ...classes) => {\n var norm_classes = classesArray(classes);\n elmts = castAsArray(elmts);\n elmts.map(el => {\n norm_classes.map(cls => {\n el.classList.add(cls);\n });\n });\n};\n/**\n * Remove css classes\n *\n */\nexport const removeClasses = (elmts, ...classes) => {\n var norm_classes = classesArray(classes);\n elmts = castAsArray(elmts);\n elmts.map(el => {\n norm_classes.map(cls => {\n el.classList.remove(cls);\n });\n });\n};\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args) => {\n var classes = [];\n iterate(args, (_classes) => {\n if (typeof _classes === 'string') {\n _classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n }\n if (Array.isArray(_classes)) {\n classes = classes.concat(_classes);\n }\n });\n return classes.filter(Boolean);\n};\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg) => {\n if (!Array.isArray(arg)) {\n arg = [arg];\n }\n return arg;\n};\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = (target, selector, wrapper) => {\n if (wrapper && !wrapper.contains(target)) {\n return;\n }\n while (target && target.matches) {\n if (target.matches(selector)) {\n return target;\n }\n target = target.parentNode;\n }\n};\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = (list, direction = 0) => {\n if (direction > 0) {\n return list[list.length - 1];\n }\n return list[0];\n};\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj) => {\n return (Object.keys(obj).length === 0);\n};\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = (el, amongst) => {\n if (!el)\n return -1;\n amongst = amongst || el.nodeName;\n var i = 0;\n while (el = el.previousElementSibling) {\n if (el.matches(amongst)) {\n i++;\n }\n }\n return i;\n};\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el, attrs) => {\n iterate(attrs, (val, attr) => {\n if (val == null) {\n el.removeAttribute(attr);\n }\n else {\n el.setAttribute(attr, '' + val);\n }\n });\n};\n/**\n * Replace a node\n */\nexport const replaceNode = (existing, replacement) => {\n if (existing.parentNode)\n existing.parentNode.replaceChild(replacement, existing);\n};\n//# sourceMappingURL=vanilla.js.map","/**\n * highlight v3 | MIT license | Johann Burkard \n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal 2011-6-24 (added regex)\n * - Modified by Brian Reavis 2012-8-27 (cleanup)\n */\nimport { replaceNode } from \"../vanilla.js\";\nexport const highlight = (element, regex) => {\n if (regex === null)\n return;\n // convet string to regex\n if (typeof regex === 'string') {\n if (!regex.length)\n return;\n regex = new RegExp(regex, 'i');\n }\n // Wrap matching part of text node with highlighting , e.g.\n // Soccer -> Soccer for regex = /soc/i\n const highlightText = (node) => {\n var match = node.data.match(regex);\n if (match && node.data.length > 0) {\n var spannode = document.createElement('span');\n spannode.className = 'highlight';\n var middlebit = node.splitText(match.index);\n middlebit.splitText(match[0].length);\n var middleclone = middlebit.cloneNode(true);\n spannode.appendChild(middleclone);\n replaceNode(middlebit, spannode);\n return 1;\n }\n return 0;\n };\n // Recurse element node, looking for child text nodes to highlight, unless element\n // is childless,
-
diff --git a/src/Resources/public/backend.css b/src/Resources/public/backend.css
deleted file mode 100644
index 568ba02..0000000
--- a/src/Resources/public/backend.css
+++ /dev/null
@@ -1,78 +0,0 @@
-.cfg-tags {
- padding-top: 5px;
- position: relative;
- z-index: 1;
-}
-
-.cfg-tags:has(.selectize-input.input-active.dropdown-active) {
- z-index: 2;
-}
-
-.cfg-tags-all {
- padding: 5px 0 5px 0;
-}
-
-.cfg-tags-all span {
- display: inline-block;
- margin: 0 4px 5px 0;
- padding: 5px 10px;
- background: #eaeaea;
- border-radius: 3px;
- cursor: pointer;
- white-space: nowrap;
-}
-
-.cfg-tags-all span:hover {
- background: #589b0e !important;
- color: #fff;
-}
-
-.cfg-tags .selectize-control.multi .selectize-input > div {
- margin-right: 7px;
- padding: 5px 10px;
- background: #eaeaea;
- border-radius: 3px;
- line-height: 1;
-}
-
-.cfg-tags .selectize-control.multi .selectize-input > div:hover {
- background: #c33 !important;
- color: #fff;
-}
-
-/* Dark scheme */
-html[data-color-scheme="dark"] .cfg-tags-all span,
-html[data-color-scheme="dark"] .selectize-dropdown-header,
-html[data-color-scheme="dark"] .selectize-control.single .selectize-input.input-active {
- background: #292c32;
-}
-
-html[data-color-scheme="dark"] .selectize-input,
-html[data-color-scheme="dark"] .selectize-dropdown {
- background: #151619;
- border-color: #44464b;
-}
-
-html[data-color-scheme="dark"] .selectize-input.dropdown-active::before {
- background-color: #44464b;
-}
-
-html[data-color-scheme="dark"] .selectize-dropdown,
-html[data-color-scheme="dark"] .selectize-input,
-html[data-color-scheme="dark"] .selectize-input input {
- color: var(--text);
-}
-
-html[data-color-scheme="dark"] .selectize-dropdown .active {
- background: #1b1d21;
- color: #fff;
-}
-
-html[data-color-scheme="dark"] .cfg-tags .selectize-control.multi .selectize-input > div {
- background: #292c32;
- color: var(--text);
-}
-
-html[data-color-scheme="dark"] .selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {
- background: #292c32 !important;
-}
diff --git a/src/Resources/public/backend.js b/src/Resources/public/backend.js
deleted file mode 100644
index f4b1f44..0000000
--- a/src/Resources/public/backend.js
+++ /dev/null
@@ -1 +0,0 @@
-jQuery.noConflict();
diff --git a/src/Resources/public/backend.min.css b/src/Resources/public/backend.min.css
deleted file mode 100644
index 7650fb7..0000000
--- a/src/Resources/public/backend.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.cfg-tags{padding-top:5px;position:relative;z-index:1}.cfg-tags:has(.selectize-input.input-active.dropdown-active){z-index:2;}.cfg-tags-all{padding:5px 0 5px 0}.cfg-tags-all span{display:inline-block;margin:0 4px 5px 0;padding:5px 10px;background:#eaeaea;border-radius:3px;cursor:pointer;white-space:nowrap}.cfg-tags-all span:hover{background:#589b0e!important;color:#fff}.cfg-tags .selectize-control.multi .selectize-input>div{margin-right:7px;padding:5px 10px;background:#eaeaea;border-radius:3px;line-height:1}.cfg-tags .selectize-control.multi .selectize-input>div:hover{background:#c33!important;color:#fff}html[data-color-scheme=dark] .cfg-tags-all span,html[data-color-scheme=dark] .selectize-control.single .selectize-input.input-active,html[data-color-scheme=dark] .selectize-dropdown-header{background:#292c32}html[data-color-scheme=dark] .selectize-dropdown,html[data-color-scheme=dark] .selectize-input{background:#151619;border-color:#44464b}html[data-color-scheme=dark] .selectize-input.dropdown-active::before{background-color:#44464b}html[data-color-scheme=dark] .selectize-dropdown,html[data-color-scheme=dark] .selectize-input,html[data-color-scheme=dark] .selectize-input input{color:var(--text)}html[data-color-scheme=dark] .selectize-dropdown .active{background:#1b1d21;color:#fff}html[data-color-scheme=dark] .cfg-tags .selectize-control.multi .selectize-input>div{background:#292c32;color:var(--text)}html[data-color-scheme=dark] .selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{background:#292c32!important}
diff --git a/src/Resources/public/backend.min.js b/src/Resources/public/backend.min.js
deleted file mode 100644
index aa32286..0000000
--- a/src/Resources/public/backend.min.js
+++ /dev/null
@@ -1 +0,0 @@
-jQuery.noConflict();
\ No newline at end of file
diff --git a/src/Resources/public/jquery-ui.css b/src/Resources/public/jquery-ui.css
deleted file mode 100644
index e0319b7..0000000
--- a/src/Resources/public/jquery-ui.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*! jQuery UI - v1.12.1 - 2021-05-31
-* http://jqueryui.com
-* Includes: sortable.css
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
diff --git a/src/Resources/public/jquery-ui.js b/src/Resources/public/jquery-ui.js
deleted file mode 100644
index d222301..0000000
--- a/src/Resources/public/jquery-ui.js
+++ /dev/null
@@ -1,2564 +0,0 @@
-/*! jQuery UI - v1.12.1 - 2021-05-31
-* http://jqueryui.com
-* Includes: widget.js, data.js, scroll-parent.js, widgets/sortable.js, widgets/mouse.js
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-(function( factory ) {
- if ( typeof define === "function" && define.amd ) {
-
- // AMD. Register as an anonymous module.
- define([ "jquery" ], factory );
- } else {
-
- // Browser globals
- factory( jQuery );
- }
-}(function( $ ) {
-
-$.ui = $.ui || {};
-
-var version = $.ui.version = "1.12.1";
-
-
-/*!
- * jQuery UI Widget 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Widget
-//>>group: Core
-//>>description: Provides a factory for creating stateful widgets with a common API.
-//>>docs: http://api.jqueryui.com/jQuery.widget/
-//>>demos: http://jqueryui.com/widget/
-
-
-
-var widgetUuid = 0;
-var widgetSlice = Array.prototype.slice;
-
-$.cleanData = ( function( orig ) {
- return function( elems ) {
- var events, elem, i;
- for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
- try {
-
- // Only trigger remove when necessary to save time
- events = $._data( elem, "events" );
- if ( events && events.remove ) {
- $( elem ).triggerHandler( "remove" );
- }
-
- // Http://bugs.jquery.com/ticket/8235
- } catch ( e ) {}
- }
- orig( elems );
- };
-} )( $.cleanData );
-
-$.widget = function( name, base, prototype ) {
- var existingConstructor, constructor, basePrototype;
-
- // ProxiedPrototype allows the provided prototype to remain unmodified
- // so that it can be used as a mixin for multiple widgets (#8876)
- var proxiedPrototype = {};
-
- var namespace = name.split( "." )[ 0 ];
- name = name.split( "." )[ 1 ];
- var fullName = namespace + "-" + name;
-
- if ( !prototype ) {
- prototype = base;
- base = $.Widget;
- }
-
- if ( $.isArray( prototype ) ) {
- prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
- }
-
- // Create selector for plugin
- $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
- return !!$.data( elem, fullName );
- };
-
- $[ namespace ] = $[ namespace ] || {};
- existingConstructor = $[ namespace ][ name ];
- constructor = $[ namespace ][ name ] = function( options, element ) {
-
- // Allow instantiation without "new" keyword
- if ( !this._createWidget ) {
- return new constructor( options, element );
- }
-
- // Allow instantiation without initializing for simple inheritance
- // must use "new" keyword (the code above always passes args)
- if ( arguments.length ) {
- this._createWidget( options, element );
- }
- };
-
- // Extend with the existing constructor to carry over any static properties
- $.extend( constructor, existingConstructor, {
- version: prototype.version,
-
- // Copy the object used to create the prototype in case we need to
- // redefine the widget later
- _proto: $.extend( {}, prototype ),
-
- // Track widgets that inherit from this widget in case this widget is
- // redefined after a widget inherits from it
- _childConstructors: []
- } );
-
- basePrototype = new base();
-
- // We need to make the options hash a property directly on the new instance
- // otherwise we'll modify the options hash on the prototype that we're
- // inheriting from
- basePrototype.options = $.widget.extend( {}, basePrototype.options );
- $.each( prototype, function( prop, value ) {
- if ( !$.isFunction( value ) ) {
- proxiedPrototype[ prop ] = value;
- return;
- }
- proxiedPrototype[ prop ] = ( function() {
- function _super() {
- return base.prototype[ prop ].apply( this, arguments );
- }
-
- function _superApply( args ) {
- return base.prototype[ prop ].apply( this, args );
- }
-
- return function() {
- var __super = this._super;
- var __superApply = this._superApply;
- var returnValue;
-
- this._super = _super;
- this._superApply = _superApply;
-
- returnValue = value.apply( this, arguments );
-
- this._super = __super;
- this._superApply = __superApply;
-
- return returnValue;
- };
- } )();
- } );
- constructor.prototype = $.widget.extend( basePrototype, {
-
- // TODO: remove support for widgetEventPrefix
- // always use the name + a colon as the prefix, e.g., draggable:start
- // don't prefix for widgets that aren't DOM-based
- widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
- }, proxiedPrototype, {
- constructor: constructor,
- namespace: namespace,
- widgetName: name,
- widgetFullName: fullName
- } );
-
- // If this widget is being redefined then we need to find all widgets that
- // are inheriting from it and redefine all of them so that they inherit from
- // the new version of this widget. We're essentially trying to replace one
- // level in the prototype chain.
- if ( existingConstructor ) {
- $.each( existingConstructor._childConstructors, function( i, child ) {
- var childPrototype = child.prototype;
-
- // Redefine the child widget using the same prototype that was
- // originally used, but inherit from the new version of the base
- $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
- child._proto );
- } );
-
- // Remove the list of existing child constructors from the old constructor
- // so the old child constructors can be garbage collected
- delete existingConstructor._childConstructors;
- } else {
- base._childConstructors.push( constructor );
- }
-
- $.widget.bridge( name, constructor );
-
- return constructor;
-};
-
-$.widget.extend = function( target ) {
- var input = widgetSlice.call( arguments, 1 );
- var inputIndex = 0;
- var inputLength = input.length;
- var key;
- var value;
-
- for ( ; inputIndex < inputLength; inputIndex++ ) {
- for ( key in input[ inputIndex ] ) {
- value = input[ inputIndex ][ key ];
- if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
-
- // Clone objects
- if ( $.isPlainObject( value ) ) {
- target[ key ] = $.isPlainObject( target[ key ] ) ?
- $.widget.extend( {}, target[ key ], value ) :
-
- // Don't extend strings, arrays, etc. with objects
- $.widget.extend( {}, value );
-
- // Copy everything else by reference
- } else {
- target[ key ] = value;
- }
- }
- }
- }
- return target;
-};
-
-$.widget.bridge = function( name, object ) {
- var fullName = object.prototype.widgetFullName || name;
- $.fn[ name ] = function( options ) {
- var isMethodCall = typeof options === "string";
- var args = widgetSlice.call( arguments, 1 );
- var returnValue = this;
-
- if ( isMethodCall ) {
-
- // If this is an empty collection, we need to have the instance method
- // return undefined instead of the jQuery instance
- if ( !this.length && options === "instance" ) {
- returnValue = undefined;
- } else {
- this.each( function() {
- var methodValue;
- var instance = $.data( this, fullName );
-
- if ( options === "instance" ) {
- returnValue = instance;
- return false;
- }
-
- if ( !instance ) {
- return $.error( "cannot call methods on " + name +
- " prior to initialization; " +
- "attempted to call method '" + options + "'" );
- }
-
- if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {
- return $.error( "no such method '" + options + "' for " + name +
- " widget instance" );
- }
-
- methodValue = instance[ options ].apply( instance, args );
-
- if ( methodValue !== instance && methodValue !== undefined ) {
- returnValue = methodValue && methodValue.jquery ?
- returnValue.pushStack( methodValue.get() ) :
- methodValue;
- return false;
- }
- } );
- }
- } else {
-
- // Allow multiple hashes to be passed on init
- if ( args.length ) {
- options = $.widget.extend.apply( null, [ options ].concat( args ) );
- }
-
- this.each( function() {
- var instance = $.data( this, fullName );
- if ( instance ) {
- instance.option( options || {} );
- if ( instance._init ) {
- instance._init();
- }
- } else {
- $.data( this, fullName, new object( options, this ) );
- }
- } );
- }
-
- return returnValue;
- };
-};
-
-$.Widget = function( /* options, element */ ) {};
-$.Widget._childConstructors = [];
-
-$.Widget.prototype = {
- widgetName: "widget",
- widgetEventPrefix: "",
- defaultElement: "",
-
- options: {
- classes: {},
- disabled: false,
-
- // Callbacks
- create: null
- },
-
- _createWidget: function( options, element ) {
- element = $( element || this.defaultElement || this )[ 0 ];
- this.element = $( element );
- this.uuid = widgetUuid++;
- this.eventNamespace = "." + this.widgetName + this.uuid;
-
- this.bindings = $();
- this.hoverable = $();
- this.focusable = $();
- this.classesElementLookup = {};
-
- if ( element !== this ) {
- $.data( element, this.widgetFullName, this );
- this._on( true, this.element, {
- remove: function( event ) {
- if ( event.target === element ) {
- this.destroy();
- }
- }
- } );
- this.document = $( element.style ?
-
- // Element within the document
- element.ownerDocument :
-
- // Element is window or document
- element.document || element );
- this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
- }
-
- this.options = $.widget.extend( {},
- this.options,
- this._getCreateOptions(),
- options );
-
- this._create();
-
- if ( this.options.disabled ) {
- this._setOptionDisabled( this.options.disabled );
- }
-
- this._trigger( "create", null, this._getCreateEventData() );
- this._init();
- },
-
- _getCreateOptions: function() {
- return {};
- },
-
- _getCreateEventData: $.noop,
-
- _create: $.noop,
-
- _init: $.noop,
-
- destroy: function() {
- var that = this;
-
- this._destroy();
- $.each( this.classesElementLookup, function( key, value ) {
- that._removeClass( value, key );
- } );
-
- // We can probably remove the unbind calls in 2.0
- // all event bindings should go through this._on()
- this.element
- .off( this.eventNamespace )
- .removeData( this.widgetFullName );
- this.widget()
- .off( this.eventNamespace )
- .removeAttr( "aria-disabled" );
-
- // Clean up events and states
- this.bindings.off( this.eventNamespace );
- },
-
- _destroy: $.noop,
-
- widget: function() {
- return this.element;
- },
-
- option: function( key, value ) {
- var options = key;
- var parts;
- var curOption;
- var i;
-
- if ( arguments.length === 0 ) {
-
- // Don't return a reference to the internal hash
- return $.widget.extend( {}, this.options );
- }
-
- if ( typeof key === "string" ) {
-
- // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
- options = {};
- parts = key.split( "." );
- key = parts.shift();
- if ( parts.length ) {
- curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
- for ( i = 0; i < parts.length - 1; i++ ) {
- curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
- curOption = curOption[ parts[ i ] ];
- }
- key = parts.pop();
- if ( arguments.length === 1 ) {
- return curOption[ key ] === undefined ? null : curOption[ key ];
- }
- curOption[ key ] = value;
- } else {
- if ( arguments.length === 1 ) {
- return this.options[ key ] === undefined ? null : this.options[ key ];
- }
- options[ key ] = value;
- }
- }
-
- this._setOptions( options );
-
- return this;
- },
-
- _setOptions: function( options ) {
- var key;
-
- for ( key in options ) {
- this._setOption( key, options[ key ] );
- }
-
- return this;
- },
-
- _setOption: function( key, value ) {
- if ( key === "classes" ) {
- this._setOptionClasses( value );
- }
-
- this.options[ key ] = value;
-
- if ( key === "disabled" ) {
- this._setOptionDisabled( value );
- }
-
- return this;
- },
-
- _setOptionClasses: function( value ) {
- var classKey, elements, currentElements;
-
- for ( classKey in value ) {
- currentElements = this.classesElementLookup[ classKey ];
- if ( value[ classKey ] === this.options.classes[ classKey ] ||
- !currentElements ||
- !currentElements.length ) {
- continue;
- }
-
- // We are doing this to create a new jQuery object because the _removeClass() call
- // on the next line is going to destroy the reference to the current elements being
- // tracked. We need to save a copy of this collection so that we can add the new classes
- // below.
- elements = $( currentElements.get() );
- this._removeClass( currentElements, classKey );
-
- // We don't use _addClass() here, because that uses this.options.classes
- // for generating the string of classes. We want to use the value passed in from
- // _setOption(), this is the new value of the classes option which was passed to
- // _setOption(). We pass this value directly to _classes().
- elements.addClass( this._classes( {
- element: elements,
- keys: classKey,
- classes: value,
- add: true
- } ) );
- }
- },
-
- _setOptionDisabled: function( value ) {
- this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
-
- // If the widget is becoming disabled, then nothing is interactive
- if ( value ) {
- this._removeClass( this.hoverable, null, "ui-state-hover" );
- this._removeClass( this.focusable, null, "ui-state-focus" );
- }
- },
-
- enable: function() {
- return this._setOptions( { disabled: false } );
- },
-
- disable: function() {
- return this._setOptions( { disabled: true } );
- },
-
- _classes: function( options ) {
- var full = [];
- var that = this;
-
- options = $.extend( {
- element: this.element,
- classes: this.options.classes || {}
- }, options );
-
- function processClassString( classes, checkOption ) {
- var current, i;
- for ( i = 0; i < classes.length; i++ ) {
- current = that.classesElementLookup[ classes[ i ] ] || $();
- if ( options.add ) {
- current = $( $.unique( current.get().concat( options.element.get() ) ) );
- } else {
- current = $( current.not( options.element ).get() );
- }
- that.classesElementLookup[ classes[ i ] ] = current;
- full.push( classes[ i ] );
- if ( checkOption && options.classes[ classes[ i ] ] ) {
- full.push( options.classes[ classes[ i ] ] );
- }
- }
- }
-
- this._on( options.element, {
- "remove": "_untrackClassesElement"
- } );
-
- if ( options.keys ) {
- processClassString( options.keys.match( /\S+/g ) || [], true );
- }
- if ( options.extra ) {
- processClassString( options.extra.match( /\S+/g ) || [] );
- }
-
- return full.join( " " );
- },
-
- _untrackClassesElement: function( event ) {
- var that = this;
- $.each( that.classesElementLookup, function( key, value ) {
- if ( $.inArray( event.target, value ) !== -1 ) {
- that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
- }
- } );
- },
-
- _removeClass: function( element, keys, extra ) {
- return this._toggleClass( element, keys, extra, false );
- },
-
- _addClass: function( element, keys, extra ) {
- return this._toggleClass( element, keys, extra, true );
- },
-
- _toggleClass: function( element, keys, extra, add ) {
- add = ( typeof add === "boolean" ) ? add : extra;
- var shift = ( typeof element === "string" || element === null ),
- options = {
- extra: shift ? keys : extra,
- keys: shift ? element : keys,
- element: shift ? this.element : element,
- add: add
- };
- options.element.toggleClass( this._classes( options ), add );
- return this;
- },
-
- _on: function( suppressDisabledCheck, element, handlers ) {
- var delegateElement;
- var instance = this;
-
- // No suppressDisabledCheck flag, shuffle arguments
- if ( typeof suppressDisabledCheck !== "boolean" ) {
- handlers = element;
- element = suppressDisabledCheck;
- suppressDisabledCheck = false;
- }
-
- // No element argument, shuffle and use this.element
- if ( !handlers ) {
- handlers = element;
- element = this.element;
- delegateElement = this.widget();
- } else {
- element = delegateElement = $( element );
- this.bindings = this.bindings.add( element );
- }
-
- $.each( handlers, function( event, handler ) {
- function handlerProxy() {
-
- // Allow widgets to customize the disabled handling
- // - disabled as an array instead of boolean
- // - disabled class as method for disabling individual parts
- if ( !suppressDisabledCheck &&
- ( instance.options.disabled === true ||
- $( this ).hasClass( "ui-state-disabled" ) ) ) {
- return;
- }
- return ( typeof handler === "string" ? instance[ handler ] : handler )
- .apply( instance, arguments );
- }
-
- // Copy the guid so direct unbinding works
- if ( typeof handler !== "string" ) {
- handlerProxy.guid = handler.guid =
- handler.guid || handlerProxy.guid || $.guid++;
- }
-
- var match = event.match( /^([\w:-]*)\s*(.*)$/ );
- var eventName = match[ 1 ] + instance.eventNamespace;
- var selector = match[ 2 ];
-
- if ( selector ) {
- delegateElement.on( eventName, selector, handlerProxy );
- } else {
- element.on( eventName, handlerProxy );
- }
- } );
- },
-
- _off: function( element, eventName ) {
- eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
- this.eventNamespace;
- element.off( eventName ).off( eventName );
-
- // Clear the stack to avoid memory leaks (#10056)
- this.bindings = $( this.bindings.not( element ).get() );
- this.focusable = $( this.focusable.not( element ).get() );
- this.hoverable = $( this.hoverable.not( element ).get() );
- },
-
- _delay: function( handler, delay ) {
- function handlerProxy() {
- return ( typeof handler === "string" ? instance[ handler ] : handler )
- .apply( instance, arguments );
- }
- var instance = this;
- return setTimeout( handlerProxy, delay || 0 );
- },
-
- _hoverable: function( element ) {
- this.hoverable = this.hoverable.add( element );
- this._on( element, {
- mouseenter: function( event ) {
- this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
- },
- mouseleave: function( event ) {
- this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
- }
- } );
- },
-
- _focusable: function( element ) {
- this.focusable = this.focusable.add( element );
- this._on( element, {
- focusin: function( event ) {
- this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
- },
- focusout: function( event ) {
- this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
- }
- } );
- },
-
- _trigger: function( type, event, data ) {
- var prop, orig;
- var callback = this.options[ type ];
-
- data = data || {};
- event = $.Event( event );
- event.type = ( type === this.widgetEventPrefix ?
- type :
- this.widgetEventPrefix + type ).toLowerCase();
-
- // The original event may come from any element
- // so we need to reset the target on the new event
- event.target = this.element[ 0 ];
-
- // Copy original event properties over to the new event
- orig = event.originalEvent;
- if ( orig ) {
- for ( prop in orig ) {
- if ( !( prop in event ) ) {
- event[ prop ] = orig[ prop ];
- }
- }
- }
-
- this.element.trigger( event, data );
- return !( $.isFunction( callback ) &&
- callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
- event.isDefaultPrevented() );
- }
-};
-
-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
- $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
- if ( typeof options === "string" ) {
- options = { effect: options };
- }
-
- var hasOptions;
- var effectName = !options ?
- method :
- options === true || typeof options === "number" ?
- defaultEffect :
- options.effect || defaultEffect;
-
- options = options || {};
- if ( typeof options === "number" ) {
- options = { duration: options };
- }
-
- hasOptions = !$.isEmptyObject( options );
- options.complete = callback;
-
- if ( options.delay ) {
- element.delay( options.delay );
- }
-
- if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
- element[ method ]( options );
- } else if ( effectName !== method && element[ effectName ] ) {
- element[ effectName ]( options.duration, options.easing, callback );
- } else {
- element.queue( function( next ) {
- $( this )[ method ]();
- if ( callback ) {
- callback.call( element[ 0 ] );
- }
- next();
- } );
- }
- };
-} );
-
-var widget = $.widget;
-
-
-/*!
- * jQuery UI :data 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: :data Selector
-//>>group: Core
-//>>description: Selects elements which have data stored under the specified key.
-//>>docs: http://api.jqueryui.com/data-selector/
-
-
-var data = $.extend( $.expr[ ":" ], {
- data: $.expr.createPseudo ?
- $.expr.createPseudo( function( dataName ) {
- return function( elem ) {
- return !!$.data( elem, dataName );
- };
- } ) :
-
- // Support: jQuery <1.8
- function( elem, i, match ) {
- return !!$.data( elem, match[ 3 ] );
- }
-} );
-
-/*!
- * jQuery UI Scroll Parent 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: scrollParent
-//>>group: Core
-//>>description: Get the closest ancestor element that is scrollable.
-//>>docs: http://api.jqueryui.com/scrollParent/
-
-
-
-var scrollParent = $.fn.scrollParent = function( includeHidden ) {
- var position = this.css( "position" ),
- excludeStaticParent = position === "absolute",
- overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
- scrollParent = this.parents().filter( function() {
- var parent = $( this );
- if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
- return false;
- }
- return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
- parent.css( "overflow-x" ) );
- } ).eq( 0 );
-
- return position === "fixed" || !scrollParent.length ?
- $( this[ 0 ].ownerDocument || document ) :
- scrollParent;
-};
-
-
-
-
-// This file is deprecated
-var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
-
-/*!
- * jQuery UI Mouse 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Mouse
-//>>group: Widgets
-//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
-//>>docs: http://api.jqueryui.com/mouse/
-
-
-
-var mouseHandled = false;
-$( document ).on( "mouseup", function() {
- mouseHandled = false;
-} );
-
-var widgetsMouse = $.widget( "ui.mouse", {
- version: "1.12.1",
- options: {
- cancel: "input, textarea, button, select, option",
- distance: 1,
- delay: 0
- },
- _mouseInit: function() {
- var that = this;
-
- this.element
- .on( "mousedown." + this.widgetName, function( event ) {
- return that._mouseDown( event );
- } )
- .on( "click." + this.widgetName, function( event ) {
- if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
- $.removeData( event.target, that.widgetName + ".preventClickEvent" );
- event.stopImmediatePropagation();
- return false;
- }
- } );
-
- this.started = false;
- },
-
- // TODO: make sure destroying one instance of mouse doesn't mess with
- // other instances of mouse
- _mouseDestroy: function() {
- this.element.off( "." + this.widgetName );
- if ( this._mouseMoveDelegate ) {
- this.document
- .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
- .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
- }
- },
-
- _mouseDown: function( event ) {
-
- // don't let more than one widget handle mouseStart
- if ( mouseHandled ) {
- return;
- }
-
- this._mouseMoved = false;
-
- // We may have missed mouseup (out of window)
- ( this._mouseStarted && this._mouseUp( event ) );
-
- this._mouseDownEvent = event;
-
- var that = this,
- btnIsLeft = ( event.which === 1 ),
-
- // event.target.nodeName works around a bug in IE 8 with
- // disabled inputs (#7620)
- elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
- $( event.target ).closest( this.options.cancel ).length : false );
- if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
- return true;
- }
-
- this.mouseDelayMet = !this.options.delay;
- if ( !this.mouseDelayMet ) {
- this._mouseDelayTimer = setTimeout( function() {
- that.mouseDelayMet = true;
- }, this.options.delay );
- }
-
- if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
- this._mouseStarted = ( this._mouseStart( event ) !== false );
- if ( !this._mouseStarted ) {
- event.preventDefault();
- return true;
- }
- }
-
- // Click event may never have fired (Gecko & Opera)
- if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
- $.removeData( event.target, this.widgetName + ".preventClickEvent" );
- }
-
- // These delegates are required to keep context
- this._mouseMoveDelegate = function( event ) {
- return that._mouseMove( event );
- };
- this._mouseUpDelegate = function( event ) {
- return that._mouseUp( event );
- };
-
- this.document
- .on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
- .on( "mouseup." + this.widgetName, this._mouseUpDelegate );
-
- event.preventDefault();
-
- mouseHandled = true;
- return true;
- },
-
- _mouseMove: function( event ) {
-
- // Only check for mouseups outside the document if you've moved inside the document
- // at least once. This prevents the firing of mouseup in the case of IE<9, which will
- // fire a mousemove event if content is placed under the cursor. See #7778
- // Support: IE <9
- if ( this._mouseMoved ) {
-
- // IE mouseup check - mouseup happened when mouse was out of window
- if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
- !event.button ) {
- return this._mouseUp( event );
-
- // Iframe mouseup check - mouseup occurred in another document
- } else if ( !event.which ) {
-
- // Support: Safari <=8 - 9
- // Safari sets which to 0 if you press any of the following keys
- // during a drag (#14461)
- if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
- event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
- this.ignoreMissingWhich = true;
- } else if ( !this.ignoreMissingWhich ) {
- return this._mouseUp( event );
- }
- }
- }
-
- if ( event.which || event.button ) {
- this._mouseMoved = true;
- }
-
- if ( this._mouseStarted ) {
- this._mouseDrag( event );
- return event.preventDefault();
- }
-
- if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
- this._mouseStarted =
- ( this._mouseStart( this._mouseDownEvent, event ) !== false );
- ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );
- }
-
- return !this._mouseStarted;
- },
-
- _mouseUp: function( event ) {
- this.document
- .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
- .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
-
- if ( this._mouseStarted ) {
- this._mouseStarted = false;
-
- if ( event.target === this._mouseDownEvent.target ) {
- $.data( event.target, this.widgetName + ".preventClickEvent", true );
- }
-
- this._mouseStop( event );
- }
-
- if ( this._mouseDelayTimer ) {
- clearTimeout( this._mouseDelayTimer );
- delete this._mouseDelayTimer;
- }
-
- this.ignoreMissingWhich = false;
- mouseHandled = false;
- event.preventDefault();
- },
-
- _mouseDistanceMet: function( event ) {
- return ( Math.max(
- Math.abs( this._mouseDownEvent.pageX - event.pageX ),
- Math.abs( this._mouseDownEvent.pageY - event.pageY )
- ) >= this.options.distance
- );
- },
-
- _mouseDelayMet: function( /* event */ ) {
- return this.mouseDelayMet;
- },
-
- // These are placeholder methods, to be overriden by extending plugin
- _mouseStart: function( /* event */ ) {},
- _mouseDrag: function( /* event */ ) {},
- _mouseStop: function( /* event */ ) {},
- _mouseCapture: function( /* event */ ) { return true; }
-} );
-
-
-/*!
- * jQuery UI Sortable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Sortable
-//>>group: Interactions
-//>>description: Enables items in a list to be sorted using the mouse.
-//>>docs: http://api.jqueryui.com/sortable/
-//>>demos: http://jqueryui.com/sortable/
-//>>css.structure: ../../themes/base/sortable.css
-
-
-
-var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {
- version: "1.12.1",
- widgetEventPrefix: "sort",
- ready: false,
- options: {
- appendTo: "parent",
- axis: false,
- connectWith: false,
- containment: false,
- cursor: "auto",
- cursorAt: false,
- dropOnEmpty: true,
- forcePlaceholderSize: false,
- forceHelperSize: false,
- grid: false,
- handle: false,
- helper: "original",
- items: "> *",
- opacity: false,
- placeholder: false,
- revert: false,
- scroll: true,
- scrollSensitivity: 20,
- scrollSpeed: 20,
- scope: "default",
- tolerance: "intersect",
- zIndex: 1000,
-
- // Callbacks
- activate: null,
- beforeStop: null,
- change: null,
- deactivate: null,
- out: null,
- over: null,
- receive: null,
- remove: null,
- sort: null,
- start: null,
- stop: null,
- update: null
- },
-
- _isOverAxis: function( x, reference, size ) {
- return ( x >= reference ) && ( x < ( reference + size ) );
- },
-
- _isFloating: function( item ) {
- return ( /left|right/ ).test( item.css( "float" ) ) ||
- ( /inline|table-cell/ ).test( item.css( "display" ) );
- },
-
- _create: function() {
- this.containerCache = {};
- this._addClass( "ui-sortable" );
-
- //Get the items
- this.refresh();
-
- //Let's determine the parent's offset
- this.offset = this.element.offset();
-
- //Initialize mouse events for interaction
- this._mouseInit();
-
- this._setHandleClassName();
-
- //We're ready to go
- this.ready = true;
-
- },
-
- _setOption: function( key, value ) {
- this._super( key, value );
-
- if ( key === "handle" ) {
- this._setHandleClassName();
- }
- },
-
- _setHandleClassName: function() {
- var that = this;
- this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" );
- $.each( this.items, function() {
- that._addClass(
- this.instance.options.handle ?
- this.item.find( this.instance.options.handle ) :
- this.item,
- "ui-sortable-handle"
- );
- } );
- },
-
- _destroy: function() {
- this._mouseDestroy();
-
- for ( var i = this.items.length - 1; i >= 0; i-- ) {
- this.items[ i ].item.removeData( this.widgetName + "-item" );
- }
-
- return this;
- },
-
- _mouseCapture: function( event, overrideHandle ) {
- var currentItem = null,
- validHandle = false,
- that = this;
-
- if ( this.reverting ) {
- return false;
- }
-
- if ( this.options.disabled || this.options.type === "static" ) {
- return false;
- }
-
- //We have to refresh the items data once first
- this._refreshItems( event );
-
- //Find out if the clicked node (or one of its parents) is a actual item in this.items
- $( event.target ).parents().each( function() {
- if ( $.data( this, that.widgetName + "-item" ) === that ) {
- currentItem = $( this );
- return false;
- }
- } );
- if ( $.data( event.target, that.widgetName + "-item" ) === that ) {
- currentItem = $( event.target );
- }
-
- if ( !currentItem ) {
- return false;
- }
- if ( this.options.handle && !overrideHandle ) {
- $( this.options.handle, currentItem ).find( "*" ).addBack().each( function() {
- if ( this === event.target ) {
- validHandle = true;
- }
- } );
- if ( !validHandle ) {
- return false;
- }
- }
-
- this.currentItem = currentItem;
- this._removeCurrentsFromItems();
- return true;
-
- },
-
- _mouseStart: function( event, overrideHandle, noActivation ) {
-
- var i, body,
- o = this.options;
-
- this.currentContainer = this;
-
- //We only need to call refreshPositions, because the refreshItems call has been moved to
- // mouseCapture
- this.refreshPositions();
-
- //Create and append the visible helper
- this.helper = this._createHelper( event );
-
- //Cache the helper size
- this._cacheHelperProportions();
-
- /*
- * - Position generation -
- * This block generates everything position related - it's the core of draggables.
- */
-
- //Cache the margins of the original element
- this._cacheMargins();
-
- //Get the next scrolling parent
- this.scrollParent = this.helper.scrollParent();
-
- //The element's absolute position on the page minus margins
- this.offset = this.currentItem.offset();
- this.offset = {
- top: this.offset.top - this.margins.top,
- left: this.offset.left - this.margins.left
- };
-
- $.extend( this.offset, {
- click: { //Where the click happened, relative to the element
- left: event.pageX - this.offset.left,
- top: event.pageY - this.offset.top
- },
- parent: this._getParentOffset(),
-
- // This is a relative to absolute position minus the actual position calculation -
- // only used for relative positioned helper
- relative: this._getRelativeOffset()
- } );
-
- // Only after we got the offset, we can change the helper's position to absolute
- // TODO: Still need to figure out a way to make relative sorting possible
- this.helper.css( "position", "absolute" );
- this.cssPosition = this.helper.css( "position" );
-
- //Generate the original position
- this.originalPosition = this._generatePosition( event );
- this.originalPageX = event.pageX;
- this.originalPageY = event.pageY;
-
- //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
- ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
-
- //Cache the former DOM position
- this.domPosition = {
- prev: this.currentItem.prev()[ 0 ],
- parent: this.currentItem.parent()[ 0 ]
- };
-
- // If the helper is not the original, hide the original so it's not playing any role during
- // the drag, won't cause anything bad this way
- if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
- this.currentItem.hide();
- }
-
- //Create the placeholder
- this._createPlaceholder();
-
- //Set a containment if given in the options
- if ( o.containment ) {
- this._setContainment();
- }
-
- if ( o.cursor && o.cursor !== "auto" ) { // cursor option
- body = this.document.find( "body" );
-
- // Support: IE
- this.storedCursor = body.css( "cursor" );
- body.css( "cursor", o.cursor );
-
- this.storedStylesheet =
- $( "" ).appendTo( body );
- }
-
- if ( o.opacity ) { // opacity option
- if ( this.helper.css( "opacity" ) ) {
- this._storedOpacity = this.helper.css( "opacity" );
- }
- this.helper.css( "opacity", o.opacity );
- }
-
- if ( o.zIndex ) { // zIndex option
- if ( this.helper.css( "zIndex" ) ) {
- this._storedZIndex = this.helper.css( "zIndex" );
- }
- this.helper.css( "zIndex", o.zIndex );
- }
-
- //Prepare scrolling
- if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- this.scrollParent[ 0 ].tagName !== "HTML" ) {
- this.overflowOffset = this.scrollParent.offset();
- }
-
- //Call callbacks
- this._trigger( "start", event, this._uiHash() );
-
- //Recache the helper size
- if ( !this._preserveHelperProportions ) {
- this._cacheHelperProportions();
- }
-
- //Post "activate" events to possible containers
- if ( !noActivation ) {
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
- this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
- }
- }
-
- //Prepare possible droppables
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.current = this;
- }
-
- if ( $.ui.ddmanager && !o.dropBehaviour ) {
- $.ui.ddmanager.prepareOffsets( this, event );
- }
-
- this.dragging = true;
-
- this._addClass( this.helper, "ui-sortable-helper" );
-
- // Execute the drag once - this causes the helper not to be visiblebefore getting its
- // correct position
- this._mouseDrag( event );
- return true;
-
- },
-
- _mouseDrag: function( event ) {
- var i, item, itemElement, intersection,
- o = this.options,
- scrolled = false;
-
- //Compute the helpers position
- this.position = this._generatePosition( event );
- this.positionAbs = this._convertPositionTo( "absolute" );
-
- if ( !this.lastPositionAbs ) {
- this.lastPositionAbs = this.positionAbs;
- }
-
- //Do scrolling
- if ( this.options.scroll ) {
- if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- this.scrollParent[ 0 ].tagName !== "HTML" ) {
-
- if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -
- event.pageY < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollTop =
- scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;
- } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollTop =
- scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;
- }
-
- if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -
- event.pageX < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollLeft = scrolled =
- this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;
- } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollLeft = scrolled =
- this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;
- }
-
- } else {
-
- if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {
- scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );
- } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <
- o.scrollSensitivity ) {
- scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );
- }
-
- if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {
- scrolled = this.document.scrollLeft(
- this.document.scrollLeft() - o.scrollSpeed
- );
- } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <
- o.scrollSensitivity ) {
- scrolled = this.document.scrollLeft(
- this.document.scrollLeft() + o.scrollSpeed
- );
- }
-
- }
-
- if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
- $.ui.ddmanager.prepareOffsets( this, event );
- }
- }
-
- //Regenerate the absolute position used for position checks
- this.positionAbs = this._convertPositionTo( "absolute" );
-
- //Set the helper position
- if ( !this.options.axis || this.options.axis !== "y" ) {
- this.helper[ 0 ].style.left = this.position.left + "px";
- }
- if ( !this.options.axis || this.options.axis !== "x" ) {
- this.helper[ 0 ].style.top = this.position.top + "px";
- }
-
- //Rearrange
- for ( i = this.items.length - 1; i >= 0; i-- ) {
-
- //Cache variables and intersection, continue if no intersection
- item = this.items[ i ];
- itemElement = item.item[ 0 ];
- intersection = this._intersectsWithPointer( item );
- if ( !intersection ) {
- continue;
- }
-
- // Only put the placeholder inside the current Container, skip all
- // items from other containers. This works because when moving
- // an item from one container to another the
- // currentContainer is switched before the placeholder is moved.
- //
- // Without this, moving items in "sub-sortables" can cause
- // the placeholder to jitter between the outer and inner container.
- if ( item.instance !== this.currentContainer ) {
- continue;
- }
-
- // Cannot intersect with itself
- // no useless actions that have been done before
- // no action if the item moved is the parent of the item checked
- if ( itemElement !== this.currentItem[ 0 ] &&
- this.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement &&
- !$.contains( this.placeholder[ 0 ], itemElement ) &&
- ( this.options.type === "semi-dynamic" ?
- !$.contains( this.element[ 0 ], itemElement ) :
- true
- )
- ) {
-
- this.direction = intersection === 1 ? "down" : "up";
-
- if ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) {
- this._rearrange( event, item );
- } else {
- break;
- }
-
- this._trigger( "change", event, this._uiHash() );
- break;
- }
- }
-
- //Post events to containers
- this._contactContainers( event );
-
- //Interconnect with droppables
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.drag( this, event );
- }
-
- //Call callbacks
- this._trigger( "sort", event, this._uiHash() );
-
- this.lastPositionAbs = this.positionAbs;
- return false;
-
- },
-
- _mouseStop: function( event, noPropagation ) {
-
- if ( !event ) {
- return;
- }
-
- //If we are using droppables, inform the manager about the drop
- if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
- $.ui.ddmanager.drop( this, event );
- }
-
- if ( this.options.revert ) {
- var that = this,
- cur = this.placeholder.offset(),
- axis = this.options.axis,
- animation = {};
-
- if ( !axis || axis === "x" ) {
- animation.left = cur.left - this.offset.parent.left - this.margins.left +
- ( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
- 0 :
- this.offsetParent[ 0 ].scrollLeft
- );
- }
- if ( !axis || axis === "y" ) {
- animation.top = cur.top - this.offset.parent.top - this.margins.top +
- ( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
- 0 :
- this.offsetParent[ 0 ].scrollTop
- );
- }
- this.reverting = true;
- $( this.helper ).animate(
- animation,
- parseInt( this.options.revert, 10 ) || 500,
- function() {
- that._clear( event );
- }
- );
- } else {
- this._clear( event, noPropagation );
- }
-
- return false;
-
- },
-
- cancel: function() {
-
- if ( this.dragging ) {
-
- this._mouseUp( new $.Event( "mouseup", { target: null } ) );
-
- if ( this.options.helper === "original" ) {
- this.currentItem.css( this._storedCSS );
- this._removeClass( this.currentItem, "ui-sortable-helper" );
- } else {
- this.currentItem.show();
- }
-
- //Post deactivating events to containers
- for ( var i = this.containers.length - 1; i >= 0; i-- ) {
- this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) );
- if ( this.containers[ i ].containerCache.over ) {
- this.containers[ i ]._trigger( "out", null, this._uiHash( this ) );
- this.containers[ i ].containerCache.over = 0;
- }
- }
-
- }
-
- if ( this.placeholder ) {
-
- //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
- // it unbinds ALL events from the original node!
- if ( this.placeholder[ 0 ].parentNode ) {
- this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
- }
- if ( this.options.helper !== "original" && this.helper &&
- this.helper[ 0 ].parentNode ) {
- this.helper.remove();
- }
-
- $.extend( this, {
- helper: null,
- dragging: false,
- reverting: false,
- _noFinalSort: null
- } );
-
- if ( this.domPosition.prev ) {
- $( this.domPosition.prev ).after( this.currentItem );
- } else {
- $( this.domPosition.parent ).prepend( this.currentItem );
- }
- }
-
- return this;
-
- },
-
- serialize: function( o ) {
-
- var items = this._getItemsAsjQuery( o && o.connected ),
- str = [];
- o = o || {};
-
- $( items ).each( function() {
- var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" )
- .match( o.expression || ( /(.+)[\-=_](.+)/ ) );
- if ( res ) {
- str.push(
- ( o.key || res[ 1 ] + "[]" ) +
- "=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );
- }
- } );
-
- if ( !str.length && o.key ) {
- str.push( o.key + "=" );
- }
-
- return str.join( "&" );
-
- },
-
- toArray: function( o ) {
-
- var items = this._getItemsAsjQuery( o && o.connected ),
- ret = [];
-
- o = o || {};
-
- items.each( function() {
- ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" );
- } );
- return ret;
-
- },
-
- /* Be careful with the following core functions */
- _intersectsWith: function( item ) {
-
- var x1 = this.positionAbs.left,
- x2 = x1 + this.helperProportions.width,
- y1 = this.positionAbs.top,
- y2 = y1 + this.helperProportions.height,
- l = item.left,
- r = l + item.width,
- t = item.top,
- b = t + item.height,
- dyClick = this.offset.click.top,
- dxClick = this.offset.click.left,
- isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t &&
- ( y1 + dyClick ) < b ),
- isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l &&
- ( x1 + dxClick ) < r ),
- isOverElement = isOverElementHeight && isOverElementWidth;
-
- if ( this.options.tolerance === "pointer" ||
- this.options.forcePointerForContainers ||
- ( this.options.tolerance !== "pointer" &&
- this.helperProportions[ this.floating ? "width" : "height" ] >
- item[ this.floating ? "width" : "height" ] )
- ) {
- return isOverElement;
- } else {
-
- return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half
- x2 - ( this.helperProportions.width / 2 ) < r && // Left Half
- t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half
- y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half
-
- }
- },
-
- _intersectsWithPointer: function( item ) {
- var verticalDirection, horizontalDirection,
- isOverElementHeight = ( this.options.axis === "x" ) ||
- this._isOverAxis(
- this.positionAbs.top + this.offset.click.top, item.top, item.height ),
- isOverElementWidth = ( this.options.axis === "y" ) ||
- this._isOverAxis(
- this.positionAbs.left + this.offset.click.left, item.left, item.width ),
- isOverElement = isOverElementHeight && isOverElementWidth;
-
- if ( !isOverElement ) {
- return false;
- }
-
- verticalDirection = this._getDragVerticalDirection();
- horizontalDirection = this._getDragHorizontalDirection();
-
- return this.floating ?
- ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 )
- : ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );
-
- },
-
- _intersectsWithSides: function( item ) {
-
- var isOverBottomHalf = this._isOverAxis( this.positionAbs.top +
- this.offset.click.top, item.top + ( item.height / 2 ), item.height ),
- isOverRightHalf = this._isOverAxis( this.positionAbs.left +
- this.offset.click.left, item.left + ( item.width / 2 ), item.width ),
- verticalDirection = this._getDragVerticalDirection(),
- horizontalDirection = this._getDragHorizontalDirection();
-
- if ( this.floating && horizontalDirection ) {
- return ( ( horizontalDirection === "right" && isOverRightHalf ) ||
- ( horizontalDirection === "left" && !isOverRightHalf ) );
- } else {
- return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) ||
- ( verticalDirection === "up" && !isOverBottomHalf ) );
- }
-
- },
-
- _getDragVerticalDirection: function() {
- var delta = this.positionAbs.top - this.lastPositionAbs.top;
- return delta !== 0 && ( delta > 0 ? "down" : "up" );
- },
-
- _getDragHorizontalDirection: function() {
- var delta = this.positionAbs.left - this.lastPositionAbs.left;
- return delta !== 0 && ( delta > 0 ? "right" : "left" );
- },
-
- refresh: function( event ) {
- this._refreshItems( event );
- this._setHandleClassName();
- this.refreshPositions();
- return this;
- },
-
- _connectWith: function() {
- var options = this.options;
- return options.connectWith.constructor === String ?
- [ options.connectWith ] :
- options.connectWith;
- },
-
- _getItemsAsjQuery: function( connected ) {
-
- var i, j, cur, inst,
- items = [],
- queries = [],
- connectWith = this._connectWith();
-
- if ( connectWith && connected ) {
- for ( i = connectWith.length - 1; i >= 0; i-- ) {
- cur = $( connectWith[ i ], this.document[ 0 ] );
- for ( j = cur.length - 1; j >= 0; j-- ) {
- inst = $.data( cur[ j ], this.widgetFullName );
- if ( inst && inst !== this && !inst.options.disabled ) {
- queries.push( [ $.isFunction( inst.options.items ) ?
- inst.options.items.call( inst.element ) :
- $( inst.options.items, inst.element )
- .not( ".ui-sortable-helper" )
- .not( ".ui-sortable-placeholder" ), inst ] );
- }
- }
- }
- }
-
- queries.push( [ $.isFunction( this.options.items ) ?
- this.options.items
- .call( this.element, null, { options: this.options, item: this.currentItem } ) :
- $( this.options.items, this.element )
- .not( ".ui-sortable-helper" )
- .not( ".ui-sortable-placeholder" ), this ] );
-
- function addItems() {
- items.push( this );
- }
- for ( i = queries.length - 1; i >= 0; i-- ) {
- queries[ i ][ 0 ].each( addItems );
- }
-
- return $( items );
-
- },
-
- _removeCurrentsFromItems: function() {
-
- var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" );
-
- this.items = $.grep( this.items, function( item ) {
- for ( var j = 0; j < list.length; j++ ) {
- if ( list[ j ] === item.item[ 0 ] ) {
- return false;
- }
- }
- return true;
- } );
-
- },
-
- _refreshItems: function( event ) {
-
- this.items = [];
- this.containers = [ this ];
-
- var i, j, cur, inst, targetData, _queries, item, queriesLength,
- items = this.items,
- queries = [ [ $.isFunction( this.options.items ) ?
- this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :
- $( this.options.items, this.element ), this ] ],
- connectWith = this._connectWith();
-
- //Shouldn't be run the first time through due to massive slow-down
- if ( connectWith && this.ready ) {
- for ( i = connectWith.length - 1; i >= 0; i-- ) {
- cur = $( connectWith[ i ], this.document[ 0 ] );
- for ( j = cur.length - 1; j >= 0; j-- ) {
- inst = $.data( cur[ j ], this.widgetFullName );
- if ( inst && inst !== this && !inst.options.disabled ) {
- queries.push( [ $.isFunction( inst.options.items ) ?
- inst.options.items
- .call( inst.element[ 0 ], event, { item: this.currentItem } ) :
- $( inst.options.items, inst.element ), inst ] );
- this.containers.push( inst );
- }
- }
- }
- }
-
- for ( i = queries.length - 1; i >= 0; i-- ) {
- targetData = queries[ i ][ 1 ];
- _queries = queries[ i ][ 0 ];
-
- for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {
- item = $( _queries[ j ] );
-
- // Data for target checking (mouse manager)
- item.data( this.widgetName + "-item", targetData );
-
- items.push( {
- item: item,
- instance: targetData,
- width: 0, height: 0,
- left: 0, top: 0
- } );
- }
- }
-
- },
-
- refreshPositions: function( fast ) {
-
- // Determine whether items are being displayed horizontally
- this.floating = this.items.length ?
- this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
- false;
-
- //This has to be redone because due to the item being moved out/into the offsetParent,
- // the offsetParent's position will change
- if ( this.offsetParent && this.helper ) {
- this.offset.parent = this._getParentOffset();
- }
-
- var i, item, t, p;
-
- for ( i = this.items.length - 1; i >= 0; i-- ) {
- item = this.items[ i ];
-
- //We ignore calculating positions of all connected containers when we're not over them
- if ( item.instance !== this.currentContainer && this.currentContainer &&
- item.item[ 0 ] !== this.currentItem[ 0 ] ) {
- continue;
- }
-
- t = this.options.toleranceElement ?
- $( this.options.toleranceElement, item.item ) :
- item.item;
-
- if ( !fast ) {
- item.width = t.outerWidth();
- item.height = t.outerHeight();
- }
-
- p = t.offset();
- item.left = p.left;
- item.top = p.top;
- }
-
- if ( this.options.custom && this.options.custom.refreshContainers ) {
- this.options.custom.refreshContainers.call( this );
- } else {
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
- p = this.containers[ i ].element.offset();
- this.containers[ i ].containerCache.left = p.left;
- this.containers[ i ].containerCache.top = p.top;
- this.containers[ i ].containerCache.width =
- this.containers[ i ].element.outerWidth();
- this.containers[ i ].containerCache.height =
- this.containers[ i ].element.outerHeight();
- }
- }
-
- return this;
- },
-
- _createPlaceholder: function( that ) {
- that = that || this;
- var className,
- o = that.options;
-
- if ( !o.placeholder || o.placeholder.constructor === String ) {
- className = o.placeholder;
- o.placeholder = {
- element: function() {
-
- var nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),
- element = $( "<" + nodeName + ">", that.document[ 0 ] );
-
- that._addClass( element, "ui-sortable-placeholder",
- className || that.currentItem[ 0 ].className )
- ._removeClass( element, "ui-sortable-helper" );
-
- if ( nodeName === "tbody" ) {
- that._createTrPlaceholder(
- that.currentItem.find( "tr" ).eq( 0 ),
- $( "
", that.document[ 0 ] ).appendTo( element )
- );
- } else if ( nodeName === "tr" ) {
- that._createTrPlaceholder( that.currentItem, element );
- } else if ( nodeName === "img" ) {
- element.attr( "src", that.currentItem.attr( "src" ) );
- }
-
- if ( !className ) {
- element.css( "visibility", "hidden" );
- }
-
- return element;
- },
- update: function( container, p ) {
-
- // 1. If a className is set as 'placeholder option, we don't force sizes -
- // the class is responsible for that
- // 2. The option 'forcePlaceholderSize can be enabled to force it even if a
- // class name is specified
- if ( className && !o.forcePlaceholderSize ) {
- return;
- }
-
- //If the element doesn't have a actual height by itself (without styles coming
- // from a stylesheet), it receives the inline height from the dragged item
- if ( !p.height() ) {
- p.height(
- that.currentItem.innerHeight() -
- parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) -
- parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) );
- }
- if ( !p.width() ) {
- p.width(
- that.currentItem.innerWidth() -
- parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) -
- parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) );
- }
- }
- };
- }
-
- //Create the placeholder
- that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );
-
- //Append it after the actual current item
- that.currentItem.after( that.placeholder );
-
- //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
- o.placeholder.update( that, that.placeholder );
-
- },
-
- _createTrPlaceholder: function( sourceTr, targetTr ) {
- var that = this;
-
- sourceTr.children().each( function() {
- $( "| | ", that.document[ 0 ] )
- .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
- .appendTo( targetTr );
- } );
- },
-
- _contactContainers: function( event ) {
- var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,
- floating, axis,
- innermostContainer = null,
- innermostIndex = null;
-
- // Get innermost container that intersects with item
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
-
- // Never consider a container that's located within the item itself
- if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {
- continue;
- }
-
- if ( this._intersectsWith( this.containers[ i ].containerCache ) ) {
-
- // If we've already found a container and it's more "inner" than this, then continue
- if ( innermostContainer &&
- $.contains(
- this.containers[ i ].element[ 0 ],
- innermostContainer.element[ 0 ] ) ) {
- continue;
- }
-
- innermostContainer = this.containers[ i ];
- innermostIndex = i;
-
- } else {
-
- // container doesn't intersect. trigger "out" event if necessary
- if ( this.containers[ i ].containerCache.over ) {
- this.containers[ i ]._trigger( "out", event, this._uiHash( this ) );
- this.containers[ i ].containerCache.over = 0;
- }
- }
-
- }
-
- // If no intersecting containers found, return
- if ( !innermostContainer ) {
- return;
- }
-
- // Move the item into the container if it's not there already
- if ( this.containers.length === 1 ) {
- if ( !this.containers[ innermostIndex ].containerCache.over ) {
- this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
- this.containers[ innermostIndex ].containerCache.over = 1;
- }
- } else {
-
- // When entering a new container, we will find the item with the least distance and
- // append our item near it
- dist = 10000;
- itemWithLeastDistance = null;
- floating = innermostContainer.floating || this._isFloating( this.currentItem );
- posProperty = floating ? "left" : "top";
- sizeProperty = floating ? "width" : "height";
- axis = floating ? "pageX" : "pageY";
-
- for ( j = this.items.length - 1; j >= 0; j-- ) {
- if ( !$.contains(
- this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )
- ) {
- continue;
- }
- if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {
- continue;
- }
-
- cur = this.items[ j ].item.offset()[ posProperty ];
- nearBottom = false;
- if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
- nearBottom = true;
- }
-
- if ( Math.abs( event[ axis ] - cur ) < dist ) {
- dist = Math.abs( event[ axis ] - cur );
- itemWithLeastDistance = this.items[ j ];
- this.direction = nearBottom ? "up" : "down";
- }
- }
-
- //Check if dropOnEmpty is enabled
- if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {
- return;
- }
-
- if ( this.currentContainer === this.containers[ innermostIndex ] ) {
- if ( !this.currentContainer.containerCache.over ) {
- this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
- this.currentContainer.containerCache.over = 1;
- }
- return;
- }
-
- itemWithLeastDistance ?
- this._rearrange( event, itemWithLeastDistance, null, true ) :
- this._rearrange( event, null, this.containers[ innermostIndex ].element, true );
- this._trigger( "change", event, this._uiHash() );
- this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) );
- this.currentContainer = this.containers[ innermostIndex ];
-
- //Update the placeholder
- this.options.placeholder.update( this.currentContainer, this.placeholder );
-
- this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
- this.containers[ innermostIndex ].containerCache.over = 1;
- }
-
- },
-
- _createHelper: function( event ) {
-
- var o = this.options,
- helper = $.isFunction( o.helper ) ?
- $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :
- ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem );
-
- //Add the helper to the DOM if that didn't happen already
- if ( !helper.parents( "body" ).length ) {
- $( o.appendTo !== "parent" ?
- o.appendTo :
- this.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );
- }
-
- if ( helper[ 0 ] === this.currentItem[ 0 ] ) {
- this._storedCSS = {
- width: this.currentItem[ 0 ].style.width,
- height: this.currentItem[ 0 ].style.height,
- position: this.currentItem.css( "position" ),
- top: this.currentItem.css( "top" ),
- left: this.currentItem.css( "left" )
- };
- }
-
- if ( !helper[ 0 ].style.width || o.forceHelperSize ) {
- helper.width( this.currentItem.width() );
- }
- if ( !helper[ 0 ].style.height || o.forceHelperSize ) {
- helper.height( this.currentItem.height() );
- }
-
- return helper;
-
- },
-
- _adjustOffsetFromHelper: function( obj ) {
- if ( typeof obj === "string" ) {
- obj = obj.split( " " );
- }
- if ( $.isArray( obj ) ) {
- obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
- }
- if ( "left" in obj ) {
- this.offset.click.left = obj.left + this.margins.left;
- }
- if ( "right" in obj ) {
- this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
- }
- if ( "top" in obj ) {
- this.offset.click.top = obj.top + this.margins.top;
- }
- if ( "bottom" in obj ) {
- this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
- }
- },
-
- _getParentOffset: function() {
-
- //Get the offsetParent and cache its position
- this.offsetParent = this.helper.offsetParent();
- var po = this.offsetParent.offset();
-
- // This is a special case where we need to modify a offset calculated on start, since the
- // following happened:
- // 1. The position of the helper is absolute, so it's position is calculated based on the
- // next positioned parent
- // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
- // the document, which means that the scroll is included in the initial calculation of the
- // offset of the parent, and never recalculated upon drag
- if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
- po.left += this.scrollParent.scrollLeft();
- po.top += this.scrollParent.scrollTop();
- }
-
- // This needs to be actually done for all browsers, since pageX/pageY includes this
- // information with an ugly IE fix
- if ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||
- ( this.offsetParent[ 0 ].tagName &&
- this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) {
- po = { top: 0, left: 0 };
- }
-
- return {
- top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
- left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
- };
-
- },
-
- _getRelativeOffset: function() {
-
- if ( this.cssPosition === "relative" ) {
- var p = this.currentItem.position();
- return {
- top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
- this.scrollParent.scrollTop(),
- left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
- this.scrollParent.scrollLeft()
- };
- } else {
- return { top: 0, left: 0 };
- }
-
- },
-
- _cacheMargins: function() {
- this.margins = {
- left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ),
- top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 )
- };
- },
-
- _cacheHelperProportions: function() {
- this.helperProportions = {
- width: this.helper.outerWidth(),
- height: this.helper.outerHeight()
- };
- },
-
- _setContainment: function() {
-
- var ce, co, over,
- o = this.options;
- if ( o.containment === "parent" ) {
- o.containment = this.helper[ 0 ].parentNode;
- }
- if ( o.containment === "document" || o.containment === "window" ) {
- this.containment = [
- 0 - this.offset.relative.left - this.offset.parent.left,
- 0 - this.offset.relative.top - this.offset.parent.top,
- o.containment === "document" ?
- this.document.width() :
- this.window.width() - this.helperProportions.width - this.margins.left,
- ( o.containment === "document" ?
- ( this.document.height() || document.body.parentNode.scrollHeight ) :
- this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight
- ) - this.helperProportions.height - this.margins.top
- ];
- }
-
- if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {
- ce = $( o.containment )[ 0 ];
- co = $( o.containment ).offset();
- over = ( $( ce ).css( "overflow" ) !== "hidden" );
-
- this.containment = [
- co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) +
- ( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left,
- co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) +
- ( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top,
- co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
- ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) -
- ( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) -
- this.helperProportions.width - this.margins.left,
- co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
- ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) -
- ( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) -
- this.helperProportions.height - this.margins.top
- ];
- }
-
- },
-
- _convertPositionTo: function( d, pos ) {
-
- if ( !pos ) {
- pos = this.position;
- }
- var mod = d === "absolute" ? 1 : -1,
- scroll = this.cssPosition === "absolute" &&
- !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
- this.offsetParent :
- this.scrollParent,
- scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
-
- return {
- top: (
-
- // The absolute mouse position
- pos.top +
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.top * mod +
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.top * mod -
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollTop() :
- ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )
- ),
- left: (
-
- // The absolute mouse position
- pos.left +
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.left * mod +
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.left * mod -
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :
- scroll.scrollLeft() ) * mod )
- )
- };
-
- },
-
- _generatePosition: function( event ) {
-
- var top, left,
- o = this.options,
- pageX = event.pageX,
- pageY = event.pageY,
- scroll = this.cssPosition === "absolute" &&
- !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
- this.offsetParent :
- this.scrollParent,
- scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
-
- // This is another very weird special case that only happens for relative elements:
- // 1. If the css position is relative
- // 2. and the scroll parent is the document or similar to the offset parent
- // we have to refresh the relative offset during the scroll so there are no jumps
- if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {
- this.offset.relative = this._getRelativeOffset();
- }
-
- /*
- * - Position constraining -
- * Constrain the position to a mix of grid, containment.
- */
-
- if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options
-
- if ( this.containment ) {
- if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {
- pageX = this.containment[ 0 ] + this.offset.click.left;
- }
- if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {
- pageY = this.containment[ 1 ] + this.offset.click.top;
- }
- if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {
- pageX = this.containment[ 2 ] + this.offset.click.left;
- }
- if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {
- pageY = this.containment[ 3 ] + this.offset.click.top;
- }
- }
-
- if ( o.grid ) {
- top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /
- o.grid[ 1 ] ) * o.grid[ 1 ];
- pageY = this.containment ?
- ( ( top - this.offset.click.top >= this.containment[ 1 ] &&
- top - this.offset.click.top <= this.containment[ 3 ] ) ?
- top :
- ( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?
- top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :
- top;
-
- left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /
- o.grid[ 0 ] ) * o.grid[ 0 ];
- pageX = this.containment ?
- ( ( left - this.offset.click.left >= this.containment[ 0 ] &&
- left - this.offset.click.left <= this.containment[ 2 ] ) ?
- left :
- ( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?
- left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :
- left;
- }
-
- }
-
- return {
- top: (
-
- // The absolute mouse position
- pageY -
-
- // Click offset (relative to the element)
- this.offset.click.top -
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.top -
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.top +
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollTop() :
- ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )
- ),
- left: (
-
- // The absolute mouse position
- pageX -
-
- // Click offset (relative to the element)
- this.offset.click.left -
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.left -
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.left +
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollLeft() :
- scrollIsRootNode ? 0 : scroll.scrollLeft() ) )
- )
- };
-
- },
-
- _rearrange: function( event, i, a, hardRefresh ) {
-
- a ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :
- i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],
- ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );
-
- //Various things done here to improve the performance:
- // 1. we create a setTimeout, that calls refreshPositions
- // 2. on the instance, we have a counter variable, that get's higher after every append
- // 3. on the local scope, we copy the counter variable, and check in the timeout,
- // if it's still the same
- // 4. this lets only the last addition to the timeout stack through
- this.counter = this.counter ? ++this.counter : 1;
- var counter = this.counter;
-
- this._delay( function() {
- if ( counter === this.counter ) {
-
- //Precompute after each DOM insertion, NOT on mousemove
- this.refreshPositions( !hardRefresh );
- }
- } );
-
- },
-
- _clear: function( event, noPropagation ) {
-
- this.reverting = false;
-
- // We delay all events that have to be triggered to after the point where the placeholder
- // has been removed and everything else normalized again
- var i,
- delayedTriggers = [];
-
- // We first have to update the dom position of the actual currentItem
- // Note: don't do it if the current item is already removed (by a user), or it gets
- // reappended (see #4088)
- if ( !this._noFinalSort && this.currentItem.parent().length ) {
- this.placeholder.before( this.currentItem );
- }
- this._noFinalSort = null;
-
- if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {
- for ( i in this._storedCSS ) {
- if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) {
- this._storedCSS[ i ] = "";
- }
- }
- this.currentItem.css( this._storedCSS );
- this._removeClass( this.currentItem, "ui-sortable-helper" );
- } else {
- this.currentItem.show();
- }
-
- if ( this.fromOutside && !noPropagation ) {
- delayedTriggers.push( function( event ) {
- this._trigger( "receive", event, this._uiHash( this.fromOutside ) );
- } );
- }
- if ( ( this.fromOutside ||
- this.domPosition.prev !==
- this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] ||
- this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {
-
- // Trigger update callback if the DOM position has changed
- delayedTriggers.push( function( event ) {
- this._trigger( "update", event, this._uiHash() );
- } );
- }
-
- // Check if the items Container has Changed and trigger appropriate
- // events.
- if ( this !== this.currentContainer ) {
- if ( !noPropagation ) {
- delayedTriggers.push( function( event ) {
- this._trigger( "remove", event, this._uiHash() );
- } );
- delayedTriggers.push( ( function( c ) {
- return function( event ) {
- c._trigger( "receive", event, this._uiHash( this ) );
- };
- } ).call( this, this.currentContainer ) );
- delayedTriggers.push( ( function( c ) {
- return function( event ) {
- c._trigger( "update", event, this._uiHash( this ) );
- };
- } ).call( this, this.currentContainer ) );
- }
- }
-
- //Post events to containers
- function delayEvent( type, instance, container ) {
- return function( event ) {
- container._trigger( type, event, instance._uiHash( instance ) );
- };
- }
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
- if ( !noPropagation ) {
- delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
- }
- if ( this.containers[ i ].containerCache.over ) {
- delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
- this.containers[ i ].containerCache.over = 0;
- }
- }
-
- //Do what was originally in plugins
- if ( this.storedCursor ) {
- this.document.find( "body" ).css( "cursor", this.storedCursor );
- this.storedStylesheet.remove();
- }
- if ( this._storedOpacity ) {
- this.helper.css( "opacity", this._storedOpacity );
- }
- if ( this._storedZIndex ) {
- this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex );
- }
-
- this.dragging = false;
-
- if ( !noPropagation ) {
- this._trigger( "beforeStop", event, this._uiHash() );
- }
-
- //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
- // it unbinds ALL events from the original node!
- this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
-
- if ( !this.cancelHelperRemoval ) {
- if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
- this.helper.remove();
- }
- this.helper = null;
- }
-
- if ( !noPropagation ) {
- for ( i = 0; i < delayedTriggers.length; i++ ) {
-
- // Trigger all delayed events
- delayedTriggers[ i ].call( this, event );
- }
- this._trigger( "stop", event, this._uiHash() );
- }
-
- this.fromOutside = false;
- return !this.cancelHelperRemoval;
-
- },
-
- _trigger: function() {
- if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {
- this.cancel();
- }
- },
-
- _uiHash: function( _inst ) {
- var inst = _inst || this;
- return {
- helper: inst.helper,
- placeholder: inst.placeholder || $( [] ),
- position: inst.position,
- originalPosition: inst.originalPosition,
- offset: inst.positionAbs,
- item: inst.currentItem,
- sender: _inst ? _inst.element : null
- };
- }
-
-} );
-
-
-
-
-}));
\ No newline at end of file
diff --git a/src/Resources/public/jquery-ui.min.css b/src/Resources/public/jquery-ui.min.css
deleted file mode 100644
index 78955f7..0000000
--- a/src/Resources/public/jquery-ui.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery UI - v1.12.1 - 2021-05-31
-* http://jqueryui.com
-* Includes: sortable.css
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-sortable-handle{-ms-touch-action:none;touch-action:none}
\ No newline at end of file
diff --git a/src/Resources/public/jquery-ui.min.js b/src/Resources/public/jquery-ui.min.js
deleted file mode 100644
index 8027085..0000000
--- a/src/Resources/public/jquery-ui.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery UI - v1.12.1 - 2021-05-31
-* http://jqueryui.com
-* Includes: widget.js, data.js, scroll-parent.js, widgets/sortable.js, widgets/mouse.js
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(f){f.ui=f.ui||{};f.ui.version="1.12.1";var o,i=0,h=Array.prototype.slice;f.cleanData=(o=f.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)try{(e=f._data(i,"events"))&&e.remove&&f(i).triggerHandler("remove")}catch(t){}o(t)}),f.widget=function(t,i,e){var s,o,n,r={},h=t.split(".")[0],a=h+"-"+(t=t.split(".")[1]);return e||(e=i,i=f.Widget),f.isArray(e)&&(e=f.extend.apply(null,[{}].concat(e))),f.expr[":"][a.toLowerCase()]=function(t){return!!f.data(t,a)},f[h]=f[h]||{},s=f[h][t],o=f[h][t]=function(t,e){if(!this._createWidget)return new o(t,e);arguments.length&&this._createWidget(t,e)},f.extend(o,s,{version:e.version,_proto:f.extend({},e),_childConstructors:[]}),(n=new i).options=f.widget.extend({},n.options),f.each(e,function(e,s){function o(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}f.isFunction(s)?r[e]=function(){var t,e=this._super,i=this._superApply;return this._super=o,this._superApply=n,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:r[e]=s}),o.prototype=f.widget.extend(n,{widgetEventPrefix:s&&n.widgetEventPrefix||t},r,{constructor:o,namespace:h,widgetName:t,widgetFullName:a}),s?(f.each(s._childConstructors,function(t,e){var i=e.prototype;f.widget(i.namespace+"."+i.widgetName,o,e._proto)}),delete s._childConstructors):i._childConstructors.push(o),f.widget.bridge(t,o),o},f.widget.extend=function(t){for(var e,i,s=h.call(arguments,1),o=0,n=s.length;o",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=f(e||this.defaultElement||this)[0],this.element=f(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=f(),this.hoverable=f(),this.focusable=f(),this.classesElementLookup={},e!==this&&(f.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=f(e.style?e.ownerDocument:e.document||e),this.window=f(this.document[0].defaultView||this.document[0].parentWindow)),this.options=f.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:f.noop,_create:f.noop,_init:f.noop,destroy:function(){var i=this;this._destroy(),f.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:f.noop,widget:function(){return this.element},option:function(t,e){var i,s,o,n=t;if(0===arguments.length)return f.widget.extend({},this.options);if("string"==typeof t)if(n={},t=(i=t.split(".")).shift(),i.length){for(s=n[t]=f.widget.extend({},this.options[t]),o=0;o=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),f.widget("ui.sortable",f.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t*{ cursor: "+n.cursor+" !important; }").appendTo(o)),n.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",n.opacity)),n.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",n.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!i)for(s=this.containers.length-1;0<=s;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return f.ui.ddmanager&&(f.ui.ddmanager.current=this),f.ui.ddmanager&&!n.dropBehaviour&&f.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var e,i,s,o,n=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageYt[this.floating?"width":"height"]?c:n",i.document[0]);return i._addClass(e,"ui-sortable-placeholder",s||i.currentItem[0].className)._removeClass(e,"ui-sortable-helper"),"tbody"===t?i._createTrPlaceholder(i.currentItem.find("tr").eq(0),f("",i.document[0]).appendTo(e)):"tr"===t?i._createTrPlaceholder(i.currentItem,e):"img"===t&&e.attr("src",i.currentItem.attr("src")),s||e.css("visibility","hidden"),e},update:function(t,e){s&&!o.forcePlaceholderSize||(e.height()||e.height(i.currentItem.innerHeight()-parseInt(i.currentItem.css("paddingTop")||0,10)-parseInt(i.currentItem.css("paddingBottom")||0,10)),e.width()||e.width(i.currentItem.innerWidth()-parseInt(i.currentItem.css("paddingLeft")||0,10)-parseInt(i.currentItem.css("paddingRight")||0,10)))}}),i.placeholder=f(o.placeholder.element.call(i.element,i.currentItem)),i.currentItem.after(i.placeholder),o.placeholder.update(i,i.placeholder)},_createTrPlaceholder:function(t,e){var i=this;t.children().each(function(){f("| | ",i.document[0]).attr("colspan",f(this).attr("colspan")||1).appendTo(e)})},_contactContainers:function(t){for(var e,i,s,o,n,r,h,a,l,c=null,u=null,p=this.containers.length-1;0<=p;p--)f.contains(this.currentItem[0],this.containers[p].element[0])||(this._intersectsWith(this.containers[p].containerCache)?c&&f.contains(this.containers[p].element[0],c.element[0])||(c=this.containers[p],u=p):this.containers[p].containerCache.over&&(this.containers[p]._trigger("out",t,this._uiHash(this)),this.containers[p].containerCache.over=0));if(c)if(1===this.containers.length)this.containers[u].containerCache.over||(this.containers[u]._trigger("over",t,this._uiHash(this)),this.containers[u].containerCache.over=1);else{for(i=1e4,s=null,o=(a=c.floating||this._isFloating(this.currentItem))?"left":"top",n=a?"width":"height",l=a?"pageX":"pageY",e=this.items.length-1;0<=e;e--)f.contains(this.containers[u].element[0],this.items[e].item[0])&&this.items[e].item[0]!==this.currentItem[0]&&(r=this.items[e].item.offset()[o],h=!1,t[l]-r>this.items[e][n]/2&&(h=!0),Math.abs(t[l]-r)this.containment[2]&&(i=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(s=this.containment[3]+this.offset.click.top)),e.grid&&(t=this.originalPageY+Math.round((s-this.originalPageY)/e.grid[1])*e.grid[1],s=!this.containment||t-this.offset.click.top>=this.containment[1]&&t-this.offset.click.top<=this.containment[3]?t:t-this.offset.click.top>=this.containment[1]?t-e.grid[1]:t+e.grid[1],t=this.originalPageX+Math.round((i-this.originalPageX)/e.grid[0])*e.grid[0],i=!this.containment||t-this.offset.click.left>=this.containment[0]&&t-this.offset.click.left<=this.containment[2]?t:t-this.offset.click.left>=this.containment[0]?t-e.grid[0]:t+e.grid[0])),{top:s-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():n?0:o.scrollTop()),left:i-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():n?0:o.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var o=this.counter;this._delay(function(){o===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function o(e,i,s){return function(t){s._trigger(e,t,i._uiHash(i))}}for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;0<=i;i--)e||s.push(o("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(o("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i
- */
-
-.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {
- visibility: visible !important;
- background: #f2f2f2 !important;
- background: rgba(0, 0, 0, 0.06) !important;
- border: 0 none !important;
- -webkit-box-shadow: inset 0 0 12px 4px #fff;
- box-shadow: inset 0 0 12px 4px #fff;
-}
-.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {
- content: '!';
- visibility: hidden;
-}
-.selectize-control.plugin-drag_drop .ui-sortable-helper {
- -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
-}
-.selectize-dropdown-header {
- position: relative;
- padding: 5px 8px;
- border-bottom: 1px solid #d0d0d0;
- background: #f8f8f8;
- -webkit-border-radius: 3px 3px 0 0;
- -moz-border-radius: 3px 3px 0 0;
- border-radius: 3px 3px 0 0;
-}
-.selectize-dropdown-header-close {
- position: absolute;
- right: 8px;
- top: 50%;
- color: #303030;
- opacity: 0.4;
- margin-top: -12px;
- line-height: 20px;
- font-size: 20px !important;
-}
-.selectize-dropdown-header-close:hover {
- color: #000000;
-}
-.selectize-dropdown.plugin-optgroup_columns .optgroup {
- border-right: 1px solid #f2f2f2;
- border-top: 0 none;
- float: left;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {
- border-right: 0 none;
-}
-.selectize-dropdown.plugin-optgroup_columns .optgroup:before {
- display: none;
-}
-.selectize-dropdown.plugin-optgroup_columns .optgroup-header {
- border-top: 0 none;
-}
-.selectize-control.plugin-remove_button [data-value] {
- position: relative;
- padding-right: 24px !important;
-}
-.selectize-control.plugin-remove_button [data-value] .remove {
- z-index: 1;
- /* fixes ie bug (see #392) */
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- width: 17px;
- text-align: center;
- font-weight: bold;
- font-size: 12px;
- color: inherit;
- text-decoration: none;
- vertical-align: middle;
- display: inline-block;
- padding: 2px 0 0 0;
- border-left: 1px solid #d0d0d0;
- -webkit-border-radius: 0 2px 2px 0;
- -moz-border-radius: 0 2px 2px 0;
- border-radius: 0 2px 2px 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.selectize-control.plugin-remove_button [data-value] .remove:hover {
- background: rgba(0, 0, 0, 0.05);
-}
-.selectize-control.plugin-remove_button [data-value].active .remove {
- border-left-color: #cacaca;
-}
-.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {
- background: none;
-}
-.selectize-control.plugin-remove_button .disabled [data-value] .remove {
- border-left-color: #ffffff;
-}
-.selectize-control.plugin-remove_button .remove-single {
- position: absolute;
- right: 0;
- top: 0;
- font-size: 23px;
-}
-.selectize-control {
- position: relative;
-}
-.selectize-dropdown,
-.selectize-input,
-.selectize-input input {
- color: #303030;
- font-family: inherit;
- font-size: 13px;
- line-height: 18px;
- -webkit-font-smoothing: inherit;
-}
-.selectize-input,
-.selectize-control.single .selectize-input.input-active {
- background: #fff;
- cursor: text;
- display: inline-block;
-}
-.selectize-input {
- border: 1px solid #d0d0d0;
- padding: 8px 8px;
- display: inline-block;
- width: 100%;
- overflow: hidden;
- position: relative;
- z-index: 1;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.selectize-control.multi .selectize-input.has-items {
- padding: 6px 8px 3px;
-}
-.selectize-input.full {
- background-color: #fff;
-}
-.selectize-input.disabled,
-.selectize-input.disabled * {
- cursor: default !important;
-}
-.selectize-input.focus {
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
-}
-.selectize-input.dropdown-active {
- -webkit-border-radius: 3px 3px 0 0;
- -moz-border-radius: 3px 3px 0 0;
- border-radius: 3px 3px 0 0;
-}
-.selectize-input > * {
- vertical-align: baseline;
- display: -moz-inline-stack;
- display: inline-block;
- zoom: 1;
- *display: inline;
-}
-.selectize-control.multi .selectize-input > div {
- cursor: pointer;
- margin: 0 3px 3px 0;
- padding: 2px 6px;
- background: #f2f2f2;
- color: #303030;
- border: 0 solid #d0d0d0;
-}
-.selectize-control.multi .selectize-input > div.active {
- background: #e8e8e8;
- color: #303030;
- border: 0 solid #cacaca;
-}
-.selectize-control.multi .selectize-input.disabled > div,
-.selectize-control.multi .selectize-input.disabled > div.active {
- color: #7d7d7d;
- background: #ffffff;
- border: 0 solid #ffffff;
-}
-.selectize-input > input {
- display: inline-block !important;
- padding: 0 !important;
- min-height: 0 !important;
- max-height: none !important;
- max-width: 100% !important;
- margin: 0 2px 0 0 !important;
- text-indent: 0 !important;
- border: 0 none !important;
- background: none !important;
- line-height: inherit !important;
- -webkit-user-select: auto !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
-}
-.selectize-input > input::-ms-clear {
- display: none;
-}
-.selectize-input > input:focus {
- outline: none !important;
-}
-.selectize-input::after {
- content: ' ';
- display: block;
- clear: left;
-}
-.selectize-input.dropdown-active::before {
- content: ' ';
- display: block;
- position: absolute;
- background: #f0f0f0;
- height: 1px;
- bottom: 0;
- left: 0;
- right: 0;
-}
-.selectize-dropdown {
- position: absolute;
- z-index: 10;
- border: 1px solid #d0d0d0;
- background: #fff;
- margin: -1px 0 0 0;
- border-top: 0 none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
- -webkit-border-radius: 0 0 3px 3px;
- -moz-border-radius: 0 0 3px 3px;
- border-radius: 0 0 3px 3px;
-}
-.selectize-dropdown [data-selectable] {
- cursor: pointer;
- overflow: hidden;
-}
-.selectize-dropdown [data-selectable] .highlight {
- background: rgba(125, 168, 208, 0.2);
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- border-radius: 1px;
-}
-.selectize-dropdown .option,
-.selectize-dropdown .optgroup-header {
- padding: 5px 8px;
-}
-.selectize-dropdown .option,
-.selectize-dropdown [data-disabled],
-.selectize-dropdown [data-disabled] [data-selectable].option {
- cursor: inherit;
- opacity: 0.5;
-}
-.selectize-dropdown [data-selectable].option {
- opacity: 1;
-}
-.selectize-dropdown .optgroup:first-child .optgroup-header {
- border-top: 0 none;
-}
-.selectize-dropdown .optgroup-header {
- color: #303030;
- background: #fff;
- cursor: default;
-}
-.selectize-dropdown .active {
- background-color: #f5fafd;
- color: #495c68;
-}
-.selectize-dropdown .active.create {
- color: #495c68;
-}
-.selectize-dropdown .create {
- color: rgba(48, 48, 48, 0.5);
-}
-.selectize-dropdown-content {
- overflow-y: auto;
- overflow-x: hidden;
- max-height: 200px;
- -webkit-overflow-scrolling: touch;
-}
-.selectize-control.single .selectize-input,
-.selectize-control.single .selectize-input input {
- cursor: pointer;
-}
-.selectize-control.single .selectize-input.input-active,
-.selectize-control.single .selectize-input.input-active input {
- cursor: text;
-}
-.selectize-control.single .selectize-input:after {
- content: ' ';
- display: block;
- position: absolute;
- top: 50%;
- right: 15px;
- margin-top: -3px;
- width: 0;
- height: 0;
- border-style: solid;
- border-width: 5px 5px 0 5px;
- border-color: #808080 transparent transparent transparent;
-}
-.selectize-control.single .selectize-input.dropdown-active:after {
- margin-top: -4px;
- border-width: 0 5px 5px 5px;
- border-color: transparent transparent #808080 transparent;
-}
-.selectize-control.rtl.single .selectize-input:after {
- left: 15px;
- right: auto;
-}
-.selectize-control.rtl .selectize-input > input {
- margin: 0 4px 0 -2px !important;
-}
-.selectize-control .selectize-input.disabled {
- opacity: 0.5;
- background-color: #fafafa;
-}
diff --git a/src/Resources/public/selectize.js b/src/Resources/public/selectize.js
deleted file mode 100644
index e064981..0000000
--- a/src/Resources/public/selectize.js
+++ /dev/null
@@ -1,3891 +0,0 @@
-/**
- * sifter.js
- * Copyright (c) 2013 Brian Reavis & contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
- * file except in compliance with the License. You may obtain a copy of the License at:
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
- * ANY KIND, either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
- *
- * @author Brian Reavis
- */
-
-(function(root, factory) {
- if (typeof define === 'function' && define.amd) {
- define('sifter', factory);
- } else if (typeof exports === 'object') {
- module.exports = factory();
- } else {
- root.Sifter = factory();
- }
-}(this, function() {
-
- /**
- * Textually searches arrays and hashes of objects
- * by property (or multiple properties). Designed
- * specifically for autocomplete.
- *
- * @constructor
- * @param {array|object} items
- * @param {object} items
- */
- var Sifter = function(items, settings) {
- this.items = items;
- this.settings = settings || {diacritics: true};
- };
-
- /**
- * Splits a search string into an array of individual
- * regexps to be used to match results.
- *
- * @param {string} query
- * @returns {array}
- */
- Sifter.prototype.tokenize = function(query) {
- query = trim(String(query || '').toLowerCase());
- if (!query || !query.length) return [];
-
- var i, n, regex, letter;
- var tokens = [];
- var words = query.split(/ +/);
-
- for (i = 0, n = words.length; i < n; i++) {
- regex = escape_regex(words[i]);
- if (this.settings.diacritics) {
- for (letter in DIACRITICS) {
- if (DIACRITICS.hasOwnProperty(letter)) {
- regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);
- }
- }
- }
- tokens.push({
- string : words[i],
- regex : new RegExp(regex, 'i')
- });
- }
-
- return tokens;
- };
-
- /**
- * Iterates over arrays and hashes.
- *
- * ```
- * this.iterator(this.items, function(item, id) {
- * // invoked for each item
- * });
- * ```
- *
- * @param {array|object} object
- */
- Sifter.prototype.iterator = function(object, callback) {
- var iterator;
- if (is_array(object)) {
- iterator = Array.prototype.forEach || function(callback) {
- for (var i = 0, n = this.length; i < n; i++) {
- callback(this[i], i, this);
- }
- };
- } else {
- iterator = function(callback) {
- for (var key in this) {
- if (this.hasOwnProperty(key)) {
- callback(this[key], key, this);
- }
- }
- };
- }
-
- iterator.apply(object, [callback]);
- };
-
- /**
- * Returns a function to be used to score individual results.
- *
- * Good matches will have a higher score than poor matches.
- * If an item is not a match, 0 will be returned by the function.
- *
- * @param {object|string} search
- * @param {object} options (optional)
- * @returns {function}
- */
- Sifter.prototype.getScoreFunction = function(search, options) {
- var self, fields, tokens, token_count, nesting;
-
- self = this;
- search = self.prepareSearch(search, options);
- tokens = search.tokens;
- fields = search.options.fields;
- token_count = tokens.length;
- nesting = search.options.nesting;
-
- /**
- * Calculates how close of a match the
- * given value is against a search token.
- *
- * @param {mixed} value
- * @param {object} token
- * @return {number}
- */
- var scoreValue = function(value, token) {
- var score, pos;
-
- if (!value) return 0;
- value = String(value || '');
- pos = value.search(token.regex);
- if (pos === -1) return 0;
- score = token.string.length / value.length;
- if (pos === 0) score += 0.5;
- return score;
- };
-
- /**
- * Calculates the score of an object
- * against the search query.
- *
- * @param {object} token
- * @param {object} data
- * @return {number}
- */
- var scoreObject = (function() {
- var field_count = fields.length;
- if (!field_count) {
- return function() { return 0; };
- }
- if (field_count === 1) {
- return function(token, data) {
- return scoreValue(getattr(data, fields[0], nesting), token);
- };
- }
- return function(token, data) {
- for (var i = 0, sum = 0; i < field_count; i++) {
- sum += scoreValue(getattr(data, fields[i], nesting), token);
- }
- return sum / field_count;
- };
- })();
-
- if (!token_count) {
- return function() { return 0; };
- }
- if (token_count === 1) {
- return function(data) {
- return scoreObject(tokens[0], data);
- };
- }
-
- if (search.options.conjunction === 'and') {
- return function(data) {
- var score;
- for (var i = 0, sum = 0; i < token_count; i++) {
- score = scoreObject(tokens[i], data);
- if (score <= 0) return 0;
- sum += score;
- }
- return sum / token_count;
- };
- } else {
- return function(data) {
- for (var i = 0, sum = 0; i < token_count; i++) {
- sum += scoreObject(tokens[i], data);
- }
- return sum / token_count;
- };
- }
- };
-
- /**
- * Returns a function that can be used to compare two
- * results, for sorting purposes. If no sorting should
- * be performed, `null` will be returned.
- *
- * @param {string|object} search
- * @param {object} options
- * @return function(a,b)
- */
- Sifter.prototype.getSortFunction = function(search, options) {
- var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort;
-
- self = this;
- search = self.prepareSearch(search, options);
- sort = (!search.query && options.sort_empty) || options.sort;
-
- /**
- * Fetches the specified sort field value
- * from a search result item.
- *
- * @param {string} name
- * @param {object} result
- * @return {mixed}
- */
- get_field = function(name, result) {
- if (name === '$score') return result.score;
- return getattr(self.items[result.id], name, options.nesting);
- };
-
- // parse options
- fields = [];
- if (sort) {
- for (i = 0, n = sort.length; i < n; i++) {
- if (search.query || sort[i].field !== '$score') {
- fields.push(sort[i]);
- }
- }
- }
-
- // the "$score" field is implied to be the primary
- // sort field, unless it's manually specified
- if (search.query) {
- implicit_score = true;
- for (i = 0, n = fields.length; i < n; i++) {
- if (fields[i].field === '$score') {
- implicit_score = false;
- break;
- }
- }
- if (implicit_score) {
- fields.unshift({field: '$score', direction: 'desc'});
- }
- } else {
- for (i = 0, n = fields.length; i < n; i++) {
- if (fields[i].field === '$score') {
- fields.splice(i, 1);
- break;
- }
- }
- }
-
- multipliers = [];
- for (i = 0, n = fields.length; i < n; i++) {
- multipliers.push(fields[i].direction === 'desc' ? -1 : 1);
- }
-
- // build function
- fields_count = fields.length;
- if (!fields_count) {
- return null;
- } else if (fields_count === 1) {
- field = fields[0].field;
- multiplier = multipliers[0];
- return function(a, b) {
- return multiplier * cmp(
- get_field(field, a),
- get_field(field, b)
- );
- };
- } else {
- return function(a, b) {
- var i, result, a_value, b_value, field;
- for (i = 0; i < fields_count; i++) {
- field = fields[i].field;
- result = multipliers[i] * cmp(
- get_field(field, a),
- get_field(field, b)
- );
- if (result) return result;
- }
- return 0;
- };
- }
- };
-
- /**
- * Parses a search query and returns an object
- * with tokens and fields ready to be populated
- * with results.
- *
- * @param {string} query
- * @param {object} options
- * @returns {object}
- */
- Sifter.prototype.prepareSearch = function(query, options) {
- if (typeof query === 'object') return query;
-
- options = extend({}, options);
-
- var option_fields = options.fields;
- var option_sort = options.sort;
- var option_sort_empty = options.sort_empty;
-
- if (option_fields && !is_array(option_fields)) options.fields = [option_fields];
- if (option_sort && !is_array(option_sort)) options.sort = [option_sort];
- if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty];
-
- return {
- options : options,
- query : String(query || '').toLowerCase(),
- tokens : this.tokenize(query),
- total : 0,
- items : []
- };
- };
-
- /**
- * Searches through all items and returns a sorted array of matches.
- *
- * The `options` parameter can contain:
- *
- * - fields {string|array}
- * - sort {array}
- * - score {function}
- * - filter {bool}
- * - limit {integer}
- *
- * Returns an object containing:
- *
- * - options {object}
- * - query {string}
- * - tokens {array}
- * - total {int}
- * - items {array}
- *
- * @param {string} query
- * @param {object} options
- * @returns {object}
- */
- Sifter.prototype.search = function(query, options) {
- var self = this, value, score, search, calculateScore;
- var fn_sort;
- var fn_score;
-
- search = this.prepareSearch(query, options);
- options = search.options;
- query = search.query;
-
- // generate result scoring function
- fn_score = options.score || self.getScoreFunction(search);
-
- // perform search and sort
- if (query.length) {
- self.iterator(self.items, function(item, id) {
- score = fn_score(item);
- if (options.filter === false || score > 0) {
- search.items.push({'score': score, 'id': id});
- }
- });
- } else {
- self.iterator(self.items, function(item, id) {
- search.items.push({'score': 1, 'id': id});
- });
- }
-
- fn_sort = self.getSortFunction(search, options);
- if (fn_sort) search.items.sort(fn_sort);
-
- // apply limits
- search.total = search.items.length;
- if (typeof options.limit === 'number') {
- search.items = search.items.slice(0, options.limit);
- }
-
- return search;
- };
-
- // utilities
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- var cmp = function(a, b) {
- if (typeof a === 'number' && typeof b === 'number') {
- return a > b ? 1 : (a < b ? -1 : 0);
- }
- a = asciifold(String(a || ''));
- b = asciifold(String(b || ''));
- if (a > b) return 1;
- if (b > a) return -1;
- return 0;
- };
-
- var extend = function(a, b) {
- var i, n, k, object;
- for (i = 1, n = arguments.length; i < n; i++) {
- object = arguments[i];
- if (!object) continue;
- for (k in object) {
- if (object.hasOwnProperty(k)) {
- a[k] = object[k];
- }
- }
- }
- return a;
- };
-
- /**
- * A property getter resolving dot-notation
- * @param {Object} obj The root object to fetch property on
- * @param {String} name The optionally dotted property name to fetch
- * @param {Boolean} nesting Handle nesting or not
- * @return {Object} The resolved property value
- */
- var getattr = function(obj, name, nesting) {
- if (!obj || !name) return;
- if (!nesting) return obj[name];
- var names = name.split(".");
- while(names.length && (obj = obj[names.shift()]));
- return obj;
- };
-
- var trim = function(str) {
- return (str + '').replace(/^\s+|\s+$|/g, '');
- };
-
- var escape_regex = function(str) {
- return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
- };
-
- var is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) {
- return Object.prototype.toString.call(object) === '[object Array]';
- };
-
- var DIACRITICS = {
- 'a': '[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]',
- 'b': '[b␢βΒB฿𐌁ᛒ]',
- 'c': '[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]',
- 'd': '[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]',
- 'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]',
- 'f': '[fƑƒḞḟ]',
- 'g': '[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]',
- 'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]',
- 'i': '[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]',
- 'j': '[jȷĴĵɈɉʝɟʲ]',
- 'k': '[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]',
- 'l': '[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]',
- 'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]',
- 'o': '[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌōÕõǪǫȌȍՕօ]',
- 'p': '[pṔṕṖṗⱣᵽƤƥᵱ]',
- 'q': '[qꝖꝗʠɊɋꝘꝙq̃]',
- 'r': '[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]',
- 's': '[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]',
- 't': '[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]',
- 'u': '[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]',
- 'v': '[vṼṽṾṿƲʋꝞꝟⱱʋ]',
- 'w': '[wẂẃẀẁŴŵẄẅẆẇẈẉ]',
- 'x': '[xẌẍẊẋχ]',
- 'y': '[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]',
- 'z': '[zŹźẐẑŽžŻżẒẓẔẕƵƶ]'
- };
-
- var asciifold = (function() {
- var i, n, k, chunk;
- var foreignletters = '';
- var lookup = {};
- for (k in DIACRITICS) {
- if (DIACRITICS.hasOwnProperty(k)) {
- chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);
- foreignletters += chunk;
- for (i = 0, n = chunk.length; i < n; i++) {
- lookup[chunk.charAt(i)] = k;
- }
- }
- }
- var regexp = new RegExp('[' + foreignletters + ']', 'g');
- return function(str) {
- return str.replace(regexp, function(foreignletter) {
- return lookup[foreignletter];
- }).toLowerCase();
- };
- })();
-
-
- // export
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- return Sifter;
-}));
-
-
-
-/**
- * microplugin.js
- * Copyright (c) 2013 Brian Reavis & contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
- * file except in compliance with the License. You may obtain a copy of the License at:
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
- * ANY KIND, either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
- *
- * @author Brian Reavis
- */
-
-(function(root, factory) {
- if (typeof define === 'function' && define.amd) {
- define('microplugin', factory);
- } else if (typeof exports === 'object') {
- module.exports = factory();
- } else {
- root.MicroPlugin = factory();
- }
-}(this, function() {
- var MicroPlugin = {};
-
- MicroPlugin.mixin = function(Interface) {
- Interface.plugins = {};
-
- /**
- * Initializes the listed plugins (with options).
- * Acceptable formats:
- *
- * List (without options):
- * ['a', 'b', 'c']
- *
- * List (with options):
- * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]
- *
- * Hash (with options):
- * {'a': { ... }, 'b': { ... }, 'c': { ... }}
- *
- * @param {mixed} plugins
- */
- Interface.prototype.initializePlugins = function(plugins) {
- var i, n, key;
- var self = this;
- var queue = [];
-
- self.plugins = {
- names : [],
- settings : {},
- requested : {},
- loaded : {}
- };
-
- if (utils.isArray(plugins)) {
- for (i = 0, n = plugins.length; i < n; i++) {
- if (typeof plugins[i] === 'string') {
- queue.push(plugins[i]);
- } else {
- self.plugins.settings[plugins[i].name] = plugins[i].options;
- queue.push(plugins[i].name);
- }
- }
- } else if (plugins) {
- for (key in plugins) {
- if (plugins.hasOwnProperty(key)) {
- self.plugins.settings[key] = plugins[key];
- queue.push(key);
- }
- }
- }
-
- while (queue.length) {
- self.require(queue.shift());
- }
- };
-
- Interface.prototype.loadPlugin = function(name) {
- var self = this;
- var plugins = self.plugins;
- var plugin = Interface.plugins[name];
-
- if (!Interface.plugins.hasOwnProperty(name)) {
- throw new Error('Unable to find "' + name + '" plugin');
- }
-
- plugins.requested[name] = true;
- plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);
- plugins.names.push(name);
- };
-
- /**
- * Initializes a plugin.
- *
- * @param {string} name
- */
- Interface.prototype.require = function(name) {
- var self = this;
- var plugins = self.plugins;
-
- if (!self.plugins.loaded.hasOwnProperty(name)) {
- if (plugins.requested[name]) {
- throw new Error('Plugin has circular dependency ("' + name + '")');
- }
- self.loadPlugin(name);
- }
-
- return plugins.loaded[name];
- };
-
- /**
- * Registers a plugin.
- *
- * @param {string} name
- * @param {function} fn
- */
- Interface.define = function(name, fn) {
- Interface.plugins[name] = {
- 'name' : name,
- 'fn' : fn
- };
- };
- };
-
- var utils = {
- isArray: Array.isArray || function(vArg) {
- return Object.prototype.toString.call(vArg) === '[object Array]';
- }
- };
-
- return MicroPlugin;
-}));
-
-/**
- * selectize.js (v0.12.6)
- * Copyright (c) 2013–2015 Brian Reavis & contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
- * file except in compliance with the License. You may obtain a copy of the License at:
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
- * ANY KIND, either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
- *
- * @author Brian Reavis
- */
-
-/*jshint curly:false */
-/*jshint browser:true */
-
-(function(root, factory) {
- if (typeof define === 'function' && define.amd) {
- define('selectize', ['jquery','sifter','microplugin'], factory);
- } else if (typeof exports === 'object') {
- module.exports = factory(require('jquery'), require('sifter'), require('microplugin'));
- } else {
- root.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin);
- }
-}(this, function($, Sifter, MicroPlugin) {
- 'use strict';
-
- var highlight = function($element, pattern) {
- if (typeof pattern === 'string' && !pattern.length) return;
- var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;
-
- var highlight = function(node) {
- var skip = 0;
- // Wrap matching part of text node with highlighting , e.g.
- // Soccer -> Soccer for regex = /soc/i
- if (node.nodeType === 3) {
- var pos = node.data.search(regex);
- if (pos >= 0 && node.data.length > 0) {
- var match = node.data.match(regex);
- var spannode = document.createElement('span');
- spannode.className = 'highlight';
- var middlebit = node.splitText(pos);
- var endbit = middlebit.splitText(match[0].length);
- var middleclone = middlebit.cloneNode(true);
- spannode.appendChild(middleclone);
- middlebit.parentNode.replaceChild(spannode, middlebit);
- skip = 1;
- }
- }
- // Recurse element node, looking for child text nodes to highlight, unless element
- // is childless,